MIPS: Fix check_bugs() modpost warning
v2 cover MIPS: Fix check_bugs() modpost warning
Hi all,
This series fixes a modpost warning visible in -next from check_bugs() and helps avoid a potential, albeit unlikely, warning from check_bugs_early().
---
Changes in v2:
- Now two separate patches: one to avoid current check_bugs() warning
and one to avoid potential check_bugs_early() warning.
- Sink body of check_bugs_early() into setup_arch() directly, rather
than marking it as __init (Nick).
- Add Naresh's reported-by to patch 1, which came after v1 was sent.
- Reword commit messages to note that there is not a problem at run time
because check_bugs() and check_bugs_early(), while not marked __init,
are only called from __init functions; modpost does not know this
though, hence the warning.
- Link to v1: https://lore.kernel.org/r/20230419-mips-check_bugs-init-attribute-v1-1-91e6eed55b89@kernel.org
---
Nathan Chancellor (2):
MIPS: Mark check_bugs() as __init
MIPS: Sink body of check_bugs_early() into its only call site
arch/mips/include/asm/bugs.h | 8 +------- arch/mips/kernel/setup.c | 3 ++- 2 files changed, 3 insertions(+), 8 deletions(-)
---
base-commit: 6a8f57ae2eb07ab39a6f0ccad60c760743051026
change-id: 20230419-mips-check_bugs-init-attribute-026103bdb255
Best regards,
Signature · 1 line
Nathan Chancellor <[email protected]>
PATCH v2 1/2 MIPS: Mark check_bugs() as __init
After commit ac7c3e4ff401 ("compiler: enable CONFIG_OPTIMIZE_INLINING forcibly"), a compiler may choose not to inline a function marked with just 'inline'. If check_bugs() is not inlined into start_kernel(), which occurs when building with clang after commit 9ea7e6b62c2b ("init: Mark [arch_call_]rest_init() __noreturn"), modpost complains with:
WARNING: modpost: vmlinux.o: section mismatch in reference: check_bugs (section: .text) -> check_bugs32 (section: .init.text)
check_bugs() is only called from start_kernel(), which itself is marked __init, so there would not be any issues at run time. Make it obvious to modpost that this call chain is safe by marking check_bugs() as __init, which fixes the warning.
--- arch/mips/include/asm/bugs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/include/asm/bugs.h +1 -1
@@ -30,7 +30,7 @@ static inline void check_bugs_early(void)check_bugs64_early (); } -static inline void check_bugs (void ) +static inline void __init check_bugs (void ) {unsigned int cpu =smp_processor_id ();
Signature · 1 line
2.40.0
PATCH v2 2/2 MIPS: Sink body of check_bugs_early() into its only call site
In reply to Nathan ChancellorIf check_bugs_early() is not inlined, which a compiler is free to do after commit ac7c3e4ff401 ("compiler: enable CONFIG_OPTIMIZE_INLINING forcibly"), modpost would warn that check_bugs_early(), a non-init function, refers to check_bugs64_early(), which is marked __init. This would not result in any run time issues, as check_bugs_early() is only called from setup_arch(), which is marked __init.
To avoid this potential warning, just sink the body of check_bugs_early() into its single call site in setup_arch().
--- arch/mips/include/asm/bugs.h | 6 ------ arch/mips/kernel/setup.c | 3 ++- 2 files changed, 2 insertions(+), 7 deletions(-)
arch/mips/include/asm/bugs.h +0 -6
@@ -24,12 +24,6 @@ extern void check_bugs64_early(void);extern void check_bugs32 (void );extern void check_bugs64 (void ); -static inline void check_bugs_early (void ) -{ -if (IS_ENABLED (CONFIG_CPU_R4X00_BUGS64 )) -check_bugs64_early (); -} -static inline void __init check_bugs (void ) {unsigned int cpu =smp_processor_id ();
arch/mips/kernel/setup.c +2 -1
@@ -786,7 +786,8 @@ void __init setup_arch(char **cmdline_p)setup_early_printk ();#endif cpu_report (); -check_bugs_early (); +if (IS_ENABLED (CONFIG_CPU_R4X00_BUGS64 )) +check_bugs64_early ();#if defined(CONFIG_VT )#if defined(CONFIG_VGA_CONSOLE )
Signature · 1 line
2.40.0
Thomas Bogendoerfer
maintainerQuoted 24 lines · Nathan Chancellor
Hi all,
This series fixes a modpost warning visible in -next from
check_bugs()and helps avoid a potential, albeit unlikely, warning fromcheck_bugs_early().---
Changes in v2:
- Now two separate patches: one to avoid currentcheck_bugs()warning
and one to avoid potentialcheck_bugs_early()warning.
- Sink body ofcheck_bugs_early()intosetup_arch()directly, rather
than marking it as__init(Nick).
- Add Naresh's reported-by to patch 1, which came after v1 was sent.
- Reword commit messages to note that there is not a problem at run time
becausecheck_bugs()andcheck_bugs_early(), while not marked__init,
are only called from__initfunctions; modpost does not know this
though, hence the warning.
- Link to v1: https://lore.kernel.org/r/20230419-mips-check_bugs-init-attribute-v1-1-91e6eed55b89@kernel.org---
Nathan Chancellor (2):
MIPS: Markcheck_bugs()as__init
MIPS: Sink body ofcheck_bugs_early()into its only call site
Quoted 10 lines
arch/mips/include/asm/bugs.h | 8 +------- arch/mips/kernel/setup.c | 3 ++- 2 files changed, 3 insertions(+), 8 deletions(-)---
base-commit:6a8f57ae2eb07ab39a6f0ccad60c760743051026
change-id: 20230419-mips-check_bugs-init-attribute-026103bdb255Best regards,
Signature · 1 line
Nathan Chancellor <[email protected]>
series applied to mips-next.
Thomas.
Signature · 2 lines
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ]