Message ID | 20240125032328.2522472-46-xiaoyao.li@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | QEMU Guest memfd + QEMU TDX support | expand |
On 25.01.24 04:23, Xiaoyao Li wrote: > Introduce memory_region_init_ram_guest_memfd() to allocate private > guset memfd on the MemoryRegion initialization. It's for the use case of > TDVF, which must be private on TDX case. > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> > --- > include/exec/memory.h | 6 ++++++ > system/memory.c | 27 +++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/include/exec/memory.h b/include/exec/memory.h > index f25959f6d30f..3a7f41b030e8 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -1607,6 +1607,12 @@ bool memory_region_init_ram(MemoryRegion *mr, > uint64_t size, > Error **errp); > > +bool memory_region_init_ram_guest_memfd(MemoryRegion *mr, > + Object *owner, > + const char *name, > + uint64_t size, > + Error **errp); > + > /** > * memory_region_init_rom: Initialize a ROM memory region. > * > diff --git a/system/memory.c b/system/memory.c > index 74f647f2e56f..41049d3e4c9a 100644 > --- a/system/memory.c > +++ b/system/memory.c > @@ -3619,6 +3619,33 @@ bool memory_region_init_ram(MemoryRegion *mr, > return true; > } > > +bool memory_region_init_ram_guest_memfd(MemoryRegion *mr, > + Object *owner, > + const char *name, > + uint64_t size, > + Error **errp) > +{ > + DeviceState *owner_dev; > + > + if (!memory_region_init_ram_flags_nomigrate(mr, owner, name, size, > + RAM_GUEST_MEMFD, errp)) { > + return false; > + } > + > + memory_region_set_default_private(mr); It would be much cleaner to just pass the flag when initializing the memory region. Ideally, we can get rid of memory_region_set_default_private(). What you do in patch #33 feels like a layer violation.
diff --git a/include/exec/memory.h b/include/exec/memory.h index f25959f6d30f..3a7f41b030e8 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -1607,6 +1607,12 @@ bool memory_region_init_ram(MemoryRegion *mr, uint64_t size, Error **errp); +bool memory_region_init_ram_guest_memfd(MemoryRegion *mr, + Object *owner, + const char *name, + uint64_t size, + Error **errp); + /** * memory_region_init_rom: Initialize a ROM memory region. * diff --git a/system/memory.c b/system/memory.c index 74f647f2e56f..41049d3e4c9a 100644 --- a/system/memory.c +++ b/system/memory.c @@ -3619,6 +3619,33 @@ bool memory_region_init_ram(MemoryRegion *mr, return true; } +bool memory_region_init_ram_guest_memfd(MemoryRegion *mr, + Object *owner, + const char *name, + uint64_t size, + Error **errp) +{ + DeviceState *owner_dev; + + if (!memory_region_init_ram_flags_nomigrate(mr, owner, name, size, + RAM_GUEST_MEMFD, errp)) { + return false; + } + + memory_region_set_default_private(mr); + + /* This will assert if owner is neither NULL nor a DeviceState. + * We only want the owner here for the purposes of defining a + * unique name for migration. TODO: Ideally we should implement + * a naming scheme for Objects which are not DeviceStates, in + * which case we can relax this restriction. + */ + owner_dev = DEVICE(owner); + vmstate_register_ram(mr, owner_dev); + + return true; +} + bool memory_region_init_rom(MemoryRegion *mr, Object *owner, const char *name,
Introduce memory_region_init_ram_guest_memfd() to allocate private guset memfd on the MemoryRegion initialization. It's for the use case of TDVF, which must be private on TDX case. Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> --- include/exec/memory.h | 6 ++++++ system/memory.c | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+)