On Mon, 2025-05-26 at 23:10 +0000, Huang, Kai wrote: > On Mon, 2025-05-26 at 16:45 -0400, Paolo Bonzini 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 > > > > This happens if the compiler considers tdx_tdvpr_pa() to be "large", for example > > because CONFIG_SPARSEMEM adds two function calls to page_to_section() and > > __section_mem_map_addr(): > > > > ({ const struct page *__pg = (pg); \ > > int __sec = page_to_section(__pg); \ > > (unsigned long)(__pg - __section_mem_map_addr(__nr_to_section(__sec))); > > \ > > }) > > Just FYI the above warning can also be triggered when CONFIG_SPARSEMEM_VMEMMAP=y > (and CONFIG_SPARSEMEM=y as well), in which case the __page_to_pfn() is simply: > > #define __page_to_pfn(page) (unsigned long)((page) - vmemmap) > > The function call to page_to_section() and __section_mem_map_addr() only happens > when CONFIG_SPARSEMEM_VMEMMAP=n while CONFIG_SPARSEMEM=y. > [...] > > I did some test and can confirm this patch can silence the warning mentioned in > the changelog. > > However, with this patch applied, I also tested the case that > CONFIG_SPARSEMEM_VMEMMAP=n and CONFIG_SPARSEMEM=y [1], but I still got: > > vmlinux.o: warning: objtool: tdh_vp_enter+0x10: call to page_to_section() leaves > .noinstr.text section > > Not sure why, but it seems __flatten failed to work as expected, as least > recursively. > I found a recently merged patch from Kirill has made CONFIG_SPARSEMEM_VMEMAP always true on x86_64: https://lore.kernel.org/lkml/174748683804.406.11521945321481191771.tip-bot2@tip-bot2/ So we don't need to worry about the case that CONFIG_SPARSEMEM_VMEMMAP=n and CONFIG_SPARSEMEM=y. The changelog could be simplified/updated though I think (since seems there's no need to mention the "large" case now). So: Tested-by: Kai Huang <kai.huang@xxxxxxxxx> Acked-by: Kai Huang <kai.huang@xxxxxxxxx>