aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-09-08 07:05:34 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-09-13 16:14:09 -0400
commitd4085ea9bc8dc44eb4bfd696474f9ef26ec9e0cd (patch)
tree708c19712aa0c5c64986602964d88694b16e87ef /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
parent229a37f83454c59a9c8742c811119da4a33d619b (diff)
drm/amdgpu: use the DFS iterator in amdgpu_vm_invalidate_pds v2
Less code and easier to maintain. v2: rename the function as well Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@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.c32
1 files changed, 8 insertions, 24 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 139bd6347fc4..cca8fc931bbb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1370,37 +1370,22 @@ static void amdgpu_vm_update_pde(struct amdgpu_pte_update_params *params,
1370} 1370}
1371 1371
1372/* 1372/*
1373 * amdgpu_vm_invalidate_level - mark all PD levels as invalid 1373 * amdgpu_vm_invalidate_pds - mark all PDs as invalid
1374 * 1374 *
1375 * @adev: amdgpu_device pointer 1375 * @adev: amdgpu_device pointer
1376 * @vm: related vm 1376 * @vm: related vm
1377 * @parent: parent PD
1378 * @level: VMPT level
1379 * 1377 *
1380 * Mark all PD level as invalid after an error. 1378 * Mark all PD level as invalid after an error.
1381 */ 1379 */
1382static void amdgpu_vm_invalidate_level(struct amdgpu_device *adev, 1380static void amdgpu_vm_invalidate_pds(struct amdgpu_device *adev,
1383 struct amdgpu_vm *vm, 1381 struct amdgpu_vm *vm)
1384 struct amdgpu_vm_pt *parent,
1385 unsigned level)
1386{ 1382{
1387 unsigned pt_idx, num_entries; 1383 struct amdgpu_vm_pt_cursor cursor;
1388 1384 struct amdgpu_vm_pt *entry;
1389 /*
1390 * Recurse into the subdirectories. This recursion is harmless because
1391 * we only have a maximum of 5 layers.
1392 */
1393 num_entries = amdgpu_vm_num_entries(adev, level);
1394 for (pt_idx = 0; pt_idx < num_entries; ++pt_idx) {
1395 struct amdgpu_vm_pt *entry = &parent->entries[pt_idx];
1396
1397 if (!entry->base.bo)
1398 continue;
1399 1385
1400 if (!entry->base.moved) 1386 for_each_amdgpu_vm_pt_dfs_safe(adev, vm, cursor, entry)
1387 if (entry->base.bo && !entry->base.moved)
1401 amdgpu_vm_bo_relocated(&entry->base); 1388 amdgpu_vm_bo_relocated(&entry->base);
1402 amdgpu_vm_invalidate_level(adev, vm, entry, level + 1);
1403 }
1404} 1389}
1405 1390
1406/* 1391/*
@@ -1497,8 +1482,7 @@ restart:
1497 return 0; 1482 return 0;
1498 1483
1499error: 1484error:
1500 amdgpu_vm_invalidate_level(adev, vm, &vm->root, 1485 amdgpu_vm_invalidate_pds(adev, vm);
1501 adev->vm_manager.root_level);
1502 amdgpu_job_free(job); 1486 amdgpu_job_free(job);
1503 return r; 1487 return r;
1504} 1488}