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
