-----Original Message----- From: Vivi, Rodrigo <[email protected]> Sent: Wednesday, May 7, 2025 12:24 PM To: Cavitt, Jonathan <[email protected]> Cc: [email protected]; Gupta, saurabhg <[email protected]>; Zuo, Alex <[email protected]>; [email protected]; Brost, Matthew <[email protected]>; Zhang, Jianxun <[email protected]>; Lin, Shuicheng <[email protected]>; [email protected]; Wajdeczko, Michal <[email protected]>; Mrozek, Michal <[email protected]>; Jadav, Raag <[email protected]>; Harrison, John C <[email protected]>; Briano, Ivan <[email protected]>; Auld, Matthew <[email protected]>; [email protected] Subject: Re: [PATCH v24 3/5] drm/xe/uapi: Define drm_xe_vm_get_property > > On Wed, May 07, 2025 at 03:57:24PM +0000, Jonathan Cavitt wrote: > > Add initial declarations for the drm_xe_vm_get_property ioctl. > > > > v2: > > - Expand kernel docs for drm_xe_vm_get_property (Jianxun) > > > > v3: > > - Remove address type external definitions (Jianxun) > > - Add fault type to xe_drm_fault struct (Jianxun) > > > > v4: > > - Remove engine class and instance (Ivan) > > > > v5: > > - Add declares for fault type, access type, and fault level (Matt Brost, > > Ivan) > > > > v6: > > - Fix inconsistent use of whitespace in defines > > > > Signed-off-by: Jonathan Cavitt <[email protected]> > > Reviewed-by: Shuicheng Lin <[email protected]> > > Acked-by: Matthew Brost <[email protected]> > > Cc: Zhang Jianxun <[email protected]> > > Cc: Ivan Briano <[email protected]> > > Cc: Matthew Brost <[email protected]> > > We are already in the v25 of this series and we still don't have the userspace > PR/MR to reference here and no ack from the user space?
The userspace PR/MR is in the cover letter: """ uAPI: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32987 """ > > Sometimes faster series iterations are counterintuitively slowing things down. Who should I be messaging to get userspace acks from? -Jonathan Cavitt > > > --- > > include/uapi/drm/xe_drm.h | 86 +++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 86 insertions(+) > > > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h > > index 9c08738c3b91..556fc360a076 100644 > > --- a/include/uapi/drm/xe_drm.h > > +++ b/include/uapi/drm/xe_drm.h > > @@ -81,6 +81,7 @@ extern "C" { > > * - &DRM_IOCTL_XE_EXEC > > * - &DRM_IOCTL_XE_WAIT_USER_FENCE > > * - &DRM_IOCTL_XE_OBSERVATION > > + * - &DRM_IOCTL_XE_VM_GET_PROPERTY > > */ > > > > /* > > @@ -102,6 +103,7 @@ extern "C" { > > #define DRM_XE_EXEC 0x09 > > #define DRM_XE_WAIT_USER_FENCE 0x0a > > #define DRM_XE_OBSERVATION 0x0b > > +#define DRM_XE_VM_GET_PROPERTY 0x0c > > > > /* Must be kept compact -- no holes */ > > > > @@ -117,6 +119,7 @@ extern "C" { > > #define DRM_IOCTL_XE_EXEC DRM_IOW(DRM_COMMAND_BASE + > > DRM_XE_EXEC, struct drm_xe_exec) > > #define DRM_IOCTL_XE_WAIT_USER_FENCE > > DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_WAIT_USER_FENCE, struct > > drm_xe_wait_user_fence) > > #define DRM_IOCTL_XE_OBSERVATION DRM_IOW(DRM_COMMAND_BASE + > > DRM_XE_OBSERVATION, struct drm_xe_observation_param) > > +#define DRM_IOCTL_XE_VM_GET_PROPERTY > > DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_VM_GET_PROPERTY, struct > > drm_xe_vm_get_property) > > > > /** > > * DOC: Xe IOCTL Extensions > > @@ -1193,6 +1196,89 @@ struct drm_xe_vm_bind { > > __u64 reserved[2]; > > }; > > > > +/** struct xe_vm_fault - Describes faults for > > %DRM_XE_VM_GET_PROPERTY_FAULTS */ > > +struct xe_vm_fault { > > + /** @address: Address of the fault */ > > + __u64 address; > > + /** @address_precision: Precision of faulted address */ > > + __u32 address_precision; > > + /** @access_type: Type of address access that resulted in fault */ > > +#define FAULT_ACCESS_TYPE_READ 0 > > +#define FAULT_ACCESS_TYPE_WRITE 1 > > +#define FAULT_ACCESS_TYPE_ATOMIC 2 > > + __u8 access_type; > > + /** @fault_type: Type of fault reported */ > > +#define FAULT_TYPE_NOT_PRESENT 0 > > +#define FAULT_TYPE_WRITE_ACCESS 1 > > +#define FAULT_TYPE_ATOMIC_ACCESS 2 > > + __u8 fault_type; > > + /** @fault_level: fault level of the fault */ > > +#define FAULT_LEVEL_PTE 0 > > +#define FAULT_LEVEL_PDE 1 > > +#define FAULT_LEVEL_PDP 2 > > +#define FAULT_LEVEL_PML4 3 > > +#define FAULT_LEVEL_PML5 4 > > + __u8 fault_level; > > + /** @pad: MBZ */ > > + __u8 pad; > > + /** @reserved: MBZ */ > > + __u64 reserved[4]; > > +}; > > + > > +/** > > + * struct drm_xe_vm_get_property - Input of &DRM_IOCTL_XE_VM_GET_PROPERTY > > + * > > + * The user provides a VM and a property to query among > > DRM_XE_VM_GET_PROPERTY_*, > > + * and sets the values in the vm_id and property members, respectively. > > This > > + * determines both the VM to get the property of, as well as the property > > to > > + * report. > > + * > > + * If size is set to 0, the driver fills it with the required size for the > > + * requested property. The user is expected here to allocate memory for > > the > > + * property structure and to provide a pointer to the allocated memory > > using the > > + * data member. For some properties, this may be zero, in which case, the > > + * value of the property will be saved to the value member and size will > > remain > > + * zero on return. > > + * > > + * If size is not zero, then the IOCTL will attempt to copy the requested > > + * property into the data member. > > + * > > + * The IOCTL will return -ENOENT if the VM could not be identified from the > > + * provided VM ID, or -EINVAL if the IOCTL fails for any other reason, > > such as > > + * providing an invalid size for the given property or if the property data > > + * could not be copied to the memory allocated to the data member. > > + * > > + * The property member can be: > > + * - %DRM_XE_VM_GET_PROPERTY_FAULTS > > + */ > > +struct drm_xe_vm_get_property { > > + /** @extensions: Pointer to the first extension struct, if any */ > > + __u64 extensions; > > + > > + /** @vm_id: The ID of the VM to query the properties of */ > > + __u32 vm_id; > > + > > +#define DRM_XE_VM_GET_PROPERTY_FAULTS 0 > > + /** @property: property to get */ > > + __u32 property; > > + > > + /** @size: Size to allocate for @data */ > > + __u32 size; > > + > > + /** @pad: MBZ */ > > + __u32 pad; > > + > > + union { > > + /** @data: Pointer to user-defined array of flexible size and > > type */ > > + __u64 data; > > + /** @value: Return value for scalar queries */ > > + __u64 value; > > + }; > > + > > + /** @reserved: MBZ */ > > + __u64 reserved[3]; > > +}; > > + > > /** > > * struct drm_xe_exec_queue_create - Input of > > &DRM_IOCTL_XE_EXEC_QUEUE_CREATE > > * > > -- > > 2.43.0 > > >
