From: Xie Yongji <xieyongji@bytedance.com> To: mst@redhat.com, jasowang@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, parav@nvidia.com, hch@infradead.org, christian.brauner@canonical.com, rdunlap@infradead.org, willy@infradead.org, viro@zeniv.linux.org.uk, axboe@kernel.dk, bcrl@kvack.org, corbet@lwn.net, mika.penttila@nextfour.com, dan.carpenter@oracle.com, joro@8bytes.org Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 12/12] Documentation: Add documentation for VDUSE Date: Mon, 17 May 2021 17:55:13 +0800 [thread overview] Message-ID: <20210517095513.850-13-xieyongji@bytedance.com> (raw) In-Reply-To: <20210517095513.850-1-xieyongji@bytedance.com> VDUSE (vDPA Device in Userspace) is a framework to support implementing software-emulated vDPA devices in userspace. This document is intended to clarify the VDUSE design and usage. Signed-off-by: Xie Yongji <xieyongji@bytedance.com> --- Documentation/userspace-api/index.rst | 1 + Documentation/userspace-api/vduse.rst | 243 ++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 Documentation/userspace-api/vduse.rst diff --git a/Documentation/userspace-api/index.rst b/Documentation/userspace-api/index.rst index d29b020e5622..2dc25dd9f2aa 100644 --- a/Documentation/userspace-api/index.rst +++ b/Documentation/userspace-api/index.rst @@ -25,6 +25,7 @@ place where this information is gathered. iommu media/index sysfs-platform_profile + vduse .. only:: subproject and html diff --git a/Documentation/userspace-api/vduse.rst b/Documentation/userspace-api/vduse.rst new file mode 100644 index 000000000000..a804be347545 --- /dev/null +++ b/Documentation/userspace-api/vduse.rst @@ -0,0 +1,243 @@ +================================== +VDUSE - "vDPA Device in Userspace" +================================== + +vDPA (virtio data path acceleration) device is a device that uses a +datapath which complies with the virtio specifications with vendor +specific control path. vDPA devices can be both physically located on +the hardware or emulated by software. VDUSE is a framework that makes it +possible to implement software-emulated vDPA devices in userspace. + +In general, the userspace process that emulates the device is able to +run unprivileged. And to reduce security risks, we only support emulating +a few vDPA devices by default, including: virtio-net device, virtio-blk +device, virtio-scsi device and virtio-fs device. Only when a sysadmin trusts +the userspace process enough, it can relax the limitation with a +'allow_unsafe_device_emulation' module parameter. + +How VDUSE works +=============== + +Start/Stop VDUSE devices +------------------------ + +VDUSE devices are started as follows: + +1. Create a new VDUSE instance with ioctl(VDUSE_CREATE_DEV) on + /dev/vduse/control. + +2. Begin processing VDUSE messages from /dev/vduse/$NAME. The first + messages will arrive while attaching the VDUSE instance to vDPA. + +3. Send the VDPA_CMD_DEV_NEW netlink message to attach the VDUSE + instance to vDPA. + +VDUSE devices are stopped as follows: + +1. Send the VDPA_CMD_DEV_DEL netlink message to detach the VDUSE + instance to vDPA. + +2. Close the file descriptor referring to /dev/vduse/$NAME + +3. Destroy the VDUSE instance with ioctl(VDUSE_DESTROY_DEV) on + /dev/vduse/control + +The netlink messages metioned above can be sent via vdpa tool in iproute2 +or use the below sample codes: + +.. code-block:: c + + static int netlink_add_vduse(const char *name, enum vdpa_command cmd) + { + struct nl_sock *nlsock; + struct nl_msg *msg; + int famid; + + nlsock = nl_socket_alloc(); + if (!nlsock) + return -ENOMEM; + + if (genl_connect(nlsock)) + goto free_sock; + + famid = genl_ctrl_resolve(nlsock, VDPA_GENL_NAME); + if (famid < 0) + goto close_sock; + + msg = nlmsg_alloc(); + if (!msg) + goto close_sock; + + if (!genlmsg_put(msg, NL_AUTO_PORT, NL_AUTO_SEQ, famid, 0, 0, cmd, 0)) + goto nla_put_failure; + + NLA_PUT_STRING(msg, VDPA_ATTR_DEV_NAME, name); + if (cmd == VDPA_CMD_DEV_NEW) + NLA_PUT_STRING(msg, VDPA_ATTR_MGMTDEV_DEV_NAME, "vduse"); + + if (nl_send_sync(nlsock, msg)) + goto close_sock; + + nl_close(nlsock); + nl_socket_free(nlsock); + + return 0; + nla_put_failure: + nlmsg_free(msg); + close_sock: + nl_close(nlsock); + free_sock: + nl_socket_free(nlsock); + return -1; + } + +Emulate VDUSE devices +--------------------- + +To emulate a VDUSE device, we always need to implement both control path +and data path for it. + +To implement control path, a message-based communication protocol and some +types of control messages are introduced in the VDUSE framework: + +- VDUSE_SET_VQ_ADDR: Set the vring address of virtqueue. + +- VDUSE_SET_VQ_NUM: Set the size of virtqueue + +- VDUSE_SET_VQ_READY: Set ready status of virtqueue + +- VDUSE_GET_VQ_READY: Get ready status of virtqueue + +- VDUSE_SET_VQ_STATE: Set the state for virtqueue + +- VDUSE_GET_VQ_STATE: Get the state for virtqueue + +- VDUSE_SET_FEATURES: Set virtio features supported by the driver + +- VDUSE_GET_FEATURES: Get virtio features supported by the device + +- VDUSE_SET_STATUS: Set the device status + +- VDUSE_GET_STATUS: Get the device status + +- VDUSE_SET_CONFIG: Write to device specific configuration space + +- VDUSE_GET_CONFIG: Read from device specific configuration space + +- VDUSE_UPDATE_IOTLB: Notify userspace to update the memory mapping in device IOTLB + +Those control messages are mostly based on the vdpa_config_ops in +include/linux/vdpa.h which defines a unified interface to control +different types of vdpa device. Userspace needs to read()/write() +on /dev/vduse/$NAME to receive/reply those control messages +from/to VDUSE kernel module as follows: + +.. code-block:: c + + static int vduse_message_handler(int dev_fd) + { + int len; + struct vduse_dev_request req; + struct vduse_dev_response resp; + + len = read(dev_fd, &req, sizeof(req)); + if (len != sizeof(req)) + return -1; + + resp.request_id = req.request_id; + + switch (req.type) { + + /* handle different types of message */ + + } + + len = write(dev_fd, &resp, sizeof(resp)); + if (len != sizeof(resp)) + return -1; + + return 0; + } + +In the data path, vDPA device's iova regions will be mapped into userspace +with the help of VDUSE_IOTLB_GET_FD ioctl on /dev/vduse/$NAME: + +- VDUSE_IOTLB_GET_FD: get the file descriptor to the first overlapped iova region. + Userspace can access this iova region by passing fd and corresponding size, offset, + perm to mmap(). For example: + +.. code-block:: c + + static int perm_to_prot(uint8_t perm) + { + int prot = 0; + + switch (perm) { + case VDUSE_ACCESS_WO: + prot |= PROT_WRITE; + break; + case VDUSE_ACCESS_RO: + prot |= PROT_READ; + break; + case VDUSE_ACCESS_RW: + prot |= PROT_READ | PROT_WRITE; + break; + } + + return prot; + } + + static void *iova_to_va(int dev_fd, uint64_t iova, uint64_t *len) + { + int fd; + void *addr; + size_t size; + struct vduse_iotlb_entry entry; + + entry.start = iova; + entry.last = iova + 1; + fd = ioctl(dev_fd, VDUSE_IOTLB_GET_FD, &entry); + if (fd < 0) + return NULL; + + size = entry.last - entry.start + 1; + *len = entry.last - iova + 1; + addr = mmap(0, size, perm_to_prot(entry.perm), MAP_SHARED, + fd, entry.offset); + close(fd); + if (addr == MAP_FAILED) + return NULL; + + /* do something to cache this iova region */ + + return addr + iova - entry.start; + } + +Besides, the following ioctls on /dev/vduse/$NAME are provided to support +interrupt injection and setting up eventfd for virtqueue kicks: + +- VDUSE_VQ_SETUP_KICKFD: set the kickfd for virtqueue, this eventfd is used + by VDUSE kernel module to notify userspace to consume the vring. + +- VDUSE_INJECT_VQ_IRQ: inject an interrupt for specific virtqueue + +- VDUSE_INJECT_CONFIG_IRQ: inject a config interrupt + +MMU-based IOMMU Driver +====================== + +VDUSE framework implements an MMU-based on-chip IOMMU driver to support +mapping the kernel DMA buffer into the userspace iova region dynamically. +This is mainly designed for virtio-vdpa case (kernel virtio drivers). + +The basic idea behind this driver is treating MMU (VA->PA) as IOMMU (IOVA->PA). +The driver will set up MMU mapping instead of IOMMU mapping for the DMA transfer +so that the userspace process is able to use its virtual address to access +the DMA buffer in kernel. + +And to avoid security issue, a bounce-buffering mechanism is introduced to +prevent userspace accessing the original buffer directly which may contain other +kernel data. During the mapping, unmapping, the driver will copy the data from +the original buffer to the bounce buffer and back, depending on the direction of +the transfer. And the bounce-buffer addresses will be mapped into the user address +space instead of the original one. -- 2.11.0
WARNING: multiple messages have this Message-ID (diff)
From: Xie Yongji <xieyongji@bytedance.com> To: mst@redhat.com, jasowang@redhat.com, stefanha@redhat.com, sgarzare@redhat.com, parav@nvidia.com, hch@infradead.org, christian.brauner@canonical.com, rdunlap@infradead.org, willy@infradead.org, viro@zeniv.linux.org.uk, axboe@kernel.dk, bcrl@kvack.org, corbet@lwn.net, mika.penttila@nextfour.com, dan.carpenter@oracle.com, joro@8bytes.org Cc: kvm@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, iommu@lists.linux-foundation.org, linux-fsdevel@vger.kernel.org Subject: [PATCH v7 12/12] Documentation: Add documentation for VDUSE Date: Mon, 17 May 2021 17:55:13 +0800 [thread overview] Message-ID: <20210517095513.850-13-xieyongji@bytedance.com> (raw) In-Reply-To: <20210517095513.850-1-xieyongji@bytedance.com> VDUSE (vDPA Device in Userspace) is a framework to support implementing software-emulated vDPA devices in userspace. This document is intended to clarify the VDUSE design and usage. Signed-off-by: Xie Yongji <xieyongji@bytedance.com> --- Documentation/userspace-api/index.rst | 1 + Documentation/userspace-api/vduse.rst | 243 ++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 Documentation/userspace-api/vduse.rst diff --git a/Documentation/userspace-api/index.rst b/Documentation/userspace-api/index.rst index d29b020e5622..2dc25dd9f2aa 100644 --- a/Documentation/userspace-api/index.rst +++ b/Documentation/userspace-api/index.rst @@ -25,6 +25,7 @@ place where this information is gathered. iommu media/index sysfs-platform_profile + vduse .. only:: subproject and html diff --git a/Documentation/userspace-api/vduse.rst b/Documentation/userspace-api/vduse.rst new file mode 100644 index 000000000000..a804be347545 --- /dev/null +++ b/Documentation/userspace-api/vduse.rst @@ -0,0 +1,243 @@ +================================== +VDUSE - "vDPA Device in Userspace" +================================== + +vDPA (virtio data path acceleration) device is a device that uses a +datapath which complies with the virtio specifications with vendor +specific control path. vDPA devices can be both physically located on +the hardware or emulated by software. VDUSE is a framework that makes it +possible to implement software-emulated vDPA devices in userspace. + +In general, the userspace process that emulates the device is able to +run unprivileged. And to reduce security risks, we only support emulating +a few vDPA devices by default, including: virtio-net device, virtio-blk +device, virtio-scsi device and virtio-fs device. Only when a sysadmin trusts +the userspace process enough, it can relax the limitation with a +'allow_unsafe_device_emulation' module parameter. + +How VDUSE works +=============== + +Start/Stop VDUSE devices +------------------------ + +VDUSE devices are started as follows: + +1. Create a new VDUSE instance with ioctl(VDUSE_CREATE_DEV) on + /dev/vduse/control. + +2. Begin processing VDUSE messages from /dev/vduse/$NAME. The first + messages will arrive while attaching the VDUSE instance to vDPA. + +3. Send the VDPA_CMD_DEV_NEW netlink message to attach the VDUSE + instance to vDPA. + +VDUSE devices are stopped as follows: + +1. Send the VDPA_CMD_DEV_DEL netlink message to detach the VDUSE + instance to vDPA. + +2. Close the file descriptor referring to /dev/vduse/$NAME + +3. Destroy the VDUSE instance with ioctl(VDUSE_DESTROY_DEV) on + /dev/vduse/control + +The netlink messages metioned above can be sent via vdpa tool in iproute2 +or use the below sample codes: + +.. code-block:: c + + static int netlink_add_vduse(const char *name, enum vdpa_command cmd) + { + struct nl_sock *nlsock; + struct nl_msg *msg; + int famid; + + nlsock = nl_socket_alloc(); + if (!nlsock) + return -ENOMEM; + + if (genl_connect(nlsock)) + goto free_sock; + + famid = genl_ctrl_resolve(nlsock, VDPA_GENL_NAME); + if (famid < 0) + goto close_sock; + + msg = nlmsg_alloc(); + if (!msg) + goto close_sock; + + if (!genlmsg_put(msg, NL_AUTO_PORT, NL_AUTO_SEQ, famid, 0, 0, cmd, 0)) + goto nla_put_failure; + + NLA_PUT_STRING(msg, VDPA_ATTR_DEV_NAME, name); + if (cmd == VDPA_CMD_DEV_NEW) + NLA_PUT_STRING(msg, VDPA_ATTR_MGMTDEV_DEV_NAME, "vduse"); + + if (nl_send_sync(nlsock, msg)) + goto close_sock; + + nl_close(nlsock); + nl_socket_free(nlsock); + + return 0; + nla_put_failure: + nlmsg_free(msg); + close_sock: + nl_close(nlsock); + free_sock: + nl_socket_free(nlsock); + return -1; + } + +Emulate VDUSE devices +--------------------- + +To emulate a VDUSE device, we always need to implement both control path +and data path for it. + +To implement control path, a message-based communication protocol and some +types of control messages are introduced in the VDUSE framework: + +- VDUSE_SET_VQ_ADDR: Set the vring address of virtqueue. + +- VDUSE_SET_VQ_NUM: Set the size of virtqueue + +- VDUSE_SET_VQ_READY: Set ready status of virtqueue + +- VDUSE_GET_VQ_READY: Get ready status of virtqueue + +- VDUSE_SET_VQ_STATE: Set the state for virtqueue + +- VDUSE_GET_VQ_STATE: Get the state for virtqueue + +- VDUSE_SET_FEATURES: Set virtio features supported by the driver + +- VDUSE_GET_FEATURES: Get virtio features supported by the device + +- VDUSE_SET_STATUS: Set the device status + +- VDUSE_GET_STATUS: Get the device status + +- VDUSE_SET_CONFIG: Write to device specific configuration space + +- VDUSE_GET_CONFIG: Read from device specific configuration space + +- VDUSE_UPDATE_IOTLB: Notify userspace to update the memory mapping in device IOTLB + +Those control messages are mostly based on the vdpa_config_ops in +include/linux/vdpa.h which defines a unified interface to control +different types of vdpa device. Userspace needs to read()/write() +on /dev/vduse/$NAME to receive/reply those control messages +from/to VDUSE kernel module as follows: + +.. code-block:: c + + static int vduse_message_handler(int dev_fd) + { + int len; + struct vduse_dev_request req; + struct vduse_dev_response resp; + + len = read(dev_fd, &req, sizeof(req)); + if (len != sizeof(req)) + return -1; + + resp.request_id = req.request_id; + + switch (req.type) { + + /* handle different types of message */ + + } + + len = write(dev_fd, &resp, sizeof(resp)); + if (len != sizeof(resp)) + return -1; + + return 0; + } + +In the data path, vDPA device's iova regions will be mapped into userspace +with the help of VDUSE_IOTLB_GET_FD ioctl on /dev/vduse/$NAME: + +- VDUSE_IOTLB_GET_FD: get the file descriptor to the first overlapped iova region. + Userspace can access this iova region by passing fd and corresponding size, offset, + perm to mmap(). For example: + +.. code-block:: c + + static int perm_to_prot(uint8_t perm) + { + int prot = 0; + + switch (perm) { + case VDUSE_ACCESS_WO: + prot |= PROT_WRITE; + break; + case VDUSE_ACCESS_RO: + prot |= PROT_READ; + break; + case VDUSE_ACCESS_RW: + prot |= PROT_READ | PROT_WRITE; + break; + } + + return prot; + } + + static void *iova_to_va(int dev_fd, uint64_t iova, uint64_t *len) + { + int fd; + void *addr; + size_t size; + struct vduse_iotlb_entry entry; + + entry.start = iova; + entry.last = iova + 1; + fd = ioctl(dev_fd, VDUSE_IOTLB_GET_FD, &entry); + if (fd < 0) + return NULL; + + size = entry.last - entry.start + 1; + *len = entry.last - iova + 1; + addr = mmap(0, size, perm_to_prot(entry.perm), MAP_SHARED, + fd, entry.offset); + close(fd); + if (addr == MAP_FAILED) + return NULL; + + /* do something to cache this iova region */ + + return addr + iova - entry.start; + } + +Besides, the following ioctls on /dev/vduse/$NAME are provided to support +interrupt injection and setting up eventfd for virtqueue kicks: + +- VDUSE_VQ_SETUP_KICKFD: set the kickfd for virtqueue, this eventfd is used + by VDUSE kernel module to notify userspace to consume the vring. + +- VDUSE_INJECT_VQ_IRQ: inject an interrupt for specific virtqueue + +- VDUSE_INJECT_CONFIG_IRQ: inject a config interrupt + +MMU-based IOMMU Driver +====================== + +VDUSE framework implements an MMU-based on-chip IOMMU driver to support +mapping the kernel DMA buffer into the userspace iova region dynamically. +This is mainly designed for virtio-vdpa case (kernel virtio drivers). + +The basic idea behind this driver is treating MMU (VA->PA) as IOMMU (IOVA->PA). +The driver will set up MMU mapping instead of IOMMU mapping for the DMA transfer +so that the userspace process is able to use its virtual address to access +the DMA buffer in kernel. + +And to avoid security issue, a bounce-buffering mechanism is introduced to +prevent userspace accessing the original buffer directly which may contain other +kernel data. During the mapping, unmapping, the driver will copy the data from +the original buffer to the bounce buffer and back, depending on the direction of +the transfer. And the bounce-buffer addresses will be mapped into the user address +space instead of the original one. -- 2.11.0 _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2021-05-17 9:58 UTC|newest] Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-17 9:55 [PATCH v7 00/12] Introduce VDUSE - vDPA Device in Userspace Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 01/12] iova: Export alloc_iova_fast() Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-26 2:36 ` Jason Wang 2021-05-26 2:36 ` Jason Wang 2021-05-26 2:36 ` Jason Wang 2021-05-26 2:43 ` Yongji Xie 2021-05-26 2:43 ` Yongji Xie 2021-05-17 9:55 ` [PATCH v7 02/12] file: Export receive_fd() to modules Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-20 6:18 ` Al Viro 2021-05-20 6:18 ` Al Viro 2021-05-20 6:18 ` Al Viro 2021-05-20 6:32 ` Yongji Xie 2021-05-20 6:32 ` Yongji Xie 2021-05-17 9:55 ` [PATCH v7 03/12] eventfd: Increase the recursion depth of eventfd_signal() Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 04/12] virtio-blk: Add validation for block size in config space Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-19 13:39 ` Yongji Xie 2021-05-19 13:39 ` Yongji Xie 2021-05-19 14:42 ` Dan Carpenter 2021-05-19 14:42 ` Dan Carpenter 2021-05-19 14:42 ` Dan Carpenter 2021-05-20 5:25 ` Yongji Xie 2021-05-20 5:25 ` Yongji Xie 2021-05-20 5:43 ` Michael S. Tsirkin 2021-05-20 5:43 ` Michael S. Tsirkin 2021-05-20 5:43 ` Michael S. Tsirkin 2021-05-20 7:08 ` Yongji Xie 2021-05-20 7:08 ` Yongji Xie 2021-05-17 9:55 ` [PATCH v7 05/12] virtio_scsi: Add validation for residual bytes from response Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-26 2:41 ` Jason Wang 2021-05-26 2:41 ` Jason Wang 2021-05-26 2:41 ` Jason Wang 2021-05-17 9:55 ` [PATCH v7 06/12] vhost-iotlb: Add an opaque pointer for vhost IOTLB Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 07/12] vdpa: Add an opaque pointer for vdpa_config_ops.dma_map() Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 08/12] vdpa: factor out vhost_vdpa_pa_map() and vhost_vdpa_pa_unmap() Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 09/12] vdpa: Support transferring virtual addressing during DMA mapping Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 10/12] vduse: Implement an MMU-based IOMMU driver Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-17 9:55 ` [PATCH v7 11/12] vduse: Introduce VDUSE - vDPA Device in Userspace Xie Yongji 2021-05-17 9:55 ` Xie Yongji 2021-05-20 6:28 ` Al Viro 2021-05-20 6:28 ` Al Viro 2021-05-20 6:28 ` Al Viro 2021-05-20 7:03 ` Yongji Xie 2021-05-20 7:03 ` Yongji Xie 2021-05-27 4:12 ` Jason Wang 2021-05-27 4:12 ` Jason Wang 2021-05-27 4:12 ` Jason Wang 2021-05-27 4:57 ` Yongji Xie 2021-05-27 4:57 ` Yongji Xie 2021-05-27 5:00 ` Jason Wang 2021-05-27 5:00 ` Jason Wang 2021-05-27 5:00 ` Jason Wang 2021-05-27 5:08 ` Yongji Xie 2021-05-27 5:08 ` Yongji Xie 2021-05-27 5:40 ` Jason Wang 2021-05-27 5:40 ` Jason Wang 2021-05-27 5:40 ` Jason Wang 2021-05-27 7:34 ` Yongji Xie 2021-05-27 7:34 ` Yongji Xie 2021-05-27 8:41 ` Jason Wang 2021-05-27 8:41 ` Jason Wang 2021-05-27 8:41 ` Jason Wang 2021-05-27 8:43 ` Jason Wang 2021-05-27 8:43 ` Jason Wang 2021-05-27 8:43 ` Jason Wang 2021-05-27 10:14 ` Yongji Xie 2021-05-27 10:14 ` Yongji Xie 2021-05-28 1:33 ` Jason Wang 2021-05-28 1:33 ` Jason Wang 2021-05-28 1:33 ` Jason Wang 2021-05-28 3:54 ` Yongji Xie 2021-05-28 3:54 ` Yongji Xie 2021-05-28 6:38 ` Jason Wang 2021-05-28 6:38 ` Jason Wang 2021-05-28 6:38 ` Jason Wang 2021-05-27 13:17 ` Yongji Xie 2021-05-27 13:17 ` Yongji Xie 2021-05-28 2:31 ` Jason Wang 2021-05-28 2:31 ` Jason Wang 2021-05-28 2:31 ` Jason Wang 2021-05-31 4:27 ` Yongji Xie 2021-05-31 4:27 ` Yongji Xie 2021-05-31 4:38 ` Jason Wang 2021-05-31 4:38 ` Jason Wang 2021-05-31 4:38 ` Jason Wang 2021-05-31 6:24 ` Yongji Xie 2021-05-31 6:24 ` Yongji Xie 2021-05-31 4:56 ` Greg KH 2021-05-31 4:56 ` Greg KH 2021-05-31 4:56 ` Greg KH 2021-05-31 6:19 ` Yongji Xie 2021-05-31 6:19 ` Yongji Xie 2021-05-31 6:32 ` Greg KH 2021-05-31 6:32 ` Greg KH 2021-05-31 6:32 ` Greg KH 2021-05-31 7:13 ` Yongji Xie 2021-05-31 7:13 ` Yongji Xie 2021-05-17 9:55 ` Xie Yongji [this message] 2021-05-17 9:55 ` [PATCH v7 12/12] Documentation: Add documentation for VDUSE Xie Yongji 2021-05-20 6:06 ` [PATCH v7 00/12] Introduce VDUSE - vDPA Device in Userspace Michael S. Tsirkin 2021-05-20 6:06 ` Michael S. Tsirkin 2021-05-20 6:06 ` Michael S. Tsirkin 2021-05-20 9:06 ` Yongji Xie 2021-05-20 9:06 ` Yongji Xie 2021-05-25 6:40 ` Jason Wang 2021-05-25 6:40 ` Jason Wang 2021-05-25 6:40 ` Jason Wang 2021-05-25 6:48 ` Michael S. Tsirkin 2021-05-25 6:48 ` Michael S. Tsirkin 2021-05-25 6:48 ` Michael S. Tsirkin 2021-05-25 7:11 ` Jason Wang 2021-05-25 7:11 ` Jason Wang 2021-05-25 7:11 ` Jason Wang
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=20210517095513.850-13-xieyongji@bytedance.com \ --to=xieyongji@bytedance.com \ --cc=axboe@kernel.dk \ --cc=bcrl@kvack.org \ --cc=christian.brauner@canonical.com \ --cc=corbet@lwn.net \ --cc=dan.carpenter@oracle.com \ --cc=hch@infradead.org \ --cc=iommu@lists.linux-foundation.org \ --cc=jasowang@redhat.com \ --cc=joro@8bytes.org \ --cc=kvm@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mika.penttila@nextfour.com \ --cc=mst@redhat.com \ --cc=netdev@vger.kernel.org \ --cc=parav@nvidia.com \ --cc=rdunlap@infradead.org \ --cc=sgarzare@redhat.com \ --cc=stefanha@redhat.com \ --cc=viro@zeniv.linux.org.uk \ --cc=virtualization@lists.linux-foundation.org \ --cc=willy@infradead.org \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.