Re: [PATCH] powerpc: fix function annotations to avoid section mismatch warnings with gcc-10
Hello, Michael, - Original Message - > From: "Michael Ellerman" > Subject: Re: [PATCH] powerpc: fix function annotations to avoid section > mismatch warnings with gcc-10 > ... > >> > So what changed? These functions were inlined with older compilers, but > >> > not anymore? > >> > >> Yes, exactly. Gcc-10 does not inline them anymore. If this is because of > >> my > >> build system, this can happen to others also. > >> > >> The same thing was fixed by Linus in e99332e7b4cd ("gcc-10: mark more > >> functions > >> __init to avoid section mismatch warnings"). > > > > It sounds like this is part of "-finline-functions was retuned" on > > <https://gcc.gnu.org/gcc-10/changes.html>? So everyone should see it > > (no matter what config or build system), and it is a good thing too :-) > > I haven't seen it in my GCC 10 builds, so there must be some other > subtlety. Probably it depends on details of the .config. > I've just had this building the latest upstream for the ppc64le with a derivative of the RHEL-8 config. This can probably be a compiler/linker setting, like -O2 versus -O3. > cheers Best regards, Vladis Dronov | Red Hat, Inc. | The Core Kernel | Senior Software Engineer
Re: [PATCH] powerpc: fix function annotations to avoid section mismatch warnings with gcc-10
Hello, - Original Message - > From: "Segher Boessenkool" > To: "Vladis Dronov" > Cc: linuxppc-dev@lists.ozlabs.org, "Aneesh Kumar K . V" > , linux-ker...@vger.kernel.org, > "Paul Mackerras" > Sent: Wednesday, July 29, 2020 4:49:49 PM > Subject: Re: [PATCH] powerpc: fix function annotations to avoid section > mismatch warnings with gcc-10 > > On Wed, Jul 29, 2020 at 03:37:41PM +0200, Vladis Dronov wrote: > > Certain warnings are emitted for powerpc code when building with a gcc-10 > > toolset: > > > > WARNING: modpost: vmlinux.o(.text.unlikely+0x377c): Section mismatch in > > reference from the function remove_pmd_table() to the function > > .meminit.text:split_kernel_mapping() > > The function remove_pmd_table() references > > the function __meminit split_kernel_mapping(). > > This is often because remove_pmd_table lacks a __meminit > > annotation or the annotation of split_kernel_mapping is wrong. > > > > Add the appropriate __init and __meminit annotations to make modpost not > > complain. In all the cases there are just a single callsite from another > > __init or __meminit function: > > > > __meminit remove_pagetable() -> remove_pud_table() -> remove_pmd_table() > > __init prom_init() -> setup_secure_guest() > > __init xive_spapr_init() -> xive_spapr_disabled() > > So what changed? These functions were inlined with older compilers, but > not anymore? Yes, exactly. Gcc-10 does not inline them anymore. If this is because of my build system, this can happen to others also. The same thing was fixed by Linus in e99332e7b4cd ("gcc-10: mark more functions __init to avoid section mismatch warnings"). > > Segher Best regards, Vladis Dronov | Red Hat, Inc. | The Core Kernel | Senior Software Engineer
[PATCH] powerpc: fix function annotations to avoid section mismatch warnings with gcc-10
Certain warnings are emitted for powerpc code when building with a gcc-10 toolset: WARNING: modpost: vmlinux.o(.text.unlikely+0x377c): Section mismatch in reference from the function remove_pmd_table() to the function .meminit.text:split_kernel_mapping() The function remove_pmd_table() references the function __meminit split_kernel_mapping(). This is often because remove_pmd_table lacks a __meminit annotation or the annotation of split_kernel_mapping is wrong. Add the appropriate __init and __meminit annotations to make modpost not complain. In all the cases there are just a single callsite from another __init or __meminit function: __meminit remove_pagetable() -> remove_pud_table() -> remove_pmd_table() __init prom_init() -> setup_secure_guest() __init xive_spapr_init() -> xive_spapr_disabled() Signed-off-by: Vladis Dronov --- arch/powerpc/kernel/prom_init.c | 4 ++-- arch/powerpc/mm/book3s64/radix_pgtable.c | 4 ++-- arch/powerpc/sysdev/xive/spapr.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 90c604d00b7d..f6ca7f450361 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c @@ -3262,7 +3262,7 @@ static int enter_secure_mode(unsigned long kbase, unsigned long fdt) /* * Call the Ultravisor to transfer us to secure memory if we have an ESM blob. */ -static void setup_secure_guest(unsigned long kbase, unsigned long fdt) +static void __init setup_secure_guest(unsigned long kbase, unsigned long fdt) { int ret; @@ -3292,7 +3292,7 @@ static void setup_secure_guest(unsigned long kbase, unsigned long fdt) } } #else -static void setup_secure_guest(unsigned long kbase, unsigned long fdt) +static void __init setup_secure_guest(unsigned long kbase, unsigned long fdt) { } #endif /* CONFIG_PPC_SVM */ diff --git a/arch/powerpc/mm/book3s64/radix_pgtable.c b/arch/powerpc/mm/book3s64/radix_pgtable.c index bb00e0cba119..b868c07110e3 100644 --- a/arch/powerpc/mm/book3s64/radix_pgtable.c +++ b/arch/powerpc/mm/book3s64/radix_pgtable.c @@ -800,7 +800,7 @@ static void __meminit split_kernel_mapping(unsigned long addr, unsigned long end pte_clear(_mm, addr, pte); } -static void remove_pmd_table(pmd_t *pmd_start, unsigned long addr, +static void __meminit remove_pmd_table(pmd_t *pmd_start, unsigned long addr, unsigned long end) { unsigned long next; @@ -825,7 +825,7 @@ static void remove_pmd_table(pmd_t *pmd_start, unsigned long addr, } } -static void remove_pud_table(pud_t *pud_start, unsigned long addr, +static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr, unsigned long end) { unsigned long next; diff --git a/arch/powerpc/sysdev/xive/spapr.c b/arch/powerpc/sysdev/xive/spapr.c index f0551a2be9df..1e3674d7ea7b 100644 --- a/arch/powerpc/sysdev/xive/spapr.c +++ b/arch/powerpc/sysdev/xive/spapr.c @@ -768,7 +768,7 @@ static const u8 *get_vec5_feature(unsigned int index) return vec5 + index; } -static bool xive_spapr_disabled(void) +static bool __init xive_spapr_disabled(void) { const u8 *vec5_xive; -- 2.26.2