Register a memory listener for KVM_X86_SW_PROVTED_VM. It set RAM to private by default. Signed-off-by: Xiaoyao Li <xiaoyao.li@xxxxxxxxx> --- include/exec/memory.h | 1 + target/i386/kvm/sw-protected-vm.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index 2c738b5dc420..a2602b783a38 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -820,6 +820,7 @@ struct IOMMUMemoryRegion { #define MEMORY_LISTENER_PRIORITY_MIN 0 #define MEMORY_LISTENER_PRIORITY_ACCEL 10 #define MEMORY_LISTENER_PRIORITY_DEV_BACKEND 10 +#define MEMORY_LISTENER_PRIORITY_ACCEL_HIGH 20 /** * struct MemoryListener: callbacks structure for updates to the physical memory map diff --git a/target/i386/kvm/sw-protected-vm.c b/target/i386/kvm/sw-protected-vm.c index 3cfcc89202a6..f47ac383e1dd 100644 --- a/target/i386/kvm/sw-protected-vm.c +++ b/target/i386/kvm/sw-protected-vm.c @@ -12,14 +12,32 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qom/object_interfaces.h" +#include "exec/address-spaces.h" +#include "sysemu/kvm.h" #include "hw/i386/x86.h" #include "sw-protected-vm.h" +static void kvm_x86_sw_protected_vm_region_add(MemoryListener *listenr, + MemoryRegionSection *section) +{ + memory_region_set_default_private(section->mr); +} + +static MemoryListener kvm_x86_sw_protected_vm_memory_listener = { + .name = "kvm_x86_sw_protected_vm_memory_listener", + .region_add = kvm_x86_sw_protected_vm_region_add, + /* Higher than KVM memory listener = 10. */ + .priority = MEMORY_LISTENER_PRIORITY_ACCEL_HIGH, +}; + int sw_protected_vm_kvm_init(MachineState *ms, Error **errp) { SwProtectedVm *spvm = SW_PROTECTED_VM(OBJECT(ms->cgs)); + memory_listener_register(&kvm_x86_sw_protected_vm_memory_listener, + &address_space_memory); + spvm->parent_obj.ready = true; return 0; } -- 2.34.1