From: "Eugenio Pérez" <eperezma@redhat.com>
To: "Michael S . Tsirkin " <mst@redhat.com>
Cc: virtualization@lists.linux.dev,
"Yongji Xie" <xieyongji@bytedance.com>,
"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
"Maxime Coquelin" <mcoqueli@redhat.com>,
"Stefano Garzarella" <sgarzare@redhat.com>,
jasowang@redhat.com, "Eugenio Pérez" <eperezma@redhat.com>,
"Laurent Vivier" <lvivier@redhat.com>,
"Cindy Lu" <lulu@redhat.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH v15 13/13] Documentation: Add documentation for VDUSE Address Space IDs
Date: Mon, 19 Jan 2026 15:33:06 +0100 [thread overview]
Message-ID: <20260119143306.1818855-14-eperezma@redhat.com> (raw)
In-Reply-To: <20260119143306.1818855-1-eperezma@redhat.com>
Address Space IDs allows the VDUSE framework to support devices able to
expose different virtqueues to different part of the drivers. For
example, to let QEMU handle the net device control virtqueue, so QEMU
always knows the state of the device like mac address or number of
queues enabled, while leaving the dataplane passthrough to the guest
intact. This enables live migration.
Expands the VDUSE documentation to explain how to use the new ioctls or
the new struct members of old ioctls.
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
v15:
* Fix doc typo (Alok).
v13:
* Fix s/VDUSE_IOTLB_GET_INFO/VDUSE_VQ_SETUP/.
* Document VDUSE_SET_VQ_GROUP_ASID VDUSE message (Jason).
* Fix typos (MST and Jason).
v12: New in V12. Requested by Jason.
---
Documentation/userspace-api/vduse.rst | 53 +++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/Documentation/userspace-api/vduse.rst b/Documentation/userspace-api/vduse.rst
index bdb880e01132..81479d47c8b9 100644
--- a/Documentation/userspace-api/vduse.rst
+++ b/Documentation/userspace-api/vduse.rst
@@ -230,4 +230,57 @@ able to start the dataplane processing as follows:
5. Inject an interrupt for specific virtqueue with the VDUSE_INJECT_VQ_IRQ ioctl
after the used ring is filled.
+Enabling ASID (API version 1)
+------------------------------
+
+VDUSE supports per-address-space identifiers (ASIDs) starting with API
+version 1. Set it up with ioctl(VDUSE_SET_API_VERSION) on `/dev/vduse/control`
+and pass `VDUSE_API_VERSION_1` before creating a new VDUSE instance with
+ioctl(VDUSE_CREATE_DEV).
+
+Afterwards, you can use the member asid of ioctl(VDUSE_VQ_SETUP) argument to
+select the address space of the IOTLB you are querying. The driver could
+change the address space of any virtqueue group by using the
+VDUSE_SET_VQ_GROUP_ASID VDUSE message type, and the VDUSE instance needs to
+reply with VDUSE_REQ_RESULT_OK if it was possible to change it.
+
+Similarly, you can use ioctl(VDUSE_IOTLB_GET_FD2) to obtain the file descriptor
+describing an IOVA region of a specific ASID. Example usage:
+
+.. code-block:: c
+
+ static void *iova_to_va(int dev_fd, uint32_t asid, uint64_t iova,
+ uint64_t *len)
+ {
+ int fd;
+ void *addr;
+ size_t size;
+ struct vduse_iotlb_entry_v2 entry = { 0 };
+
+ entry.v1.start = iova;
+ entry.v1.last = iova;
+ entry.asid = asid;
+
+ fd = ioctl(dev_fd, VDUSE_IOTLB_GET_FD2, &entry);
+ if (fd < 0)
+ return NULL;
+
+ size = entry.v1.last - entry.v1.start + 1;
+ *len = entry.v1.last - iova + 1;
+ addr = mmap(0, size, perm_to_prot(entry.v1.perm), MAP_SHARED,
+ fd, entry.v1.offset);
+ close(fd);
+ if (addr == MAP_FAILED)
+ return NULL;
+
+ /*
+ * Using some data structures such as linked list to store
+ * the iotlb mapping. The munmap(2) should be called for the
+ * cached mapping when the corresponding VDUSE_UPDATE_IOTLB
+ * message is received or the device is reset.
+ */
+
+ return addr + iova - entry.v1.start;
+ }
+
For more details on the uAPI, please see include/uapi/linux/vduse.h.
--
2.52.0
prev parent reply other threads:[~2026-01-19 14:34 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-19 14:32 [PATCH v15 00/13] Add multiple address spaces support to VDUSE Eugenio Pérez
2026-01-19 14:32 ` [PATCH v15 01/13] vhost: move vdpa group bound check to vhost_vdpa Eugenio Pérez
2026-01-19 14:32 ` [PATCH v15 02/13] vduse: add v1 API definition Eugenio Pérez
2026-01-19 14:32 ` [PATCH v15 03/13] vduse: add vq group support Eugenio Pérez
2026-01-19 14:32 ` [PATCH v15 04/13] vduse: return internal vq group struct as map token Eugenio Pérez
2026-01-19 14:32 ` [PATCH v15 05/13] vdpa: document set_group_asid thread safety Eugenio Pérez
2026-01-19 14:32 ` [PATCH v15 06/13] vhost: forbid change vq groups ASID if DRIVER_OK is set Eugenio Pérez
2026-01-19 14:33 ` [PATCH v15 07/13] vduse: refactor vdpa_dev_add for goto err handling Eugenio Pérez
2026-01-19 14:33 ` [PATCH v15 08/13] vduse: remove unused vaddr parameter of vduse_domain_free_coherent Eugenio Pérez
2026-01-19 14:33 ` [PATCH v15 09/13] vduse: take out allocations from vduse_dev_alloc_coherent Eugenio Pérez
2026-01-19 14:33 ` [PATCH v15 10/13] vduse: merge tree search logic of IOTLB_GET_FD and IOTLB_GET_INFO ioctls Eugenio Pérez
2026-01-19 14:33 ` [PATCH v15 11/13] vduse: add vq group asid support Eugenio Pérez
2026-01-19 14:33 ` [PATCH v15 12/13] vduse: bump version number Eugenio Pérez
2026-01-19 14:33 ` Eugenio Pérez [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260119143306.1818855-14-eperezma@redhat.com \
--to=eperezma@redhat.com \
--cc=jasowang@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lulu@redhat.com \
--cc=lvivier@redhat.com \
--cc=mcoqueli@redhat.com \
--cc=mst@redhat.com \
--cc=sgarzare@redhat.com \
--cc=virtualization@lists.linux.dev \
--cc=xieyongji@bytedance.com \
--cc=xuanzhuo@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox