diff options
author | Chunming Zhou <David1.Zhou@amd.com> | 2016-08-04 01:59:32 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-08-16 10:42:53 -0400 |
commit | 1baa439fb2f4e586bf387cbbc515468ebb16e587 (patch) | |
tree | 3516837ffc5c5224ad4a2c1675c5078eab101a1b /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |
parent | 14fd833efa3f13619623501de5e2221dfdab7f7f (diff) |
drm/amdgpu: allocate shadow for pd/pt bo V2
The pd/pt shadow bo will be used to backup page table, when gpu reset
happens, we can restore the page table by them.
V2:
Free shadow bo.
Signed-off-by: Chunming Zhou <David1.Zhou@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 7f385e78a265..1a474fa1f441 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -1328,7 +1328,8 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev, | |||
1328 | r = amdgpu_bo_create(adev, AMDGPU_VM_PTE_COUNT * 8, | 1328 | r = amdgpu_bo_create(adev, AMDGPU_VM_PTE_COUNT * 8, |
1329 | AMDGPU_GPU_PAGE_SIZE, true, | 1329 | AMDGPU_GPU_PAGE_SIZE, true, |
1330 | AMDGPU_GEM_DOMAIN_VRAM, | 1330 | AMDGPU_GEM_DOMAIN_VRAM, |
1331 | AMDGPU_GEM_CREATE_NO_CPU_ACCESS, | 1331 | AMDGPU_GEM_CREATE_NO_CPU_ACCESS | |
1332 | AMDGPU_GEM_CREATE_SHADOW, | ||
1332 | NULL, resv, &pt); | 1333 | NULL, resv, &pt); |
1333 | if (r) | 1334 | if (r) |
1334 | goto error_free; | 1335 | goto error_free; |
@@ -1527,7 +1528,8 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm) | |||
1527 | 1528 | ||
1528 | r = amdgpu_bo_create(adev, pd_size, align, true, | 1529 | r = amdgpu_bo_create(adev, pd_size, align, true, |
1529 | AMDGPU_GEM_DOMAIN_VRAM, | 1530 | AMDGPU_GEM_DOMAIN_VRAM, |
1530 | AMDGPU_GEM_CREATE_NO_CPU_ACCESS, | 1531 | AMDGPU_GEM_CREATE_NO_CPU_ACCESS | |
1532 | AMDGPU_GEM_CREATE_SHADOW, | ||
1531 | NULL, NULL, &vm->page_directory); | 1533 | NULL, NULL, &vm->page_directory); |
1532 | if (r) | 1534 | if (r) |
1533 | goto error_free_sched_entity; | 1535 | goto error_free_sched_entity; |
@@ -1583,10 +1585,16 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) | |||
1583 | kfree(mapping); | 1585 | kfree(mapping); |
1584 | } | 1586 | } |
1585 | 1587 | ||
1586 | for (i = 0; i < amdgpu_vm_num_pdes(adev); i++) | 1588 | for (i = 0; i < amdgpu_vm_num_pdes(adev); i++) { |
1589 | if (vm->page_tables[i].entry.robj && | ||
1590 | vm->page_tables[i].entry.robj->shadow) | ||
1591 | amdgpu_bo_unref(&vm->page_tables[i].entry.robj->shadow); | ||
1587 | amdgpu_bo_unref(&vm->page_tables[i].entry.robj); | 1592 | amdgpu_bo_unref(&vm->page_tables[i].entry.robj); |
1593 | } | ||
1588 | drm_free_large(vm->page_tables); | 1594 | drm_free_large(vm->page_tables); |
1589 | 1595 | ||
1596 | if (vm->page_directory->shadow) | ||
1597 | amdgpu_bo_unref(&vm->page_directory->shadow); | ||
1590 | amdgpu_bo_unref(&vm->page_directory); | 1598 | amdgpu_bo_unref(&vm->page_directory); |
1591 | fence_put(vm->page_directory_fence); | 1599 | fence_put(vm->page_directory_fence); |
1592 | } | 1600 | } |