All of lore.kernel.org
 help / color / mirror / Atom feed
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 */

  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.