drm/xe/uapi: Split xe_sync types from flags
authorRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 22 Nov 2023 14:38:27 +0000 (14:38 +0000)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:45:19 +0000 (11:45 -0500)
Let's continue on the uapi clean-up with more splits
with stuff into their own exclusive fields instead of
reusing stuff.

Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Francois Dugast <francois.dugast@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
drivers/gpu/drm/xe/xe_sync.c
drivers/gpu/drm/xe/xe_sync_types.h
include/uapi/drm/xe_drm.h

index ea96ba4b41da4ddcd1bfd706848ccd40853ca598..936227e794835694b3643699cc0c3ae14b6a0c1b 100644 (file)
@@ -17,8 +17,6 @@
 #include "xe_macros.h"
 #include "xe_sched_job_types.h"
 
-#define SYNC_FLAGS_TYPE_MASK 0x3
-
 struct user_fence {
        struct xe_device *xe;
        struct kref refcount;
@@ -109,15 +107,13 @@ int xe_sync_entry_parse(struct xe_device *xe, struct xe_file *xef,
        if (copy_from_user(&sync_in, sync_user, sizeof(*sync_user)))
                return -EFAULT;
 
-       if (XE_IOCTL_DBG(xe, sync_in.flags &
-                        ~(SYNC_FLAGS_TYPE_MASK | DRM_XE_SYNC_FLAG_SIGNAL)) ||
-           XE_IOCTL_DBG(xe, sync_in.pad) ||
+       if (XE_IOCTL_DBG(xe, sync_in.flags & ~DRM_XE_SYNC_FLAG_SIGNAL) ||
            XE_IOCTL_DBG(xe, sync_in.reserved[0] || sync_in.reserved[1]))
                return -EINVAL;
 
        signal = sync_in.flags & DRM_XE_SYNC_FLAG_SIGNAL;
-       switch (sync_in.flags & SYNC_FLAGS_TYPE_MASK) {
-       case DRM_XE_SYNC_FLAG_SYNCOBJ:
+       switch (sync_in.type) {
+       case DRM_XE_SYNC_TYPE_SYNCOBJ:
                if (XE_IOCTL_DBG(xe, in_lr_mode && signal))
                        return -EOPNOTSUPP;
 
@@ -135,7 +131,7 @@ int xe_sync_entry_parse(struct xe_device *xe, struct xe_file *xef,
                }
                break;
 
-       case DRM_XE_SYNC_FLAG_TIMELINE_SYNCOBJ:
+       case DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ:
                if (XE_IOCTL_DBG(xe, in_lr_mode && signal))
                        return -EOPNOTSUPP;
 
@@ -165,12 +161,7 @@ int xe_sync_entry_parse(struct xe_device *xe, struct xe_file *xef,
                }
                break;
 
-       case DRM_XE_SYNC_FLAG_DMA_BUF:
-               if (XE_IOCTL_DBG(xe, "TODO"))
-                       return -EINVAL;
-               break;
-
-       case DRM_XE_SYNC_FLAG_USER_FENCE:
+       case DRM_XE_SYNC_TYPE_USER_FENCE:
                if (XE_IOCTL_DBG(xe, !signal))
                        return -EOPNOTSUPP;
 
@@ -192,6 +183,7 @@ int xe_sync_entry_parse(struct xe_device *xe, struct xe_file *xef,
                return -EINVAL;
        }
 
+       sync->type = sync_in.type;
        sync->flags = sync_in.flags;
        sync->timeline_value = sync_in.timeline_value;
 
@@ -252,8 +244,7 @@ void xe_sync_entry_signal(struct xe_sync_entry *sync, struct xe_sched_job *job,
                        user_fence_put(sync->ufence);
                        dma_fence_put(fence);
                }
-       } else if ((sync->flags & SYNC_FLAGS_TYPE_MASK) ==
-                  DRM_XE_SYNC_FLAG_USER_FENCE) {
+       } else if (sync->type == DRM_XE_SYNC_TYPE_USER_FENCE) {
                job->user_fence.used = true;
                job->user_fence.addr = sync->addr;
                job->user_fence.value = sync->timeline_value;
index 24fccc26cb5305a60611ce281ae19f632935b412..852db5e7884fcde668f6f85b6e4049fa5290f8a9 100644 (file)
@@ -21,6 +21,7 @@ struct xe_sync_entry {
        struct user_fence *ufence;
        u64 addr;
        u64 timeline_value;
+       u32 type;
        u32 flags;
 };
 
index 2e58ddcf92f5e72b8e3e3771efde50f967e377d4..978fca7bb235f3064fc863a2d75bbc8c5cf3f47b 100644 (file)
@@ -947,16 +947,16 @@ struct drm_xe_sync {
        /** @extensions: Pointer to the first extension struct, if any */
        __u64 extensions;
 
-#define DRM_XE_SYNC_FLAG_SYNCOBJ               0x0
-#define DRM_XE_SYNC_FLAG_TIMELINE_SYNCOBJ      0x1
-#define DRM_XE_SYNC_FLAG_DMA_BUF               0x2
-#define DRM_XE_SYNC_FLAG_USER_FENCE            0x3
-#define DRM_XE_SYNC_FLAG_SIGNAL                0x10
+#define DRM_XE_SYNC_TYPE_SYNCOBJ               0x0
+#define DRM_XE_SYNC_TYPE_TIMELINE_SYNCOBJ      0x1
+#define DRM_XE_SYNC_TYPE_USER_FENCE            0x2
+       /** @type: Type of the this sync object */
+       __u32 type;
+
+#define DRM_XE_SYNC_FLAG_SIGNAL        (1 << 0)
+       /** @flags: Sync Flags */
        __u32 flags;
 
-       /** @pad: MBZ */
-       __u32 pad;
-
        union {
                __u32 handle;