drm/xe/display: Clarify XE_IOCTL_DBG message
authorMaarten Lankhorst <dev@lankhorst.se>
Fri, 17 Jan 2025 11:53:05 +0000 (12:53 +0100)
committerMaarten Lankhorst <dev@lankhorst.se>
Mon, 17 Feb 2025 08:32:12 +0000 (09:32 +0100)
This should make it easier to understand from userspace why importing BO
fails.

Reviewed-by: Stuart Summers <stuart.summers@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250117115305.53113-1-dev@lankhorst.se
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
drivers/gpu/drm/xe/display/intel_fb_bo.c
drivers/gpu/drm/xe/xe_bo.c
drivers/gpu/drm/xe/xe_bo.h

index 4d209ebc26c2a117fa6cca32342355951d9ae8c1..b91eec05ce571d72ee8c7f4146dfff794866ede3 100644 (file)
@@ -50,10 +50,10 @@ int intel_fb_bo_framebuffer_init(struct intel_framebuffer *intel_fb,
                /*
                 * XE_BO_FLAG_SCANOUT should ideally be set at creation, or is
                 * automatically set when creating FB. We cannot change caching
-                * mode when the boect is VM_BINDed, so we can only set
+                * mode when the bo is VM_BINDed, so we can only set
                 * coherency with display when unbound.
                 */
-               if (XE_IOCTL_DBG(xe, !list_empty(&bo->ttm.base.gpuva.list))) {
+               if (XE_IOCTL_DBG(xe, xe_bo_is_vm_bound(bo))) {
                        ttm_bo_unreserve(&bo->ttm);
                        ret = -EINVAL;
                        goto err;
index 78d09c5ed26d1fb1dad31006e4c6c0fcce6d43a1..25761924a8b413ae1a23cc3c15c182283a295ceb 100644 (file)
@@ -128,6 +128,22 @@ bool xe_bo_is_stolen_devmem(struct xe_bo *bo)
                GRAPHICS_VERx100(xe_bo_device(bo)) >= 1270;
 }
 
+/**
+ * xe_bo_is_vm_bound - check if BO has any mappings through VM_BIND
+ * @bo: The BO
+ *
+ * Check if a given bo is bound through VM_BIND. This requires the
+ * reservation lock for the BO to be held.
+ *
+ * Returns: boolean
+ */
+bool xe_bo_is_vm_bound(struct xe_bo *bo)
+{
+       xe_bo_assert_held(bo);
+
+       return !list_empty(&bo->ttm.base.gpuva.list);
+}
+
 static bool xe_bo_is_user(struct xe_bo *bo)
 {
        return bo->flags & XE_BO_FLAG_USER;
index f09b9315721b43c2fe7d3dcb8afd162b48f4f0c1..a25340949415ac31416f9846760c771f236f8b34 100644 (file)
@@ -241,6 +241,7 @@ bool mem_type_is_vram(u32 mem_type);
 bool xe_bo_is_vram(struct xe_bo *bo);
 bool xe_bo_is_stolen(struct xe_bo *bo);
 bool xe_bo_is_stolen_devmem(struct xe_bo *bo);
+bool xe_bo_is_vm_bound(struct xe_bo *bo);
 bool xe_bo_has_single_placement(struct xe_bo *bo);
 uint64_t vram_region_gpu_offset(struct ttm_resource *res);