diff options
author | Monk Liu <Monk.Liu@amd.com> | 2017-11-13 22:55:50 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-12-06 12:47:50 -0500 |
commit | f59548c8824c8e361120bf87a12fc3a68f17a1ce (patch) | |
tree | ebb0f4b2c2f814d45f20c76e5474aa5bb1563660 /drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |
parent | c79ee7d8c6cba8775b842063cf5bcdf101dc1e36 (diff) |
drm/amdgpu:fix NULL pointer access during drv remove
NULL pointer is because original logic will step into
set_pde_pte() even after the gart.ptr is freed due to
there are twice gart_unbind() on all gart area.
also, there are other minor fixes:
1,since gart_init only create dummy page, the corresponding
gart_fini shouldn't do more like unbinding all GART, this is
unnecessary because in driver fini stage all GART unbinding
had already been done during each IP's SW_FINI (GMC's
SW_FINI is the last one called), so remove the step
for the GART unbinding in gart_fini().
2,gart_fini() is already invoked during each GMC IP's gart_fini
routine,e.g. gmc_vx_0_gart_fini(), so no need to manually
call it during ttm_fini().
3,amdgpu_gem_force_release() should be put ahead of
amdgpu_vm_manager_fini()
Signed-off-by: Monk Liu <Monk.Liu@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_ttm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index d49c768cf3dc..07ecf721ebf9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -1402,6 +1402,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev) | |||
1402 | 1402 | ||
1403 | amdgpu_ttm_debugfs_fini(adev); | 1403 | amdgpu_ttm_debugfs_fini(adev); |
1404 | amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL); | 1404 | amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL); |
1405 | amdgpu_fw_reserve_vram_fini(adev); | ||
1405 | 1406 | ||
1406 | ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_VRAM); | 1407 | ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_VRAM); |
1407 | ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_TT); | 1408 | ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_TT); |
@@ -1412,7 +1413,6 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev) | |||
1412 | if (adev->gds.oa.total_size) | 1413 | if (adev->gds.oa.total_size) |
1413 | ttm_bo_clean_mm(&adev->mman.bdev, AMDGPU_PL_OA); | 1414 | ttm_bo_clean_mm(&adev->mman.bdev, AMDGPU_PL_OA); |
1414 | ttm_bo_device_release(&adev->mman.bdev); | 1415 | ttm_bo_device_release(&adev->mman.bdev); |
1415 | amdgpu_gart_fini(adev); | ||
1416 | amdgpu_ttm_global_fini(adev); | 1416 | amdgpu_ttm_global_fini(adev); |
1417 | adev->mman.initialized = false; | 1417 | adev->mman.initialized = false; |
1418 | DRM_INFO("amdgpu: ttm finalized\n"); | 1418 | DRM_INFO("amdgpu: ttm finalized\n"); |