From: Christian König <christian.koe...@amd.com>

Pinning them in other devices VRAM would obviously not work.

v2: Add checks to DC code paths

Signed-off-by: Christian König <christian.koe...@amd.com>
Signed-off-by: Felix Kuehling <felix.kuehl...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c             | 6 ++++++
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c                  | 5 +++++
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c                  | 5 +++++
 drivers/gpu/drm/amd/amdgpu/dce_v6_0.c                   | 5 +++++
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c                   | 5 +++++
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c | 5 +++++
 6 files changed, 31 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index 3341c34..bd6b0dc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -180,6 +180,12 @@ int amdgpu_crtc_page_flip_target(struct drm_crtc *crtc,
        obj = new_amdgpu_fb->obj;
        new_abo = gem_to_amdgpu_bo(obj);
 
+       if (amdgpu_ttm_adev(new_abo->tbo.bdev) != adev) {
+               DRM_ERROR("Foreign BOs not allowed in the display engine\n");
+               r = -EINVAL;
+               goto cleanup;
+       }
+
        /* pin the new buffer */
        r = amdgpu_bo_reserve(new_abo, false);
        if (unlikely(r != 0)) {
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c 
b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 3bcdbb7..2c0f04d 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -1915,6 +1915,11 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc 
*crtc,
         */
        obj = amdgpu_fb->obj;
        abo = gem_to_amdgpu_bo(obj);
+       if (amdgpu_ttm_adev(abo->tbo.bdev) != adev) {
+               DRM_ERROR("Foreign BOs not allowed in the display engine\n");
+               return -EINVAL;
+       }
+
        r = amdgpu_bo_reserve(abo, false);
        if (unlikely(r != 0))
                return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c 
b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index 039de10..c3d0eaa 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -1954,6 +1954,11 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc 
*crtc,
         */
        obj = amdgpu_fb->obj;
        abo = gem_to_amdgpu_bo(obj);
+       if (amdgpu_ttm_adev(abo->tbo.bdev) != adev) {
+               DRM_ERROR("Foreign BOs not allowed in the display engine\n");
+               return -EINVAL;
+       }
+
        r = amdgpu_bo_reserve(abo, false);
        if (unlikely(r != 0))
                return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
index 5b525c9..76daa5a 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
@@ -1868,6 +1868,11 @@ static int dce_v6_0_crtc_do_set_base(struct drm_crtc 
*crtc,
         */
        obj = amdgpu_fb->obj;
        abo = gem_to_amdgpu_bo(obj);
+       if (amdgpu_ttm_adev(abo->tbo.bdev) != adev) {
+               DRM_ERROR("Foreign BOs not allowed in the display engine\n");
+               return -EINVAL;
+       }
+
        r = amdgpu_bo_reserve(abo, false);
        if (unlikely(r != 0))
                return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c 
b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 092ee37..929b040 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -1846,6 +1846,11 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc 
*crtc,
         */
        obj = amdgpu_fb->obj;
        abo = gem_to_amdgpu_bo(obj);
+       if (amdgpu_ttm_adev(abo->tbo.bdev) != adev) {
+               DRM_ERROR("Foreign BOs not allowed in the display engine\n");
+               return -EINVAL;
+       }
+
        r = amdgpu_bo_reserve(abo, false);
        if (unlikely(r != 0))
                return r;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
index 8b499cc..770018a 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_types.c
@@ -1621,6 +1621,11 @@ static int dm_plane_helper_prepare_fb(
 
        obj = afb->obj;
        rbo = gem_to_amdgpu_bo(obj);
+       if (amdgpu_ttm_adev(rbo->tbo.bdev)->ddev != plane->dev) {
+               DRM_ERROR("Foreign BOs not allowed in the display engine\n");
+               return -EINVAL;
+       }
+
        r = amdgpu_bo_reserve(rbo, false);
        if (unlikely(r != 0))
                return r;
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to