drm/amdgpu: Refuse to pin or change acceptable domains of prime BOs to VRAM. (v2)
authorChristopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Mon, 3 Apr 2017 03:31:22 +0000 (13:31 +1000)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 7 Apr 2017 16:20:39 +0000 (12:20 -0400)
Migration to VRAM will break the sharing, resulting in rendering on the exporting GPU never becoming
visible on the importing GPU.

v2: Don't pin BOs to GTT. Instead, refuse to migrate them out of GTT.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c

index bb710e0..03a9c5c 100644 (file)
@@ -729,6 +729,11 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
                break;
        }
        case AMDGPU_GEM_OP_SET_PLACEMENT:
+               if (robj->prime_shared_count && (args->value & AMDGPU_GEM_DOMAIN_VRAM)) {
+                       r = -EINVAL;
+                       amdgpu_bo_unreserve(robj);
+                       break;
+               }
                if (amdgpu_ttm_tt_get_usermm(robj->tbo.ttm)) {
                        r = -EPERM;
                        amdgpu_bo_unreserve(robj);
index 758d8cf..cb89fff 100644 (file)
@@ -650,6 +650,10 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
        if (WARN_ON_ONCE(min_offset > max_offset))
                return -EINVAL;
 
+       /* A shared bo cannot be migrated to VRAM */
+       if (bo->prime_shared_count && (domain == AMDGPU_GEM_DOMAIN_VRAM))
+               return -EINVAL;
+
        if (bo->pin_count) {
                uint32_t mem_type = bo->tbo.mem.mem_type;