[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <b9c47a7d-80fc-49c7-9bda-3626f72a70a9@intel.com>
Date: Wed, 28 May 2025 11:49:46 +0800
From: Xiaoyao Li <xiaoyao.li@...el.com>
To: Rick Edgecombe <rick.p.edgecombe@...el.com>, pbonzini@...hat.com
Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org, lkp@...el.com,
kai.huang@...el.com, seanjc@...gle.com, x86@...nel.org, dave.hansen@...el.com
Subject: Re: [PATCH] x86/tdx: Always inline tdx_tdvpr_pa()
On 5/28/2025 6:04 AM, Rick Edgecombe wrote:
> In some cases tdx_tdvpr_pa() is not fully inlined into tdh_vp_enter(),
> which causes the following warning:
>
> vmlinux.o: warning: objtool: tdh_vp_enter+0x8: call to tdx_tdvpr_pa() leaves .noinstr.text section
>
> tdh_vp_enter() is marked noinstr and so can't accommodate the function
> being outlined. Previously this didn't cause issues because the compiler
> inlined the function. However, newer Clang compilers are deciding to
> outline it.
>
> So mark the function __always_inline to force it to be inlined. This
> would leave the similar function tdx_tdr_pa() looking a bit asymmetric
> and odd, as it is marked inline but actually doesn't need to be inlined.
> So somewhat opportunistically remove the inline from tdx_tdr_pa() so that
> it is clear that it does not need to be inlined, unlike tdx_tdvpr_pa().
>
> tdx_tdvpr_pa() uses page_to_phys() which can make further calls to
> outlines functions, but not on x86 following commit cba5d9b3e99d
> ("x86/mm/64: Make SPARSEMEM_VMEMMAP the only memory model").
>
> Fixes: 69e23faf82b4 ("x86/virt/tdx: Add SEAMCALL wrapper to enter/exit TDX guest")
> Reported-by: kernel test robot <lkp@...el.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202505240530.5KktQ5mX-lkp@intel.com/
> Suggested-by: Sean Christopherson <seanjc@...gle.com>
> Signed-off-by: Rick Edgecombe <rick.p.edgecombe@...el.com>
> Reviewed-by: Kai Huang <kai.huang@...el.com>
Reviewed-by: Xiaoyao Li <Xiaoyao.li@...el.com>
> ---
> Previous discussion here:
> https://lore.kernel.org/kvm/20250526204523.562665-1-pbonzini@redhat.com/
>
> FWIW, I'm ok with the flatten version of the fix too, but posting this
> just to speed things along in case.
>
> And note, for full correctness, this and the flatten fix will depend on
> the queued tip commit:
> https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=cba5d9b3e99d6268d7909a65c2bd78f4d195aead
>
> ---
> arch/x86/virt/vmx/tdx/tdx.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c
> index f5e2a937c1e7..626cc2f37dec 100644
> --- a/arch/x86/virt/vmx/tdx/tdx.c
> +++ b/arch/x86/virt/vmx/tdx/tdx.c
> @@ -1496,12 +1496,12 @@ void tdx_guest_keyid_free(unsigned int keyid)
> }
> EXPORT_SYMBOL_GPL(tdx_guest_keyid_free);
>
> -static inline u64 tdx_tdr_pa(struct tdx_td *td)
> +static u64 tdx_tdr_pa(struct tdx_td *td)
> {
> return page_to_phys(td->tdr_page);
> }
>
> -static inline u64 tdx_tdvpr_pa(struct tdx_vp *td)
> +static __always_inline u64 tdx_tdvpr_pa(struct tdx_vp *td)
> {
> return page_to_phys(td->tdvpr_page);
> }
Powered by blists - more mailing lists