All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v13 0/7] vhost-user: Add SHMEM_MAP/UNMAP requests
@ 2026-02-19 13:03 Albert Esteve
  2026-02-19 13:03 ` [PATCH v13 1/7] vhost-user: Add VirtIO Shared Memory map request Albert Esteve
                   ` (7 more replies)
  0 siblings, 8 replies; 21+ messages in thread
From: Albert Esteve @ 2026-02-19 13:03 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Xu, Pierrick Bouvier, mst, dbassey,
	Philippe Mathieu-Daudé, Alex Bennée, Paolo Bonzini,
	Fabiano Rosas, stefanha, manos.pitsidianakis, Stefano Garzarella,
	jasowang, Laurent Vivier, slp, hi, stevensd

Hi all,

v12-v13
- SMEM_UNMAP spec update to explicitly state the use of
  VHOST_USER_PROTOCOL_F_REPLY_ACK for replies
- Removed confusing remark for 0-sized regions in
  GET_SHMEM_CONFIG
v11->v12
- Refined VIRTIO Shared Memory Region configuration mem size
  spec description
- Removed unused name in vhost-user-base's vub_device_realize to
  avoid build error
- Initialize shmem in vhost_user_backend_handle_shmem_unmap
  to avoid compiler being confused
- Added stub for memory_region_init_ram_from_fd in memory.h
  for windows builds
- Use memory_region_size for shmem_region handlers instead
  of accessing size member directly in shmem mrs
v10->v11
- Rebase to grab commit fde5930cc37175cfcd0f03a089e26f4458a52311
  and explicitly unset reply_ack on the SHMEM_MAP/UNMAP msg.
- Mention mapping cleanup on device reset in the spec.
v9->v10
- Fix transaction_commit invoked without transaction_begin
  on vhost_user_backend_handle_shmem_map() early errors
- Removed fd tracking on VirtioSharedMemoryMapping, it
  is handled by the RAMBlock
- Reject invalid BAR configurations when VIRTIO Shared Memory
  Regions are in use by vhost-user-test-device

This patch series implements dynamic fd-backed memory mapping support
for vhost-user backends, enabling backends to dynamically request memory
mappings and unmappings during runtime through the new
VHOST_USER_BACKEND_SHMEM_MAP/UNMAP protocol messages.

This feature benefits various VIRTIO devices that require dynamic shared
memory management, including virtiofs (for DAX mappings), virtio-gpu
(for resource sharing), and the recently standardized virtio-media.

The implementation introduces a QOM-based architecture for managing
shared memory lifecycle:

- VirtioSharedMemoryMapping: an intermediate object that manages
  individual memory mappings by acting as generic container for regions
  declared in any vhost-user device type
- Dynamic Mapping: backends can request mappings via SHMEM_MAP messages,
  with the frontend creating MemoryRegions from the provided file
  descriptors and adding them as subregions

When a SHMEM_MAP request is received, the frontend:
1. Creates VirtioSharedMemoryMapping to manage the mapping lifecycle
2. Maps the provided fd with memory_region_init_ram_from_fd()
3. Creates a MemoryRegion backed by the mapped memory
4. Adds it as a subregion of the appropiate VIRTIO Shared Memory Region

The QOM reference counting ensures automatic cleanup when mappings are
removed or the device is destroyed.

This patch also includes:
- VHOST_USER_GET_SHMEM_CONFIG: a new frontend request allowing generic
  vhost-user devices to query shared memory configuration from backends
  at device initialization, enabling the generic vhost-user-device
  frontend to work with any backend regardless of specific shared memory
  requirements.

The implementation has been tested with rust-vmm based backends.

Albert Esteve (7):
  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-device: Add shared memory BAR

 docs/interop/vhost-user.rst               | 104 +++++++++
 hw/virtio/vhost-user-base.c               |  46 +++-
 hw/virtio/vhost-user-test-device-pci.c    |  38 ++-
 hw/virtio/vhost-user.c                    | 269 ++++++++++++++++++++++
 hw/virtio/virtio-qmp.c                    |   3 +
 hw/virtio/virtio.c                        | 201 ++++++++++++++++
 include/hw/virtio/vhost-backend.h         |  10 +
 include/hw/virtio/vhost-user.h            |   1 +
 include/hw/virtio/virtio.h                | 137 +++++++++++
 include/system/memory.h                   |  13 ++
 subprojects/libvhost-user/libvhost-user.c |  70 ++++++
 subprojects/libvhost-user/libvhost-user.h |  54 +++++
 12 files changed, 941 insertions(+), 5 deletions(-)

-- 
2.52.0



^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2026-03-04 14:11 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-19 13:03 [PATCH v13 0/7] vhost-user: Add SHMEM_MAP/UNMAP requests Albert Esteve
2026-02-19 13:03 ` [PATCH v13 1/7] vhost-user: Add VirtIO Shared Memory map request Albert Esteve
2026-03-04 13:08   ` Stefano Garzarella
2026-03-04 13:31     ` Albert Esteve
2026-02-19 13:03 ` [PATCH v13 2/7] vhost_user.rst: Align VhostUserMsg excerpt members Albert Esteve
2026-03-04 13:10   ` Stefano Garzarella
2026-02-19 13:03 ` [PATCH v13 3/7] vhost_user.rst: Add SHMEM_MAP/_UNMAP to spec Albert Esteve
2026-02-21 13:54   ` Alyssa Ross
2026-03-04  9:46   ` Albert Esteve
2026-03-04 10:23     ` Albert Esteve
2026-03-04 13:11       ` Stefano Garzarella
2026-02-19 13:03 ` [PATCH v13 4/7] vhost_user: Add frontend get_shmem_config command Albert Esteve
2026-03-04 13:12   ` Stefano Garzarella
2026-02-19 13:03 ` [PATCH v13 5/7] vhost_user.rst: Add GET_SHMEM_CONFIG message Albert Esteve
2026-03-04 13:12   ` Stefano Garzarella
2026-02-19 13:03 ` [PATCH v13 6/7] qmp: add shmem feature map Albert Esteve
2026-03-04 13:13   ` Stefano Garzarella
2026-02-19 13:03 ` [PATCH v13 7/7] vhost-user-device: Add shared memory BAR Albert Esteve
2026-03-04 13:26   ` Stefano Garzarella
2026-03-04 14:10     ` Albert Esteve
2026-03-04 13:28 ` [PATCH v13 0/7] vhost-user: Add SHMEM_MAP/UNMAP requests Stefano Garzarella

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.