From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Stefano Garzarella" <sgarzare@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>
Subject: [PULL v2 56/88] hostmem: add a new memory backend based on POSIX shm_open()
Date: Tue, 2 Jul 2024 16:18:52 -0400 [thread overview]
Message-ID: <21e7b1d01ec98d7012899760c280816c6cf328a2.1719951168.git.mst@redhat.com> (raw)
In-Reply-To: <cover.1719951168.git.mst@redhat.com>
From: Stefano Garzarella <sgarzare@redhat.com>
shm_open() creates and opens a new POSIX shared memory object.
A POSIX shared memory object allows creating memory backend with an
associated file descriptor that can be shared with external processes
(e.g. vhost-user).
The new `memory-backend-shm` can be used as an alternative when
`memory-backend-memfd` is not available (Linux only), since shm_open()
should be provided by any POSIX-compliant operating system.
This backend mimics memfd, allocating memory that is practically
anonymous. In theory shm_open() requires a name, but this is allocated
for a short time interval and shm_unlink() is called right after
shm_open(). After that, only fd is shared with external processes
(e.g., vhost-user) as if it were associated with anonymous memory.
In the future we may also allow the user to specify the name to be
passed to shm_open(), but for now we keep the backend simple, mimicking
anonymous memory such as memfd.
Acked-by: David Hildenbrand <david@redhat.com>
Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com> (QAPI schema)
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-Id: <20240618100519.145853-1-sgarzare@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
qapi/qom.json | 23 +++++-
backends/hostmem-shm.c | 123 +++++++++++++++++++++++++++++
backends/meson.build | 1 +
docs/system/devices/vhost-user.rst | 5 +-
qemu-options.hx | 16 ++++
5 files changed, 164 insertions(+), 4 deletions(-)
create mode 100644 backends/hostmem-shm.c
diff --git a/qapi/qom.json b/qapi/qom.json
index 9b8f6a7ab5..92b0fea76c 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -601,8 +601,8 @@
#
# @share: if false, the memory is private to QEMU; if true, it is
# shared (default false for backends memory-backend-file and
-# memory-backend-ram, true for backends memory-backend-epc and
-# memory-backend-memfd)
+# memory-backend-ram, true for backends memory-backend-epc,
+# memory-backend-memfd, and memory-backend-shm)
#
# @reserve: if true, reserve swap space (or huge pages) if applicable
# (default: true) (since 6.1)
@@ -721,6 +721,21 @@
'*hugetlbsize': 'size',
'*seal': 'bool' } }
+##
+# @MemoryBackendShmProperties:
+#
+# Properties for memory-backend-shm objects.
+#
+# This memory backend supports only shared memory, which is the
+# default.
+#
+# Since: 9.1
+##
+{ 'struct': 'MemoryBackendShmProperties',
+ 'base': 'MemoryBackendProperties',
+ 'data': { },
+ 'if': 'CONFIG_POSIX' }
+
##
# @MemoryBackendEpcProperties:
#
@@ -1049,6 +1064,8 @@
{ 'name': 'memory-backend-memfd',
'if': 'CONFIG_LINUX' },
'memory-backend-ram',
+ { 'name': 'memory-backend-shm',
+ 'if': 'CONFIG_POSIX' },
'pef-guest',
{ 'name': 'pr-manager-helper',
'if': 'CONFIG_LINUX' },
@@ -1121,6 +1138,8 @@
'memory-backend-memfd': { 'type': 'MemoryBackendMemfdProperties',
'if': 'CONFIG_LINUX' },
'memory-backend-ram': 'MemoryBackendProperties',
+ 'memory-backend-shm': { 'type': 'MemoryBackendShmProperties',
+ 'if': 'CONFIG_POSIX' },
'pr-manager-helper': { 'type': 'PrManagerHelperProperties',
'if': 'CONFIG_LINUX' },
'qtest': 'QtestProperties',
diff --git a/backends/hostmem-shm.c b/backends/hostmem-shm.c
new file mode 100644
index 0000000000..374edc3db8
--- /dev/null
+++ b/backends/hostmem-shm.c
@@ -0,0 +1,123 @@
+/*
+ * QEMU host POSIX shared memory object backend
+ *
+ * Copyright (C) 2024 Red Hat Inc
+ *
+ * Authors:
+ * Stefano Garzarella <sgarzare@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "sysemu/hostmem.h"
+#include "qapi/error.h"
+
+#define TYPE_MEMORY_BACKEND_SHM "memory-backend-shm"
+
+OBJECT_DECLARE_SIMPLE_TYPE(HostMemoryBackendShm, MEMORY_BACKEND_SHM)
+
+struct HostMemoryBackendShm {
+ HostMemoryBackend parent_obj;
+};
+
+static bool
+shm_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
+{
+ g_autoptr(GString) shm_name = g_string_new(NULL);
+ g_autofree char *backend_name = NULL;
+ uint32_t ram_flags;
+ int fd, oflag;
+ mode_t mode;
+
+ if (!backend->size) {
+ error_setg(errp, "can't create shm backend with size 0");
+ return false;
+ }
+
+ if (!backend->share) {
+ error_setg(errp, "can't create shm backend with `share=off`");
+ return false;
+ }
+
+ /*
+ * Let's use `mode = 0` because we don't want other processes to open our
+ * memory unless we share the file descriptor with them.
+ */
+ mode = 0;
+ oflag = O_RDWR | O_CREAT | O_EXCL;
+ backend_name = host_memory_backend_get_name(backend);
+
+ /*
+ * Some operating systems allow creating anonymous POSIX shared memory
+ * objects (e.g. FreeBSD provides the SHM_ANON constant), but this is not
+ * defined by POSIX, so let's create a unique name.
+ *
+ * From Linux's shm_open(3) man-page:
+ * For portable use, a shared memory object should be identified
+ * by a name of the form /somename;"
+ */
+ g_string_printf(shm_name, "/qemu-" FMT_pid "-shm-%s", getpid(),
+ backend_name);
+
+ fd = shm_open(shm_name->str, oflag, mode);
+ if (fd < 0) {
+ error_setg_errno(errp, errno,
+ "failed to create POSIX shared memory");
+ return false;
+ }
+
+ /*
+ * We have the file descriptor, so we no longer need to expose the
+ * POSIX shared memory object. However it will remain allocated as long as
+ * there are file descriptors pointing to it.
+ */
+ shm_unlink(shm_name->str);
+
+ if (ftruncate(fd, backend->size) == -1) {
+ error_setg_errno(errp, errno,
+ "failed to resize POSIX shared memory to %" PRIu64,
+ backend->size);
+ close(fd);
+ return false;
+ }
+
+ ram_flags = RAM_SHARED;
+ ram_flags |= backend->reserve ? 0 : RAM_NORESERVE;
+
+ return memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend),
+ backend_name, backend->size,
+ ram_flags, fd, 0, errp);
+}
+
+static void
+shm_backend_instance_init(Object *obj)
+{
+ HostMemoryBackendShm *m = MEMORY_BACKEND_SHM(obj);
+
+ MEMORY_BACKEND(m)->share = true;
+}
+
+static void
+shm_backend_class_init(ObjectClass *oc, void *data)
+{
+ HostMemoryBackendClass *bc = MEMORY_BACKEND_CLASS(oc);
+
+ bc->alloc = shm_backend_memory_alloc;
+}
+
+static const TypeInfo shm_backend_info = {
+ .name = TYPE_MEMORY_BACKEND_SHM,
+ .parent = TYPE_MEMORY_BACKEND,
+ .instance_init = shm_backend_instance_init,
+ .class_init = shm_backend_class_init,
+ .instance_size = sizeof(HostMemoryBackendShm),
+};
+
+static void register_types(void)
+{
+ type_register_static(&shm_backend_info);
+}
+
+type_init(register_types);
diff --git a/backends/meson.build b/backends/meson.build
index 106312f0c8..749b491f12 100644
--- a/backends/meson.build
+++ b/backends/meson.build
@@ -13,6 +13,7 @@ system_ss.add([files(
if host_os != 'windows'
system_ss.add(files('rng-random.c'))
system_ss.add(files('hostmem-file.c'))
+ system_ss.add([files('hostmem-shm.c'), rt])
endif
if host_os == 'linux'
system_ss.add(files('hostmem-memfd.c'))
diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst
index 9b2da106ce..35259d8ec7 100644
--- a/docs/system/devices/vhost-user.rst
+++ b/docs/system/devices/vhost-user.rst
@@ -98,8 +98,9 @@ Shared memory object
In order for the daemon to access the VirtIO queues to process the
requests it needs access to the guest's address space. This is
-achieved via the ``memory-backend-file`` or ``memory-backend-memfd``
-objects. A reference to a file-descriptor which can access this object
+achieved via the ``memory-backend-file``, ``memory-backend-memfd``, or
+``memory-backend-shm`` objects.
+A reference to a file-descriptor which can access this object
will be passed via the socket as part of the protocol negotiation.
Currently the shared memory object needs to match the size of the main
diff --git a/qemu-options.hx b/qemu-options.hx
index 8ca7f34ef0..ad6521ef5e 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -5240,6 +5240,22 @@ SRST
The ``share`` boolean option is on by default with memfd.
+ ``-object memory-backend-shm,id=id,merge=on|off,dump=on|off,share=on|off,prealloc=on|off,size=size,host-nodes=host-nodes,policy=default|preferred|bind|interleave``
+ Creates a POSIX shared memory backend object, which allows
+ QEMU to share the memory with an external process (e.g. when
+ using vhost-user).
+
+ ``memory-backend-shm`` is a more portable and less featureful version
+ of ``memory-backend-memfd``. It can then be used in any POSIX system,
+ especially when memfd is not supported.
+
+ Please refer to ``memory-backend-file`` for a description of the
+ options.
+
+ The ``share`` boolean option is on by default with shm. Setting it to
+ off will cause a failure during allocation because it is not supported
+ by this backend.
+
``-object iommufd,id=id[,fd=fd]``
Creates an iommufd backend which allows control of DMA mapping
through the ``/dev/iommu`` device.
--
MST
next prev parent reply other threads:[~2024-07-02 20:19 UTC|newest]
Thread overview: 100+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-02 20:15 [PULL v2 00/88] virtio: features,fixes Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 01/88] vhost: dirty log should be per backend type Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 02/88] vhost: Perform memory section dirty scans once per iteration Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 03/88] vhost-vdpa: check vhost_vdpa_set_vring_ready() return value Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 04/88] virtio/virtio-pci: Handle extra notification data Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 05/88] virtio: Prevent creation of device using notification-data with ioeventfd Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 06/88] virtio-mmio: Handle extra notification data Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 07/88] virtio-ccw: " Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 08/88] vhost/vhost-user: Add VIRTIO_F_NOTIFICATION_DATA to vhost feature bits Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 09/88] Fix vhost user assertion when sending more than one fd Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 10/88] vhost-vsock: add VIRTIO_F_RING_PACKED to feature_bits Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 11/88] hw/virtio: Fix obtain the buffer id from the last descriptor Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 12/88] virtio-pci: only reset pm state during resetting Michael S. Tsirkin
2024-07-02 20:15 ` [PULL v2 13/88] vhost-user-gpu: fix import of DMABUF Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 14/88] Revert "vhost-user: fix lost reconnect" Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 15/88] vhost-user: fix lost reconnect again Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 16/88] hw/cxl/mailbox: change CCI cmd set structure to be a member, not a reference Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 17/88] hw/cxl/mailbox: interface to add CCI commands to an existing CCI Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 18/88] hw/cxl/cxl-mailbox-utils: Add dc_event_log_size field to output payload of identify memory device command Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 19/88] hw/cxl/cxl-mailbox-utils: Add dynamic capacity region representative and mailbox command support Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 20/88] include/hw/cxl/cxl_device: Rename mem_size as static_mem_size for type3 memory devices Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 21/88] hw/mem/cxl_type3: Add support to create DC regions to " Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 22/88] hw/mem/cxl-type3: Refactor ct3_build_cdat_entries_for_mr to take mr size instead of mr as argument Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 23/88] hw/mem/cxl_type3: Add host backend and address space handling for DC regions Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 24/88] hw/mem/cxl_type3: Add DC extent list representative and get DC extent list mailbox support Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 25/88] hw/cxl/cxl-mailbox-utils: Add mailbox commands to support add/release dynamic capacity response Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 26/88] hw/cxl/events: Add qmp interfaces to add/release dynamic capacity extents Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 27/88] hw/mem/cxl_type3: Add DPA range validation for accesses to DC regions Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 28/88] hw/cxl/cxl-mailbox-utils: Add superset extent release mailbox support Michael S. Tsirkin
2024-07-02 20:16 ` [PULL v2 29/88] hw/mem/cxl_type3: Allow to release extent superset in QMP interface Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 30/88] linux-headers: update to 6.10-rc1 Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 31/88] hw/misc/pvpanic: centralize definition of supported events Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 32/88] tests/qtest/pvpanic: use centralized " Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 33/88] hw/misc/pvpanic: add support for normal shutdowns Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 34/88] pvpanic: Emit GUEST_PVSHUTDOWN QMP event on pvpanic shutdown signal Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 35/88] tests/qtest/pvpanic: add tests for pvshutdown event Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 36/88] Revert "docs/specs/pvpanic: mark shutdown event as not implemented" Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 37/88] virtio-pci: Fix the failure process in kvm_virtio_pci_vector_use_one() Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 38/88] hw/cxl: Fix read from bogus memory Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 39/88] virtio-pci: implement No_Soft_Reset bit Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 40/88] vhost-user-test: no set non-blocking for cal fd less than 0 Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 41/88] i386/apic: Add hint on boot failure because of disabling x2APIC Michael S. Tsirkin
2024-07-02 20:17 ` [PULL v2 42/88] hw/virtio: Free vqs after vhost_dev_cleanup() Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 43/88] virtio-iommu: add error check before assert Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 44/88] vhost-user: Skip unnecessary duplicated VHOST_USER_SET_LOG_BASE requests Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 45/88] hw/net/virtio-net.c: fix crash in iov_copy() Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 46/88] qapi: clarify that the default is backend dependent Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 47/88] libvhost-user: set msg.msg_control to NULL when it is empty Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 48/88] libvhost-user: fail vu_message_write() if sendmsg() is failing Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 49/88] libvhost-user: mask F_INFLIGHT_SHMFD if memfd is not supported Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 50/88] vhost-user-server: do not set memory fd non-blocking Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 51/88] contrib/vhost-user-blk: fix bind() using the right size of the address Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 52/88] contrib/vhost-user-*: use QEMU bswap helper functions Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 53/88] vhost-user: enable frontends on any POSIX system Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 54/88] libvhost-user: enable it " Michael S. Tsirkin
2024-07-02 20:18 ` [PULL v2 55/88] contrib/vhost-user-blk: " Michael S. Tsirkin
2024-07-02 20:18 ` Michael S. Tsirkin [this message]
2024-07-02 20:18 ` [PULL v2 57/88] tests/qtest/vhost-user-blk-test: use memory-backend-shm Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 58/88] tests/qtest/vhost-user-test: add a test case for memory-backend-shm Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 59/88] hw/virtio: Fix the de-initialization of vhost-user devices Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 60/88] hw/arm/virt-acpi-build: Drop local iort_node_offset Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 61/88] hw/i386/fw_cfg: Add etc/e820 to fw_cfg late Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 62/88] hw/arm/virt-acpi-build: Fix id_count in build_iort_id_mapping Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 63/88] uefi-test-tools/UefiTestToolsPkg: Add RISC-V support Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 64/88] uefi-test-tools: Add support for python based build script Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 65/88] tests/data/uefi-boot-images: Add RISC-V ISO image Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 66/88] qtest: bios-tables-test: Rename aarch64 tests with aarch64 in them Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 67/88] tests/qtest/bios-tables-test.c: Add support for arch in path Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 68/88] tests/qtest/bios-tables-test.c: Set "arch" for aarch64 tests Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 69/88] tests/qtest/bios-tables-test.c: Set "arch" for x86 tests Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 70/88] tests/data/acpi: Move x86 ACPI tables under x86/${machine} path Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 71/88] tests/data/acpi/virt: Move ARM64 ACPI tables under aarch64/${machine} path Michael S. Tsirkin
2024-07-02 20:19 ` [PULL v2 72/88] meson.build: Add RISC-V to the edk2-target list Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 73/88] pc-bios/meson.build: Add support for RISC-V in unpack_edk2_blobs Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 74/88] tests/data/acpi/rebuild-expected-aml.sh: Add RISC-V Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 75/88] hw/cxl/events: Improve QMP interfaces and documentation for add/release dynamic capacity Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 76/88] hw/cxl/events: Mark cxl-add-dynamic-capacity and cxl-release-dynamic-capcity unstable Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 77/88] virtio: remove virtio_tswap16s() call in vring_packed_event_read() Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 78/88] virtio-iommu: Clear IOMMUDevice when VFIO device is unplugged Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 79/88] hw/pci: Rename has_power to enabled Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 80/88] hw/ppc/spapr_pci: Do not create DT for disabled PCI device Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 81/88] hw/ppc/spapr_pci: Do not reject VFs created after a PF Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 82/88] pcie_sriov: Do not manually unrealize Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 83/88] pcie_sriov: Ensure VF function number does not overflow Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 84/88] pcie_sriov: Reuse SR-IOV VF device instances Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 85/88] pcie_sriov: Release VFs failed to realize Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 86/88] pcie_sriov: Remove num_vfs from PCIESriovPF Michael S. Tsirkin
2024-07-02 20:20 ` [PULL v2 87/88] pcie_sriov: Register VFs after migration Michael S. Tsirkin
2024-07-02 20:21 ` [PULL v2 88/88] hw/pci: Replace -1 with UINT32_MAX for romsize Michael S. Tsirkin
2024-07-03 16:31 ` [PULL v2 00/88] virtio: features,fixes Richard Henderson
2024-07-03 16:51 ` Michael S. Tsirkin
2024-07-03 17:01 ` Richard Henderson
2024-07-03 18:46 ` Thomas Huth
2024-07-03 19:45 ` Michael S. Tsirkin
2024-07-03 19:50 ` Michael S. Tsirkin
2024-07-04 5:51 ` Thomas Huth
2024-07-03 20:26 ` Michael S. Tsirkin
2024-07-03 22:37 ` Richard Henderson
2024-07-03 23:00 ` Michael S. Tsirkin
2024-07-04 5:48 ` Thomas Huth
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=21e7b1d01ec98d7012899760c280816c6cf328a2.1719951168.git.mst@redhat.com \
--to=mst@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=david@redhat.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=imammedo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
--cc=stefanha@redhat.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;
as well as URLs for NNTP newsgroup(s).