86 lines
3.1 KiB
Diff
86 lines
3.1 KiB
Diff
|
From 331c58d87dde8b4757e1d1e09d9b16bac2952d22 Mon Sep 17 00:00:00 2001
|
||
|
From: Xiaoyao Li <xiaoyao.li@intel.com>
|
||
|
Date: Thu, 30 May 2024 06:16:15 -0500
|
||
|
Subject: [PATCH 081/100] memory: Introduce
|
||
|
memory_region_init_ram_guest_memfd()
|
||
|
|
||
|
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
RH-MergeRequest: 245: SEV-SNP support
|
||
|
RH-Jira: RHEL-39544
|
||
|
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
||
|
RH-Acked-by: Bandan Das <bdas@redhat.com>
|
||
|
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
||
|
RH-Commit: [81/91] d5b0898d791f3f90d1acda0230f96ca9bf5be5e4 (bonzini/rhel-qemu-kvm)
|
||
|
|
||
|
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>
|
||
|
Signed-off-by: Michael Roth <michael.roth@amd.com>
|
||
|
Signed-off-by: Pankaj Gupta <pankaj.gupta@amd.com>
|
||
|
Message-ID: <20240530111643.1091816-4-pankaj.gupta@amd.com>
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
(cherry picked from commit a0aa6db7ce72a08703774107185e639e73e7754c)
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
---
|
||
|
include/exec/memory.h | 6 ++++++
|
||
|
system/memory.c | 24 ++++++++++++++++++++++++
|
||
|
2 files changed, 30 insertions(+)
|
||
|
|
||
|
diff --git a/include/exec/memory.h b/include/exec/memory.h
|
||
|
index 679a847685..1e351f6fc8 100644
|
||
|
--- a/include/exec/memory.h
|
||
|
+++ b/include/exec/memory.h
|
||
|
@@ -1603,6 +1603,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 c756950c0c..b09065eef3 100644
|
||
|
--- a/system/memory.c
|
||
|
+++ b/system/memory.c
|
||
|
@@ -3606,6 +3606,30 @@ 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;
|
||
|
+ }
|
||
|
+ /* 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,
|
||
|
--
|
||
|
2.39.3
|
||
|
|