From: Peter Zijlstra <peterz@infradead.org>
To: Naman Jain <namjain@linux.microsoft.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
"K . Y . Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Wei Liu <wei.liu@kernel.org>, Dexuan Cui <decui@microsoft.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H . Peter Anvin" <hpa@zytor.com>,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org,
x86@kernel.org, Michael Kelley <mhklinux@outlook.com>,
Mukesh Rathor <mrathor@linux.microsoft.com>,
Stanislav Kinsburskii <skinsburskii@linux.microsoft.com>,
Nuno Das Neves <nunodasneves@linux.microsoft.com>,
Christoph Hellwig <hch@infradead.org>,
Saurabh Sengar <ssengar@linux.microsoft.com>,
ALOK TIWARI <alok.a.tiwari@oracle.com>
Subject: Re: [PATCH v11 2/2] Drivers: hv: Introduce mshv_vtl driver
Date: Tue, 11 Nov 2025 09:13:52 +0100 [thread overview]
Message-ID: <20251111081352.GD278048@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <f32292e6-b152-4d6d-b678-fc46b8e3d1ac@linux.microsoft.com>
On Tue, Nov 11, 2025 at 12:25:54PM +0530, Naman Jain wrote:
> This would have been the cleanest approach. We discussed this before and
> unfortunately it didn't work. Please find the link to this discussion:
>
> https://lore.kernel.org/all/9f8007a3-f810-4b60-8942-e721cd6a32c4@linux.microsoft.com/
>
> To summarize above discussion, I see below compilation error with this from
> objtool. You may have CONFIG_X86_KERNEL_IBT enabled in your workspace, which
> would have masked this.
IBT isn't the problem, the thing is running objtool on vmlinux.o vs the
individual translation units. vmlinux.o will have that symbol, while
your .S file doesn't.
> AS arch/x86/hyperv/mshv_vtl_asm.o
> arch/x86/hyperv/mshv_vtl_asm.o: error: objtool: static_call: can't find
> static_call_key symbol: __SCK____mshv_vtl_return_hypercall
Right, and I said you had to do that ADDRESSABLE thing. So I added a
DECLARE_STATIC_CALL() and a static_call() in hv.c, compiled it so .s and
stole the bits.
And then you get something like the below. See symbol 5, that's the
entry we need.
# readelf -sW defconfig-build/arch/x86/hyperv/mshv_vtl_asm.o
Symbol table '.symtab' contains 8 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 8 OBJECT LOCAL DEFAULT 6 __UNIQUE_ID_addressable___SCK____mshv_vtl_return_hypercall_662.0
2: 0000000000000000 0 SECTION LOCAL DEFAULT 4 .noinstr.text
3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND __SCT____mshv_vtl_return_hypercall
4: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND __x86_return_thunk
5: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND __SCK____mshv_vtl_return_hypercall
6: 0000000000000010 179 FUNC GLOBAL DEFAULT 4 __mshv_vtl_return_call
7: 0000000000000000 16 FUNC GLOBAL DEFAULT 4 __pfx___mshv_vtl_return_call
---
--- a/arch/x86/hyperv/hv_vtl.c
+++ b/arch/x86/hyperv/hv_vtl.c
@@ -256,20 +256,6 @@ int __init hv_vtl_early_init(void)
DEFINE_STATIC_CALL_NULL(__mshv_vtl_return_hypercall, void (*)(void));
-noinstr void mshv_vtl_return_hypercall(void)
-{
- asm volatile ("call " STATIC_CALL_TRAMP_STR(__mshv_vtl_return_hypercall));
-}
-
-/*
- * ASM_CALL_CONSTRAINT is intentionally not used in above asm block before making a call to
- * __mshv_vtl_return_hypercall, to avoid rbp clobbering before actual VTL return happens.
- * This however leads to objtool complain about "call without frame pointer save/setup".
- * To ignore that warning, and inform objtool about this non-standard function,
- * STACK_FRAME_NON_STANDARD_FP is used.
- */
-STACK_FRAME_NON_STANDARD_FP(mshv_vtl_return_hypercall);
-
void mshv_vtl_return_call_init(u64 vtl_return_offset)
{
static_call_update(__mshv_vtl_return_hypercall,
--- a/arch/x86/hyperv/mshv_vtl_asm.S
+++ b/arch/x86/hyperv/mshv_vtl_asm.S
@@ -9,6 +9,7 @@
*/
#include <linux/linkage.h>
+#include <linux/static_call_types.h>
#include <asm/asm.h>
#include <asm/asm-offsets.h>
#include <asm/frame.h>
@@ -57,7 +58,7 @@ SYM_FUNC_START(__mshv_vtl_return_call)
xor %ecx, %ecx
/* make a hypercall to switch VTL */
- call mshv_vtl_return_hypercall
+ call STATIC_CALL_TRAMP_STR(__mshv_vtl_return_hypercall)
/* stash guest registers on stack, restore saved host copies */
pushq %rax
@@ -96,3 +97,10 @@ SYM_FUNC_START(__mshv_vtl_return_call)
pop %rbp
RET
SYM_FUNC_END(__mshv_vtl_return_call)
+
+ .section .discard.addressable,"aw"
+ .align 8
+ .type __UNIQUE_ID_addressable___SCK____mshv_vtl_return_hypercall_662.0, @object
+ .size __UNIQUE_ID_addressable___SCK____mshv_vtl_return_hypercall_662.0, 8
+__UNIQUE_ID_addressable___SCK____mshv_vtl_return_hypercall_662.0:
+ .quad __SCK____mshv_vtl_return_hypercall
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -11,6 +11,10 @@
#define __has_builtin(x) (0)
#endif
+/* Indirect macros required for expanded argument pasting, eg. __LINE__. */
+#define ___PASTE(a,b) a##b
+#define __PASTE(a,b) ___PASTE(a,b)
+
#ifndef __ASSEMBLY__
/*
@@ -79,10 +83,6 @@ static inline void __chk_io_ptr(const vo
# define __builtin_warning(x, y...) (1)
#endif /* __CHECKER__ */
-/* Indirect macros required for expanded argument pasting, eg. __LINE__. */
-#define ___PASTE(a,b) a##b
-#define __PASTE(a,b) ___PASTE(a,b)
-
#ifdef __KERNEL__
/* Attributes */
--- a/include/linux/static_call_types.h
+++ b/include/linux/static_call_types.h
@@ -25,6 +25,8 @@
#define STATIC_CALL_SITE_INIT 2UL /* init section */
#define STATIC_CALL_SITE_FLAGS 3UL
+#ifndef __ASSEMBLY__
+
/*
* The static call site table needs to be created by external tooling (objtool
* or a compiler plugin).
@@ -100,4 +102,6 @@ struct static_call_key {
#endif /* CONFIG_HAVE_STATIC_CALL */
+#endif /* __ASSEMBLY__ */
+
#endif /* _STATIC_CALL_TYPES_H */
next prev parent reply other threads:[~2025-11-11 8:14 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-10 5:08 [PATCH v11 0/2] Drivers: hv: Introduce new driver - mshv_vtl Naman Jain
2025-11-10 5:08 ` [PATCH v11 1/2] Drivers: hv: Export some symbols for mshv_vtl Naman Jain
2025-11-10 5:08 ` [PATCH v11 2/2] Drivers: hv: Introduce mshv_vtl driver Naman Jain
2025-11-10 14:38 ` Peter Zijlstra
2025-11-11 6:55 ` Naman Jain
2025-11-11 8:13 ` Peter Zijlstra [this message]
2025-11-11 10:58 ` Naman Jain
2025-11-11 10:59 ` Peter Zijlstra
2025-11-12 4:12 ` Michael Kelley
2025-11-12 8:54 ` Paolo Bonzini
2025-11-12 9:37 ` Peter Zijlstra
2025-11-12 9:44 ` Michael Kelley
2025-11-12 10:10 ` Peter Zijlstra
2025-11-12 10:49 ` Naman Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251111081352.GD278048@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=alok.a.tiwari@oracle.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=hch@infradead.org \
--cc=hpa@zytor.com \
--cc=kys@microsoft.com \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhklinux@outlook.com \
--cc=mingo@redhat.com \
--cc=mrathor@linux.microsoft.com \
--cc=namjain@linux.microsoft.com \
--cc=nunodasneves@linux.microsoft.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=skinsburskii@linux.microsoft.com \
--cc=ssengar@linux.microsoft.com \
--cc=tglx@linutronix.de \
--cc=wei.liu@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.