Hi all, v2->v3: - Add track for mapped memory in VIRTIO Shared memory regions, so that boundaries can be verified when a request for new mmap is received - Use address_space_read/write() for MEM_READ/_WRITE handling methods. - Improve/fix support for flexible array members for MEM_READ/_WRITE requests. - Split documentation into a separate patch. - Various small fixes from previous review.
The usecase for this patch is, e.g., to support vhost-user-gpu RESOURCE_BLOB operations, or DAX Window request for virtio-fs. In general, any operation where a backend need to request the frontend to mmap an fd into a VIRTIO Shared Memory Region, so that the guest can then access it. After receiving the SHMEM_MAP/UNMAP request, the frontend will perform the mmap with the instructed parameters (i.e., shmid, shm_offset, fd_offset, fd, lenght). As there are already a couple devices that could benefit of such a feature, and more could require it in the future, the goal is to make the implementation generic. To that end, the VIRTIO Shared Memory Region list is declared in the `VirtIODevice` struct. 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). Finally, MEM_READ/WRITE backend requests are added to deal with a potential issue when having any backend sharing a descriptor that references a mapping to another backend. The first backend will not be able to see these mappings. So these requests are a fallback for vhost-user memory translation fails. Albert Esteve (5): vhost-user: Add VIRTIO Shared Memory map request virtio: Track shared memory mappings vhost_user: Add frontend command for shmem config vhost-user-dev: Add cache BAR vhost_user: Add MEM_READ/WRITE backend requests hw/virtio/vhost-user-base.c | 37 ++- hw/virtio/vhost-user-device-pci.c | 39 +++- hw/virtio/vhost-user.c | 273 ++++++++++++++++++++-- hw/virtio/virtio.c | 59 +++++ include/hw/virtio/vhost-backend.h | 6 + include/hw/virtio/vhost-user.h | 1 + include/hw/virtio/virtio.h | 26 +++ subprojects/libvhost-user/libvhost-user.c | 144 ++++++++++++ subprojects/libvhost-user/libvhost-user.h | 90 +++++++ 9 files changed, 648 insertions(+), 27 deletions(-) -- 2.45.2