Hi all, v3->v4 - Change mmap strategy to use RAM blocks and subregions. - Add new bitfield to qmp feature map - Followed most review comments from last iteration. - Merged documentation patch again with this one. Makes more sense to review them together after all. - Add documentation for MEM_READ/WRITE messages.
The goal of this patch is to support dynamic fd-backed memory maps initiated from vhost-user backends. There are many devices that could already benefit of this feature, e.g., virtiofs or virtio-gpu. After receiving the SHMEM_MAP/UNMAP request, the frontend creates the RAMBlock form the fd and maps it by adding it as a subregion of the shared memory region container. The VIRTIO Shared Memory Region list is declared in the `VirtIODevice` struct to make it generic. TODO: There was a conversation on the previous version around adding tests to the patch (which I have acknowledged). However, given the numerous changes that the patch already has, I have decided to send it early and collect some feedback while I work on the tests for the next iteration. Given that I have been able to test the implementation with my local setup, I am more or less confident that, at least, the code is in a relatively sane state so that no reviewing time is wasted on broken patches. This patch also includes: - SHMEM_CONFIG frontend request that is specifically meant to allow generic vhost-user-device frontend to be able to query VIRTIO Shared Memory settings from the backend (as this device is generic and agnostic of the actual backend configuration). - MEM_READ/WRITE backend requests are added to deal with a potential issue when having multiple backends sharing a file descriptor. When a backend calls SHMEM_MAP it makes accessing to the region fail for other backend as it is missing from their translation table. So these requests are a fallback for vhost-user memory translation fails. Albert Esteve (9): vhost-user: Add VirtIO Shared Memory map request vhost_user.rst: Align VhostUserMsg excerpt members vhost_user.rst: Add SHMEM_MAP/_UNMAP to spec vhost_user: Add frontend get_shmem_config command vhost_user.rst: Add GET_SHMEM_CONFIG message qmp: add shmem feature map vhost-user-devive: Add shmem BAR vhost_user: Add mem_read/write backend requests vhost_user.rst: Add MEM_READ/WRITE messages docs/interop/vhost-user.rst | 110 +++++++++ hw/virtio/vhost-user-base.c | 47 +++- hw/virtio/vhost-user-device-pci.c | 36 ++- hw/virtio/vhost-user.c | 272 ++++++++++++++++++++-- hw/virtio/virtio-qmp.c | 3 + hw/virtio/virtio.c | 81 +++++++ include/hw/virtio/vhost-backend.h | 9 + include/hw/virtio/vhost-user.h | 1 + include/hw/virtio/virtio.h | 29 +++ subprojects/libvhost-user/libvhost-user.c | 160 +++++++++++++ subprojects/libvhost-user/libvhost-user.h | 92 ++++++++ 11 files changed, 813 insertions(+), 27 deletions(-) -- 2.48.1