The current EVENTFD UAPI describes subscriptions using a userspace-defined
event_id and reserves queue_id for future use.

That no longer matches the intended render-node event model. Userspace
should subscribe to kernel-defined event types, while the kernel keeps
control of event semantics and signaling sources.

Add a shared UAPI enum for AMDGPU EVENTFD event types and update the
EVENTFD ioctl documentation to describe subscriptions as notification-only.

queue_id remains part of the UAPI and is now used to distinguish
queue-scoped subscriptions from GPU/device-scoped subscriptions.

USERQ_EOP, QUEUE_RESET, and SCRATCH may use queue_id for queue-specific
subscriptions. MEMORY_EXCEPTION is currently GPU-scoped and requires
queue_id = 0.

Cc: Alex Deucher <[email protected]>
Cc: Christian König <[email protected]>
Signed-off-by: Srinivasan Shanmugam <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |  6 +++---
 include/uapi/drm/amdgpu_drm.h           | 25 +++++++++++++++++++------
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index cd127a271c19..75fc3a74db28 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -643,7 +643,7 @@ int amdgpu_eventfd_ioctl(struct drm_device *dev, void *data,
        if (!fpriv)
                return -EINVAL;
 
-       if (args->flags || !args->event_id || args->eventfd < 0)
+       if (args->flags || !args->event_type || args->eventfd < 0)
                return -EINVAL;
 
        /*
@@ -656,11 +656,11 @@ int amdgpu_eventfd_ioctl(struct drm_device *dev, void 
*data,
        switch (args->op) {
        case DRM_AMDGPU_EVENTFD_OP_BIND:
                return amdgpu_eventfd_bind(&fpriv->eventfd_mgr,
-                                          args->event_id,
+                                          args->event_type,
                                           args->eventfd);
        case DRM_AMDGPU_EVENTFD_OP_UNBIND:
                return amdgpu_eventfd_unbind(&fpriv->eventfd_mgr,
-                                            args->event_id,
+                                            args->event_type,
                                             args->eventfd);
        default:
                return -EINVAL;
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index 63cde4487c47..3dffd9e581a1 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -207,28 +207,41 @@ union drm_amdgpu_gem_create {
        struct drm_amdgpu_gem_create_out        out;
 };
 
+enum drm_amdgpu_event_type {
+       DRM_AMDGPU_EVENT_TYPE_INVALID = 0,
+       DRM_AMDGPU_EVENT_TYPE_USERQ_EOP = 1,
+       DRM_AMDGPU_EVENT_TYPE_QUEUE_RESET = 2,
+       DRM_AMDGPU_EVENT_TYPE_MEMORY_EXCEPTION = 3,
+       DRM_AMDGPU_EVENT_TYPE_SCRATCH = 4,
+       DRM_AMDGPU_EVENT_TYPE_GPU_RESET = 5,
+};
+
 enum drm_amdgpu_eventfd_op {
        DRM_AMDGPU_EVENTFD_OP_BIND = 0,
        DRM_AMDGPU_EVENTFD_OP_UNBIND = 1,
 };
 
 /**
- * struct drm_amdgpu_eventfd - bind or unbind an eventfd to an event_id
+ * struct drm_amdgpu_eventfd - bind or unbind an eventfd to an AMDGPU event
  * @op: operation type, see &enum drm_amdgpu_eventfd_op
- * @event_id: userspace-defined event identifier
+ * @event_type: kernel-defined AMDGPU event type
  * @eventfd: eventfd file descriptor
- * @queue_id: queue identifier for future queue-specific subscriptions
+ * @queue_id: queue identifier for queue-scoped subscriptions, or 0 for
+ *           device/GPU-scoped subscriptions
  * @flags: must be 0
  *
  * This ioctl lets userspace register or unregister eventfd notifications
  * for a render-node event.
  *
- * For now, @queue_id is reserved for future queue-specific subscriptions
- * and must be 0.
+ * Eventfd signaling is notification-only.
+ *
+ * USERQ_EOP, QUEUE_RESET, and SCRATCH may use @queue_id for queue-scoped
+ * subscriptions. MEMORY_EXCEPTION is currently GPU-scoped and requires
+ * @queue_id = 0.
  */
 struct drm_amdgpu_eventfd {
        __u32 op;
-       __u32 event_id;
+       __u32 event_type;
        __s32 eventfd;
        __u32 queue_id;
        __u32 flags;
-- 
2.34.1

Reply via email to