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
