aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index b17734e0ecc8..162411bd8145 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -287,6 +287,35 @@ error_free:
287 return r; 287 return r;
288} 288}
289 289
290/**
291 * amdgpu_bo_free_kernel - free BO for kernel use
292 *
293 * @bo: amdgpu BO to free
294 *
295 * unmaps and unpin a BO for kernel internal use.
296 */
297void amdgpu_bo_free_kernel(struct amdgpu_bo **bo, u64 *gpu_addr,
298 void **cpu_addr)
299{
300 if (*bo == NULL)
301 return;
302
303 if (likely(amdgpu_bo_reserve(*bo, false) == 0)) {
304 if (cpu_addr)
305 amdgpu_bo_kunmap(*bo);
306
307 amdgpu_bo_unpin(*bo);
308 amdgpu_bo_unreserve(*bo);
309 }
310 amdgpu_bo_unref(bo);
311
312 if (gpu_addr)
313 *gpu_addr = 0;
314
315 if (cpu_addr)
316 *cpu_addr = NULL;
317}
318
290int amdgpu_bo_create_restricted(struct amdgpu_device *adev, 319int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
291 unsigned long size, int byte_align, 320 unsigned long size, int byte_align,
292 bool kernel, u32 domain, u64 flags, 321 bool kernel, u32 domain, u64 flags,