Messages in this thread | | | Subject | Re: [PATCH v2 1/9] KVM: x86: Add AMD SEV specific Hypercall3 | From | Paolo Bonzini <> | Date | Sun, 6 Dec 2020 11:26:12 +0100 |
| |
On 03/12/20 01:34, Sean Christopherson wrote: > On Tue, Dec 01, 2020, Ashish Kalra wrote: >> From: Brijesh Singh <brijesh.singh@amd.com> >> >> KVM hypercall framework relies on alternative framework to patch the >> VMCALL -> VMMCALL on AMD platform. If a hypercall is made before >> apply_alternative() is called then it defaults to VMCALL. The approach >> works fine on non SEV guest. A VMCALL would causes #UD, and hypervisor >> will be able to decode the instruction and do the right things. But >> when SEV is active, guest memory is encrypted with guest key and >> hypervisor will not be able to decode the instruction bytes. >> >> Add SEV specific hypercall3, it unconditionally uses VMMCALL. The hypercall >> will be used by the SEV guest to notify encrypted pages to the hypervisor. > > What if we invert KVM_HYPERCALL and X86_FEATURE_VMMCALL to default to VMMCALL > and opt into VMCALL? It's a synthetic feature flag either way, and I don't > think there are any existing KVM hypercalls that happen before alternatives are > patched, i.e. it'll be a nop for sane kernel builds. > > I'm also skeptical that a KVM specific hypercall is the right approach for the > encryption behavior, but I'll take that up in the patches later in the series.
Do you think that it's the guest that should "donate" memory for the bitmap instead?
Paolo
> >> Cc: Thomas Gleixner <tglx@linutronix.de> >> Cc: Ingo Molnar <mingo@redhat.com> >> Cc: "H. Peter Anvin" <hpa@zytor.com> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> Cc: "Radim Krčmář" <rkrcmar@redhat.com> >> Cc: Joerg Roedel <joro@8bytes.org> >> Cc: Borislav Petkov <bp@suse.de> >> Cc: Tom Lendacky <thomas.lendacky@amd.com> >> Cc: x86@kernel.org >> Cc: kvm@vger.kernel.org >> Cc: linux-kernel@vger.kernel.org >> Reviewed-by: Steve Rutherford <srutherford@google.com> >> Reviewed-by: Venu Busireddy <venu.busireddy@oracle.com> >> Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> >> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> >> --- >> arch/x86/include/asm/kvm_para.h | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h >> index 338119852512..bc1b11d057fc 100644 >> --- a/arch/x86/include/asm/kvm_para.h >> +++ b/arch/x86/include/asm/kvm_para.h >> @@ -85,6 +85,18 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, >> return ret; >> } >> >> +static inline long kvm_sev_hypercall3(unsigned int nr, unsigned long p1, >> + unsigned long p2, unsigned long p3) >> +{ >> + long ret; >> + >> + asm volatile("vmmcall" >> + : "=a"(ret) >> + : "a"(nr), "b"(p1), "c"(p2), "d"(p3) >> + : "memory"); >> + return ret; >> +} >> + >> #ifdef CONFIG_KVM_GUEST >> bool kvm_para_available(void); >> unsigned int kvm_arch_para_features(void); >> -- >> 2.17.1 >> >
| |