> From: Tianyu Lan <ltykernel@xxxxxxxxx> > Sent: Thursday, August 10, 2023 9:04 AM > [...] > @@ -103,7 +103,8 @@ static inline u64 _hv_do_fast_hypercall8(u64 control, > u64 input1) > > #ifdef CONFIG_X86_64 > { > - __asm__ __volatile__(CALL_NOSPEC > + __asm__ __volatile__("mov %[thunk_target], %%r8\n" The "mov %[thunk_target], %%r8\n" is dubious. I removed it and the kernel still worked fine for my regular VM (on an AMD host) and for my SNP VM (with HCL). I suspect a fully enlightened SNP VM also doesn't need it as this hypercall doesn't really need an output param. I noticed your [PATCH V5 8/8] x86/hyperv: Add hyperv-specific handling for VMMCALL under SEV-ES exposes r8 to the hypervisor: +static void hv_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) +{ + /* RAX and CPL are already in the GHCB */ + ghcb_set_rcx(ghcb, regs->cx); + ghcb_set_rdx(ghcb, regs->dx); + ghcb_set_r8(ghcb, regs->r8); +} I guess the intent here is that we want to pass a deterministic value in R8 (rather a random value) to the hypervisor for security's purpose. If so, can we just set R8 to 0 rather than %[thunk_target]? Please add a comment. Sorry, I was not in the earlier discussion, so I may be missing something. > + ALTERNATIVE(CALL_NOSPEC, "vmmcall", > X86_FEATURE_SEV_ES) > : "=a" (hv_status), > ASM_CALL_CONSTRAINT, > "+c" (control), "+d" (input1) > : THUNK_TARGET(hv_hypercall_pg)