diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 29 |
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 | */ | ||
297 | void 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 | |||
290 | int amdgpu_bo_create_restricted(struct amdgpu_device *adev, | 319 | int 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, |