mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
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: Christian König <christian.koenig@amd.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
3f8951cc12
commit
6e97c2f968
|
|
@ -1363,25 +1363,6 @@ static int amdgpu_vm_update_pde(struct amdgpu_vm_update_params *params,
|
|||
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
|
||||
*
|
||||
|
|
@ -1398,6 +1379,7 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
|
|||
struct amdgpu_vm *vm, bool immediate)
|
||||
{
|
||||
struct amdgpu_vm_update_params params;
|
||||
struct amdgpu_vm_bo_base *entry;
|
||||
int r, idx;
|
||||
|
||||
if (list_empty(&vm->relocated))
|
||||
|
|
@ -1413,16 +1395,9 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
|
|||
|
||||
r = vm->update_funcs->prepare(¶ms, NULL, AMDGPU_SYNC_EXPLICIT);
|
||||
if (r)
|
||||
goto exit;
|
||||
|
||||
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);
|
||||
goto error;
|
||||
|
||||
list_for_each_entry(entry, &vm->relocated, vm_status) {
|
||||
r = amdgpu_vm_update_pde(¶ms, vm, entry);
|
||||
if (r)
|
||||
goto error;
|
||||
|
|
@ -1431,12 +1406,15 @@ int amdgpu_vm_update_pdes(struct amdgpu_device *adev,
|
|||
r = vm->update_funcs->commit(¶ms, &vm->last_update);
|
||||
if (r)
|
||||
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:
|
||||
amdgpu_vm_invalidate_pds(adev, vm);
|
||||
exit:
|
||||
drm_dev_exit(idx);
|
||||
return r;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user