On Fri, Aug 8, 2025 at 9:45 AM Maxime Coquelin <maxime.coque...@redhat.com> wrote: > > > > On 8/7/25 1:57 PM, Eugenio Pérez wrote: > > diff --git a/include/uapi/linux/vduse.h b/include/uapi/linux/vduse.h > > index b4b139dc76bb..d300fd5f867f 100644 > > --- a/include/uapi/linux/vduse.h > > +++ b/include/uapi/linux/vduse.h > > @@ -47,7 +47,8 @@ struct vduse_dev_config { > > __u32 vq_num; > > __u32 vq_align; > > __u32 ngroups; /* if VDUSE_API_VERSION >= 1 */ > > - __u32 reserved[12]; > > + __u32 nas; /* if VDUSE_API_VERSION >= 1 */ > > + __u32 reserved[11]; > > __u32 config_size; > > __u8 config[]; > > }; > > @@ -82,6 +83,17 @@ struct vduse_iotlb_entry { > > __u8 perm; > > }; > > > > +struct vduse_iotlb_entry_v2 { > > + __u64 offset; > > + __u64 start; > > + __u64 last; > > +#define VDUSE_ACCESS_RO 0x1 > > +#define VDUSE_ACCESS_WO 0x2 > > +#define VDUSE_ACCESS_RW 0x3 > > + __u8 perm; > > + __u32 asid; > > +}; > > + > > /* > > * Find the first IOVA region that overlaps with the range [start, last] > > * and return the corresponding file descriptor. Return -EINVAL means the > > @@ -172,6 +184,16 @@ struct vduse_vq_group { > > __u32 num; > > }; > > > > +/** > > + * struct vduse_vq_group - virtqueue group > > + @ @group: Index of the virtqueue group > > + * @asid: Address space ID of the group > > + */ > > +struct vduse_vq_group_asid { > > + __u32 group; > > + __u32 asid; > > +}; > > + > > /** > > * struct vduse_vq_info - information of a virtqueue > > * @index: virtqueue index > > @@ -232,6 +254,7 @@ struct vduse_vq_eventfd { > > * @uaddr: start address of userspace memory, it must be aligned to page > > size > > * @iova: start of the IOVA region > > * @size: size of the IOVA region > > + * @asid: Address space ID of the IOVA region > > * @reserved: for future use, needs to be initialized to zero > > * > > * Structure used by VDUSE_IOTLB_REG_UMEM and VDUSE_IOTLB_DEREG_UMEM > > @@ -241,7 +264,8 @@ struct vduse_iova_umem { > > __u64 uaddr; > > __u64 iova; > > __u64 size; > > - __u64 reserved[3]; > > + __u32 asid; > > + __u32 reserved[5]; > > }; > > > > /* Register userspace memory for IOVA regions */ > > @@ -265,7 +289,8 @@ struct vduse_iova_info { > > __u64 last; > > #define VDUSE_IOVA_CAP_UMEM (1 << 0) > > __u64 capability; > > - __u64 reserved[3]; > > + __u32 asid; /* Only if device API version >= 1 */ > > + __u32 reserved[5]; > > }; > > > > /* > > @@ -289,6 +314,7 @@ enum vduse_req_type { > > VDUSE_UPDATE_IOTLB, > > VDUSE_GET_VQ_GROUP, > > VDUSE_GET_VRING_DESC_GROUP, > > + VDUSE_SET_VQ_GROUP_ASID, > > }; > > > > /** > > @@ -344,6 +370,8 @@ struct vduse_dev_request { > > struct vduse_dev_status s; > > struct vduse_iova_range iova; > > struct vduse_vq_group vq_group; /* Only if vduse api version > > >= 1 */ > > + /* Only if vduse api version >= 1 */ > > + struct vduse_vq_group_asid vq_group_asid; > > __u32 padding[32]; > > I think you need to update padding size here. >
Nope, that's an union so u32[32] is the total size. Modifying it would change uapi :). > > }; > > }; > > @@ -367,6 +395,8 @@ struct vduse_dev_response { > > union { > > struct vduse_vq_state vq_state; > > struct vduse_vq_group vq_group; /* Only if vduse api version > > >= 1 */ > > + /* Only if vduse api version >= 1 */ > > + struct vduse_vq_group_asid vq_group_asid; > > __u32 padding[32]; > > }; > > }; > > Same > > Regards, > Maxime >