qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Eric Blake" <eblake@redhat.com>
Subject: [PULL v3 53/85] hostmem: add a new memory backend based on POSIX shm_open()
Date: Wed, 3 Jul 2024 18:48:24 -0400	[thread overview]
Message-ID: <4e647fa08586a5ada74cf6d3ae1cdf3a027202cb.1720046570.git.mst@redhat.com> (raw)
In-Reply-To: <cover.1720046570.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



  parent reply	other threads:[~2024-07-03 22:51 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-03 22:44 [PULL v3 00/85] virtio: features,fixes Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 01/85] vhost: dirty log should be per backend type Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 02/85] vhost: Perform memory section dirty scans once per iteration Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 03/85] vhost-vdpa: check vhost_vdpa_set_vring_ready() return value Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 04/85] virtio/virtio-pci: Handle extra notification data Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 05/85] virtio: Prevent creation of device using notification-data with ioeventfd Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 06/85] virtio-mmio: Handle extra notification data Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 07/85] virtio-ccw: " Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 08/85] vhost/vhost-user: Add VIRTIO_F_NOTIFICATION_DATA to vhost feature bits Michael S. Tsirkin
2024-07-03 22:44 ` [PULL v3 09/85] Fix vhost user assertion when sending more than one fd Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 10/85] vhost-vsock: add VIRTIO_F_RING_PACKED to feature_bits Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 11/85] hw/virtio: Fix obtain the buffer id from the last descriptor Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 12/85] virtio-pci: only reset pm state during resetting Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 13/85] vhost-user-gpu: fix import of DMABUF Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 14/85] Revert "vhost-user: fix lost reconnect" Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 15/85] vhost-user: fix lost reconnect again Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 16/85] hw/cxl/mailbox: change CCI cmd set structure to be a member, not a reference Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 17/85] hw/cxl/mailbox: interface to add CCI commands to an existing CCI Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 18/85] hw/cxl/cxl-mailbox-utils: Add dc_event_log_size field to output payload of identify memory device command Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 19/85] hw/cxl/cxl-mailbox-utils: Add dynamic capacity region representative and mailbox command support Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 20/85] include/hw/cxl/cxl_device: Rename mem_size as static_mem_size for type3 memory devices Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 21/85] hw/mem/cxl_type3: Add support to create DC regions to " Michael S. Tsirkin
2024-07-03 22:45 ` [PULL v3 22/85] 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-03 22:46 ` [PULL v3 23/85] hw/mem/cxl_type3: Add host backend and address space handling for DC regions Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 24/85] hw/mem/cxl_type3: Add DC extent list representative and get DC extent list mailbox support Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 25/85] hw/cxl/cxl-mailbox-utils: Add mailbox commands to support add/release dynamic capacity response Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 26/85] hw/cxl/events: Add qmp interfaces to add/release dynamic capacity extents Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 27/85] hw/mem/cxl_type3: Add DPA range validation for accesses to DC regions Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 28/85] hw/cxl/cxl-mailbox-utils: Add superset extent release mailbox support Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 29/85] hw/mem/cxl_type3: Allow to release extent superset in QMP interface Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 30/85] linux-headers: update to 6.10-rc1 Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 31/85] hw/misc/pvpanic: centralize definition of supported events Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 32/85] tests/qtest/pvpanic: use centralized " Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 33/85] hw/misc/pvpanic: add support for normal shutdowns Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 34/85] pvpanic: Emit GUEST_PVSHUTDOWN QMP event on pvpanic shutdown signal Michael S. Tsirkin
2024-07-03 22:46 ` [PULL v3 35/85] tests/qtest/pvpanic: add tests for pvshutdown event Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 36/85] Revert "docs/specs/pvpanic: mark shutdown event as not implemented" Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 37/85] virtio-pci: Fix the failure process in kvm_virtio_pci_vector_use_one() Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 38/85] hw/cxl: Fix read from bogus memory Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 39/85] virtio-pci: implement No_Soft_Reset bit Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 40/85] vhost-user-test: no set non-blocking for cal fd less than 0 Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 41/85] i386/apic: Add hint on boot failure because of disabling x2APIC Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 42/85] hw/virtio: Free vqs after vhost_dev_cleanup() Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 43/85] virtio-iommu: add error check before assert Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 44/85] vhost-user: Skip unnecessary duplicated VHOST_USER_SET_LOG_BASE requests Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 45/85] hw/net/virtio-net.c: fix crash in iov_copy() Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 46/85] qapi: clarify that the default is backend dependent Michael S. Tsirkin
2024-07-03 22:47 ` [PULL v3 47/85] libvhost-user: set msg.msg_control to NULL when it is empty Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 48/85] libvhost-user: fail vu_message_write() if sendmsg() is failing Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 49/85] libvhost-user: mask F_INFLIGHT_SHMFD if memfd is not supported Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 50/85] vhost-user-server: do not set memory fd non-blocking Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 51/85] contrib/vhost-user-blk: fix bind() using the right size of the address Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 52/85] contrib/vhost-user-*: use QEMU bswap helper functions Michael S. Tsirkin
2024-07-12 14:24   ` Peter Maydell
2024-07-12 15:18     ` Stefano Garzarella
2024-07-12 15:23       ` Peter Maydell
2024-07-03 22:48 ` Michael S. Tsirkin [this message]
2024-07-03 22:48 ` [PULL v3 54/85] tests/qtest/vhost-user-blk-test: use memory-backend-shm Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 55/85] tests/qtest/vhost-user-test: add a test case for memory-backend-shm Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 56/85] hw/virtio: Fix the de-initialization of vhost-user devices Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 57/85] hw/arm/virt-acpi-build: Drop local iort_node_offset Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 58/85] hw/i386/fw_cfg: Add etc/e820 to fw_cfg late Michael S. Tsirkin
2024-07-04  8:09   ` David Woodhouse
2024-07-04  9:54     ` Alex Bennée
2024-07-03 22:48 ` [PULL v3 59/85] hw/arm/virt-acpi-build: Fix id_count in build_iort_id_mapping Michael S. Tsirkin
2024-07-03 22:48 ` [PULL v3 60/85] uefi-test-tools/UefiTestToolsPkg: Add RISC-V support Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 61/85] uefi-test-tools: Add support for python based build script Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 62/85] tests/data/uefi-boot-images: Add RISC-V ISO image Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 63/85] qtest: bios-tables-test: Rename aarch64 tests with aarch64 in them Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 64/85] tests/qtest/bios-tables-test.c: Add support for arch in path Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 65/85] tests/qtest/bios-tables-test.c: Set "arch" for aarch64 tests Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 66/85] tests/qtest/bios-tables-test.c: Set "arch" for x86 tests Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 67/85] tests/data/acpi: Move x86 ACPI tables under x86/${machine} path Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 68/85] tests/data/acpi/virt: Move ARM64 ACPI tables under aarch64/${machine} path Michael S. Tsirkin
2024-07-03 22:56   ` Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 70/85] pc-bios/meson.build: Add support for RISC-V in unpack_edk2_blobs Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 71/85] tests/data/acpi/rebuild-expected-aml.sh: Add RISC-V Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 72/85] hw/cxl/events: Improve QMP interfaces and documentation for add/release dynamic capacity Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 73/85] hw/cxl/events: Mark cxl-add-dynamic-capacity and cxl-release-dynamic-capcity unstable Michael S. Tsirkin
2024-07-03 22:49 ` [PULL v3 74/85] virtio: remove virtio_tswap16s() call in vring_packed_event_read() Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 75/85] virtio-iommu: Clear IOMMUDevice when VFIO device is unplugged Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 76/85] hw/pci: Rename has_power to enabled Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 77/85] hw/ppc/spapr_pci: Do not create DT for disabled PCI device Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 78/85] hw/ppc/spapr_pci: Do not reject VFs created after a PF Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 79/85] pcie_sriov: Do not manually unrealize Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 80/85] pcie_sriov: Ensure VF function number does not overflow Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 81/85] pcie_sriov: Reuse SR-IOV VF device instances Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 82/85] pcie_sriov: Release VFs failed to realize Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 83/85] pcie_sriov: Remove num_vfs from PCIESriovPF Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 84/85] pcie_sriov: Register VFs after migration Michael S. Tsirkin
2024-07-03 22:50 ` [PULL v3 85/85] hw/pci: Replace -1 with UINT32_MAX for romsize Michael S. Tsirkin
2024-07-03 22:56 ` [PULL v3 69/85] meson.build: Add RISC-V to the edk2-target list Michael S. Tsirkin
2024-07-04 16:13 ` [PULL v3 00/85] virtio: features,fixes Richard Henderson

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=4e647fa08586a5ada74cf6d3ae1cdf3a027202cb.1720046570.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).