Update the SEV-SNP launch update flow to utilize guest_memfd in-place
conversion.

Include the KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE flag when setting memory
attributes to private. This is permitted before the SNP VM is finalized.

In snp_launch_update_data, pass 0 as the host virtual address. This
instructs the kernel to perform the launch update using the guest_memfd
backing the guest physical address rather than a userspace-provided
buffer.

Signed-off-by: Ackerley Tng <[email protected]>
---
 tools/testing/selftests/kvm/lib/x86/sev.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/kvm/lib/x86/sev.c 
b/tools/testing/selftests/kvm/lib/x86/sev.c
index d0205b3299e0b..72b2935871fe4 100644
--- a/tools/testing/selftests/kvm/lib/x86/sev.c
+++ b/tools/testing/selftests/kvm/lib/x86/sev.c
@@ -32,13 +32,14 @@ static void encrypt_region(struct kvm_vm *vm, struct 
userspace_mem_region *regio
                const u64 size = (j - i + 1) * vm->page_size;
                const u64 offset = (i - lowest_page_in_region) * vm->page_size;
 
-               if (private)
-                       vm_mem_set_private(vm, gpa_base + offset, size, 0);
+               if (private) {
+                       vm_mem_set_private(vm, gpa_base + offset, size,
+                                          KVM_SET_MEMORY_ATTRIBUTES2_PRESERVE);
+               }
 
                if (is_sev_snp_vm(vm))
                        snp_launch_update_data(vm, gpa_base + offset,
-                                              (u64)addr_gpa2hva(vm, gpa_base + 
offset),
-                                              size, page_type);
+                                              0, size, page_type);
                else
                        sev_launch_update_data(vm, gpa_base + offset, size);
 
-- 
2.54.0.545.g6539524ca2-goog


Reply via email to