Commit 6e97c2f9 authored by Christian König's avatar Christian König Committed by Alex Deucher

drm/amdgpu: move VM PDEs to idle after update

Move the page tables to the idle list after updating the PDEs.

We have gone back and forth with that a couple of times because of problems
with the inter PD dependencies, but it should work now that we have the
state handling cleanly separated.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 3f8951cc
...@@ -1363,25 +1363,6 @@ static int amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params, ...@@ -1363,25 +1363,6 @@ static int amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
1, 0, flags); 1, 0, flags);
} }
/**
* amdgpu_vm_invalidate_pds - mark all PDs as invalid
*
* @adev: amdgpu_device pointer
* @vm: related vm
*
* Mark all PD level as invalid after an error.
*/
static void amdgpu_vm_invalidate_pds(struct amdgpu_device *adev,
struct amdgpu_vm *vm)
{
struct amdgpu_vm_pt_cursor cursor;
struct amdgpu_vm_bo_base *entry;
for_each_amdgpu_vm_pt_dfs_safe(adev, vm, NULL, cursor, entry)
if (entry->bo && !entry->moved)
amdgpu_vm_bo_relocated(entry);
}
/** /**
* amdgpu_vm_update_pdes - make sure that all directories are valid * amdgpu_vm_update_pdes - make sure that all directories are valid
* *
...@@ -1398,6 +1379,7 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev, ...@@ -1398,6 +1379,7 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
struct amdgpu_vm *vm, bool immediate) struct amdgpu_vm *vm, bool immediate)
{ {
struct amdgpu_vm_update_params params; struct amdgpu_vm_update_params params;
struct amdgpu_vm_bo_base *entry;
int r, idx; int r, idx;
if (list_empty(&vm->relocated)) if (list_empty(&vm->relocated))
...@@ -1413,16 +1395,9 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev, ...@@ -1413,16 +1395,9 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
r = vm->update_funcs->prepare(&params, NULL, AMDGPU_SYNC_EXPLICIT); r = vm->update_funcs->prepare(&params, NULL, AMDGPU_SYNC_EXPLICIT);
if (r) if (r)
goto exit; goto error;
while (!list_empty(&vm->relocated)) {
struct amdgpu_vm_bo_base *entry;
entry = list_first_entry(&vm->relocated,
struct amdgpu_vm_bo_base,
vm_status);
amdgpu_vm_bo_idle(entry);
list_for_each_entry(entry, &vm->relocated, vm_status) {
r = amdgpu_vm_update_pde(&params, vm, entry); r = amdgpu_vm_update_pde(&params, vm, entry);
if (r) if (r)
goto error; goto error;
...@@ -1431,12 +1406,15 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev, ...@@ -1431,12 +1406,15 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
r = vm->update_funcs->commit(&params, &vm->last_update); r = vm->update_funcs->commit(&params, &vm->last_update);
if (r) if (r)
goto error; goto error;
drm_dev_exit(idx);
return 0; while (!list_empty(&vm->relocated)) {
entry = list_first_entry(&vm->relocated,
struct amdgpu_vm_bo_base,
vm_status);
amdgpu_vm_bo_idle(entry);
}
error: error:
amdgpu_vm_invalidate_pds(adev, vm);
exit:
drm_dev_exit(idx); drm_dev_exit(idx);
return r; return r;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment