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.

        };
  };
@@ -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


Reply via email to