@@ -16,6 +16,7 @@
#include "qom/object_interfaces.h"
#include "qapi/error.h"
#include "sysemu/hostmem.h"
+#include "hw/i386/pc.h"
#define TYPE_MEMORY_BACKEND_EPC "memory-backend-epc"
@@ -53,6 +54,21 @@ sgx_epc_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
g_free(name);
}
+void sgx_memory_backend_reset(HostMemoryBackend *backend, int fd,
+ Error **errp)
+{
+ MemoryRegion *mr = &backend->mr;
+
+ mr->enabled = false;
+
+ /* destroy the old memory region if it exist */
+ if (fd > 0 && mr->destructor) {
+ mr->destructor(mr);
+ }
+
+ sgx_epc_backend_memory_alloc(backend, errp);
+}
+
static void sgx_epc_backend_instance_init(Object *obj)
{
HostMemoryBackend *m = MEMORY_BACKEND(obj);
@@ -202,6 +202,8 @@ void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid,
/* sgx-epc.c */
void pc_machine_init_sgx_epc(PCMachineState *pcms);
+void sgx_memory_backend_reset(HostMemoryBackend *backend, int fd,
+ Error **errp);
extern GlobalProperty pc_compat_5_2[];
extern const size_t pc_compat_5_2_len;
Add the sgx_memory_backend_reset() interface to handle EPC backend reset when VM is reset. This reset function will destroy previous backend memory region and re-mmap the EPC section for guest. Signed-off-by: Yang Zhong <yang.zhong@intel.com> --- backends/hostmem-epc.c | 16 ++++++++++++++++ include/hw/i386/pc.h | 2 ++ 2 files changed, 18 insertions(+)