]> git.ipfire.org Git - thirdparty/linux.git/commit
x86/hyperv: Clean up hv_do_hypercall()
authorPeter Zijlstra <peterz@infradead.org>
Sat, 12 Apr 2025 11:55:49 +0000 (13:55 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 18 Aug 2025 12:23:07 +0000 (14:23 +0200)
commit0e20f1f4c2cb77130cfe903a058a08883645dc4b
treec6214bdf7c286398ac73d05878129099edbdffe7
parenta1d34a444ce8c9a6ec4376247f80f0b777c6d3fe
x86/hyperv: Clean up hv_do_hypercall()

What used to be a simple few instructions has turned into a giant mess
(for x86_64). Not only does it use static_branch wrong, it mixes it
with dynamic branches for no apparent reason.

Notably it uses static_branch through an out-of-line function call,
which completely defeats the purpose, since instead of a simple
JMP/NOP site, you get a CALL+RET+TEST+Jcc sequence in return, which is
absolutely idiotic.

Add to that a dynamic test of hyperv_paravisor_present, something
which is set once and never changed.

Replace all this idiocy with a single direct function call to the
right hypercall variant.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Tested-by: Michael Kelley <mhklinux@outlook.com>
Acked-by: Sean Christopherson <seanjc@google.com>
Link: https://lkml.kernel.org/r/20250714103440.897136093@infradead.org
arch/x86/hyperv/hv_init.c
arch/x86/hyperv/ivm.c
arch/x86/include/asm/mshyperv.h
arch/x86/kernel/cpu/mshyperv.c