OSDN Git Service

drm/amdgpu: improve amdgpu_bo_create_kernel
authorChristian König <christian.koenig@amd.com>
Thu, 27 Jul 2017 12:52:53 +0000 (14:52 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Aug 2017 18:45:55 +0000 (14:45 -0400)
Make allocating the new BO optional.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c

index 8fddea4..81d40e3 100644 (file)
@@ -239,15 +239,20 @@ int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
                            u32 domain, struct amdgpu_bo **bo_ptr,
                            u64 *gpu_addr, void **cpu_addr)
 {
+       bool free = false;
        int r;
 
-       r = amdgpu_bo_create(adev, size, align, true, domain,
-                            AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
-                            AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
-                            NULL, NULL, bo_ptr);
-       if (r) {
-               dev_err(adev->dev, "(%d) failed to allocate kernel bo\n", r);
-               return r;
+       if (!*bo_ptr) {
+               r = amdgpu_bo_create(adev, size, align, true, domain,
+                                    AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
+                                    AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+                                    NULL, NULL, bo_ptr);
+               if (r) {
+                       dev_err(adev->dev, "(%d) failed to allocate kernel bo\n",
+                               r);
+                       return r;
+               }
+               free = true;
        }
 
        r = amdgpu_bo_reserve(*bo_ptr, false);
@@ -278,7 +283,8 @@ error_unreserve:
        amdgpu_bo_unreserve(*bo_ptr);
 
 error_free:
-       amdgpu_bo_unref(bo_ptr);
+       if (free)
+               amdgpu_bo_unref(bo_ptr);
 
        return r;
 }