diff options
author | Andrew Morton <akpm@linux-foundation.org> | 2023-06-30 18:41:39 +0300 |
---|---|---|
committer | Andrew Morton <akpm@linux-foundation.org> | 2023-06-30 18:41:39 +0300 |
commit | 44f10dbefd5e41b3385af91f855a57aa2afaf40e (patch) | |
tree | 944c9f1cda8322691468e6f10dc5b0d41c487621 /drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | |
parent | 0a30901b0732a59e038088d3de3e5611db1870d3 (diff) | |
parent | e55e5df193d247a38a5e1ac65a5316a0adcc22fa (diff) | |
download | linux-44f10dbefd5e41b3385af91f855a57aa2afaf40e.tar.xz |
Merge branch 'master' into mm-hotfixes-stable
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c index c6d4d41c4393..23d054526e7c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c @@ -106,3 +106,41 @@ int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm, ttm_eu_backoff_reservation(&ticket, &list); return 0; } + +int amdgpu_unmap_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm, + struct amdgpu_bo *bo, struct amdgpu_bo_va *bo_va, + uint64_t csa_addr) +{ + struct ww_acquire_ctx ticket; + struct list_head list; + struct amdgpu_bo_list_entry pd; + struct ttm_validate_buffer csa_tv; + int r; + + INIT_LIST_HEAD(&list); + INIT_LIST_HEAD(&csa_tv.head); + csa_tv.bo = &bo->tbo; + csa_tv.num_shared = 1; + + list_add(&csa_tv.head, &list); + amdgpu_vm_get_pd_bo(vm, &list, &pd); + + r = ttm_eu_reserve_buffers(&ticket, &list, true, NULL); + if (r) { + DRM_ERROR("failed to reserve CSA,PD BOs: err=%d\n", r); + return r; + } + + r = amdgpu_vm_bo_unmap(adev, bo_va, csa_addr); + if (r) { + DRM_ERROR("failed to do bo_unmap on static CSA, err=%d\n", r); + ttm_eu_backoff_reservation(&ticket, &list); + return r; + } + + amdgpu_vm_bo_del(adev, bo_va); + + ttm_eu_backoff_reservation(&ticket, &list); + + return 0; +} |