drm/i915: Return error value when bo not in LMEM for discrete
authorMohammed Khajapasha <mohammed.khajapasha@intel.com>
Tue, 27 Apr 2021 08:54:17 +0000 (09:54 +0100)
committerMatthew Auld <matthew.auld@intel.com>
Tue, 27 Apr 2021 15:21:47 +0000 (16:21 +0100)
Return EREMOTE value when frame buffer object is not backed by LMEM
for discrete. If Local memory is supported by hardware the framebuffer
backing gem objects should be from local memory.

Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20210427085417.120246-7-matthew.auld@intel.com
drivers/gpu/drm/i915/display/intel_display.c

index 7cd19ff40ed3c660a8fafea27b813da780fed734..fe2624b8f76cd3d4a216d0ebb08c917ff1981c43 100644 (file)
@@ -63,6 +63,7 @@
 #include "display/intel_vdsc.h"
 #include "display/intel_vrr.h"
 
+#include "gem/i915_gem_lmem.h"
 #include "gem/i915_gem_object.h"
 
 #include "gt/intel_rps.h"
@@ -11274,11 +11275,20 @@ intel_user_framebuffer_create(struct drm_device *dev,
        struct drm_framebuffer *fb;
        struct drm_i915_gem_object *obj;
        struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
+       struct drm_i915_private *i915;
 
        obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
        if (!obj)
                return ERR_PTR(-ENOENT);
 
+       /* object is backed with LMEM for discrete */
+       i915 = to_i915(obj->base.dev);
+       if (HAS_LMEM(i915) && !i915_gem_object_is_lmem(obj)) {
+               /* object is "remote", not in local memory */
+               i915_gem_object_put(obj);
+               return ERR_PTR(-EREMOTE);
+       }
+
        fb = intel_framebuffer_create(obj, &mode_cmd);
        i915_gem_object_put(obj);