RE: [PATCH V3 5/9] x86/hyperv: Use vmmcall to implement Hyper-V hypercall in sev-snp enlightened guest

From: Michael Kelley (LINUX)
Date: Wed Jul 26 2023 - 10:29:24 EST


From: Tianyu Lan <ltykernel@xxxxxxxxx> Sent: Wednesday, July 26, 2023 6:47 AM
>
> On 7/26/2023 11:44 AM, Michael Kelley (LINUX) wrote:
> >> diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
> >> index 2fa38e9f6207..025eda129d99 100644
> >> --- a/arch/x86/include/asm/mshyperv.h
> >> +++ b/arch/x86/include/asm/mshyperv.h
> >> @@ -64,12 +64,12 @@ static inline u64 hv_do_hypercall(u64 control, void *input,
> void *output)
> >> if (!hv_hypercall_pg)
> >> return U64_MAX;
> >>
> >> - __asm__ __volatile__("mov %4, %%r8\n"
> >> - CALL_NOSPEC
> >> + __asm__ __volatile__("mov %[output], %%r8\n"
> >> + ALTERNATIVE("vmmcall", CALL_NOSPEC, X86_FEATURE_SEV_ES)
> > Since this code is for SEV-SNP, what's the thinking behind using
> > X86_FEATURE_SEV_ES in the ALTERNATIVE statements? Don't you need
> > to use X86_FEATURE_SEV_SNP (which is being added in another patch set that
> > Boris Petkov pointed out).
>
> Hi Michael:
> Thanks for your review. The patch mentioned by Boris has not been
> merged and so still use X86_FEATURE_SEV_ES here. We may replace the
> feature flag with X86_FEATURE_SEV_SNP after it's upstreamed.
>

Just so I'm clear, is it true that in an SEV-SNP VM, the CPUID flags for
SEV-ES *and* SEV-SNP are set? That would seem to be necessary for
your approach to work.

I wonder if it would be better to take the patch from Brijesh Singh
that adds X86_FEATURE_SEV_SNP and add it to your patch set (with
Brijesh's agreement, of course). That patch is small and straightforward.

> >
> > Also, does this patch depend on Peter Zijlstra's patch to support nested
> > ALTERNATIVE statements? If so, that needs to be called out, probably in
> > the cover letter. Peter's patch doesn't yet appear in linux-next.
> >
>
> It may work without Peterz's patch. Please see
> https://lkml.org/lkml/2023/6/27/520
> Peterz's patch optimizes ALTERNATIVE_n implementation with nested
> expression.

OK, good.

Michael