Message ID | 20240322181116.1228416-22-pbonzini@redhat.com |
---|---|
State | New |
Headers | show |
Series | x86, kvm: common confidential computing subset | expand |
On 3/23/2024 2:11 AM, Paolo Bonzini wrote: > From: Xiaoyao Li <xiaoyao.li@intel.com> > > KVM side leaves the memory to shared by default, while may incur the /s/while/which/ fix typo from myself. > overhead of paging conversion on the first visit of each page. Because > the expectation is that page is likely to private for the VMs that > require private memory (has guest memfd). > > Explicitly set the memory to private when memory region has valid > guest memfd backend. > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> > Signed-off-by: Michael Roth <michael.roth@amd.com> > Message-ID: <20240320083945.991426-16-michael.roth@amd.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > accel/kvm/kvm-all.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c > index 7fbaf31cbaf..56b17cbd8aa 100644 > --- a/accel/kvm/kvm-all.c > +++ b/accel/kvm/kvm-all.c > @@ -1430,6 +1430,16 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml, > strerror(-err)); > abort(); > } > + > + if (memory_region_has_guest_memfd(mr)) { > + err = kvm_set_memory_attributes_private(start_addr, slot_size); > + if (err) { > + error_report("%s: failed to set memory attribute private: %s\n", > + __func__, strerror(-err)); > + exit(1); > + } > + } > + > start_addr += slot_size; > ram_start_offset += slot_size; > ram += slot_size;
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 7fbaf31cbaf..56b17cbd8aa 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -1430,6 +1430,16 @@ static void kvm_set_phys_mem(KVMMemoryListener *kml, strerror(-err)); abort(); } + + if (memory_region_has_guest_memfd(mr)) { + err = kvm_set_memory_attributes_private(start_addr, slot_size); + if (err) { + error_report("%s: failed to set memory attribute private: %s\n", + __func__, strerror(-err)); + exit(1); + } + } + start_addr += slot_size; ram_start_offset += slot_size; ram += slot_size;