mirror of
https://github.com/torvalds/linux.git
synced 2026-09-25 09:41:03 +02:00
KVM: selftests: Drop HORRIFIC_L2_UCALL_CLOBBER_HACK
Now that nVMX test codes preserves GPRs across nested VM-Exits (specifically RBP, RDX, and RDI among others), drop the ucall-specific hack to avoid clobbering these registers. Assisted-by: Gemini:gemini-3.1-pro Signed-off-by: Yosry Ahmed <yosry@kernel.org> Link: https://patch.msgid.link/20260728174232.2423257-7-yosry@kernel.org Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
3d31fea7b6
commit
2bdef77c60
|
|
@ -10,36 +10,8 @@
|
|||
|
||||
void ucall_arch_do_ucall(gva_t uc)
|
||||
{
|
||||
/*
|
||||
* FIXME: Revert this hack (the entire commit that added it) once nVMX
|
||||
* preserves L2 GPRs across a nested VM-Exit. If a ucall from L2, e.g.
|
||||
* to do a GUEST_SYNC(), lands the vCPU in L1, any and all GPRs can be
|
||||
* clobbered by L1. Save and restore non-volatile GPRs (clobbering RBP
|
||||
* in particular is problematic) along with RDX and RDI (which are
|
||||
* inputs), and clobber volatile GPRs. *sigh*
|
||||
*/
|
||||
#define HORRIFIC_L2_UCALL_CLOBBER_HACK \
|
||||
"rcx", "rsi", "r8", "r9", "r10", "r11"
|
||||
|
||||
asm volatile("push %%rbp\n\t"
|
||||
"push %%r15\n\t"
|
||||
"push %%r14\n\t"
|
||||
"push %%r13\n\t"
|
||||
"push %%r12\n\t"
|
||||
"push %%rbx\n\t"
|
||||
"push %%rdx\n\t"
|
||||
"push %%rdi\n\t"
|
||||
"in %[port], %%al\n\t"
|
||||
"pop %%rdi\n\t"
|
||||
"pop %%rdx\n\t"
|
||||
"pop %%rbx\n\t"
|
||||
"pop %%r12\n\t"
|
||||
"pop %%r13\n\t"
|
||||
"pop %%r14\n\t"
|
||||
"pop %%r15\n\t"
|
||||
"pop %%rbp\n\t"
|
||||
: : [port] "d" (UCALL_PIO_PORT), "D" (uc) : "rax", "memory",
|
||||
HORRIFIC_L2_UCALL_CLOBBER_HACK);
|
||||
asm volatile("in %[port], %%al"
|
||||
: : [port] "d" (UCALL_PIO_PORT), "D" (uc) : "rax", "memory");
|
||||
}
|
||||
|
||||
void *ucall_arch_get_ucall(struct kvm_vcpu *vcpu)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user