machine: aux-ram-share option

Allocate auxilliary guest RAM as an anonymous file that is shareable
with an external process.  This option applies to memory allocated as
a side effect of creating various devices. It does not apply to
memory-backend-objects, whether explicitly specified on the command
line, or implicitly created by the -m command line option.

This option is intended to support new migration modes, in which the
memory region can be transferred in place to a new QEMU process, by sending
the memfd file descriptor to the process.  Memory contents are preserved,
and if the mode also transfers device descriptors, then pages that are
locked in memory for DMA remain locked.  This behavior is a pre-requisite
for supporting vfio, vdpa, and iommufd devices with the new modes.

Signed-off-by: Steve Sistare <steven.sistare@oracle.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Link: https://lore.kernel.org/r/1736967650-129648-7-git-send-email-steven.sistare@oracle.com
Signed-off-by: Fabiano Rosas <farosas@suse.de>
This commit is contained in:
Steve Sistare 2025-01-15 11:00:32 -08:00 committed by Fabiano Rosas
parent 6169f11936
commit 91792807d1
4 changed files with 37 additions and 0 deletions

View file

@ -457,6 +457,22 @@ static void machine_set_mem_merge(Object *obj, bool value, Error **errp)
ms->mem_merge = value;
}
#ifdef CONFIG_POSIX
static bool machine_get_aux_ram_share(Object *obj, Error **errp)
{
MachineState *ms = MACHINE(obj);
return ms->aux_ram_share;
}
static void machine_set_aux_ram_share(Object *obj, bool value, Error **errp)
{
MachineState *ms = MACHINE(obj);
ms->aux_ram_share = value;
}
#endif
static bool machine_get_usb(Object *obj, Error **errp)
{
MachineState *ms = MACHINE(obj);
@ -1162,6 +1178,12 @@ static void machine_class_init(ObjectClass *oc, void *data)
object_class_property_set_description(oc, "mem-merge",
"Enable/disable memory merge support");
#ifdef CONFIG_POSIX
object_class_property_add_bool(oc, "aux-ram-share",
machine_get_aux_ram_share,
machine_set_aux_ram_share);
#endif
object_class_property_add_bool(oc, "usb",
machine_get_usb, machine_set_usb);
object_class_property_set_description(oc, "usb",