diff mbox series

mips: fix Section mismatch in reference

Message ID 20201127083943.2666864-1-anders.roxell@linaro.org (mailing list archive)
State Accepted
Commit ad4fddef5f2345aa9214e979febe2f47639c10d9
Headers show
Series mips: fix Section mismatch in reference | expand

Commit Message

Anders Roxell Nov. 27, 2020, 8:39 a.m. UTC
When building mips tinyconfig with clang the following error show up:

WARNING: modpost: vmlinux.o(.text+0x1940c): Section mismatch in reference from the function r4k_cache_init() to the function .init.text:loongson3_sc_init()
The function r4k_cache_init() references
the function __init loongson3_sc_init().
This is often because r4k_cache_init lacks a __init
annotation or the annotation of loongson3_sc_init is wrong.

Remove marked __init from function loongson3_sc_init(),
mips_sc_probe_cm3(), and mips_sc_probe().

Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
---
 arch/mips/mm/c-r4k.c   | 2 +-
 arch/mips/mm/sc-mips.c | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

Comments

Nick Desaulniers Nov. 30, 2020, 8:40 p.m. UTC | #1
On Fri, Nov 27, 2020 at 12:39 AM Anders Roxell <anders.roxell@linaro.org> wrote:
>
> When building mips tinyconfig with clang the following error show up:
>
> WARNING: modpost: vmlinux.o(.text+0x1940c): Section mismatch in reference from the function r4k_cache_init() to the function .init.text:loongson3_sc_init()
> The function r4k_cache_init() references
> the function __init loongson3_sc_init().

Looks like loongson2_sc_init() might also have the same problem? (Both
loongson2_sc_init  and loongson3_sc_init are called from non-__init
setup_scache).  Trying to pinpoint a Fixes tag is tricky, it looks
like setup_scache used to be marked __init, then __cpuinit?

> This is often because r4k_cache_init lacks a __init
> annotation or the annotation of loongson3_sc_init is wrong.
>
> Remove marked __init from function loongson3_sc_init(),
> mips_sc_probe_cm3(), and mips_sc_probe().

mips_sc_probe_cm3() is only called from mips_sc_probe() which is
marked as __init.  mips_sc_probe is only called from mips_sc_init,
which is not marked __init.

So the patch is fine (and thanks for sending it):

Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>

though it looks like it might be worthwhile for the MIPS maintainer or
Loongson folks to see if they can lower the kernel image size in
memory post init by possibly re-adding __init to
setup_scache()/r4k_cache_init()/cpu_cache_init() and friends.

>
> Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
> ---
>  arch/mips/mm/c-r4k.c   | 2 +-
>  arch/mips/mm/sc-mips.c | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
> index 99521764c75b..4f976d687ab0 100644
> --- a/arch/mips/mm/c-r4k.c
> +++ b/arch/mips/mm/c-r4k.c
> @@ -1609,7 +1609,7 @@ static void __init loongson2_sc_init(void)
>         c->options |= MIPS_CPU_INCLUSIVE_CACHES;
>  }
>
> -static void __init loongson3_sc_init(void)
> +static void loongson3_sc_init(void)
>  {
>         struct cpuinfo_mips *c = &current_cpu_data;
>         unsigned int config2, lsize;
> diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c
> index dd0a5becaabd..06ec304ad4d1 100644
> --- a/arch/mips/mm/sc-mips.c
> +++ b/arch/mips/mm/sc-mips.c
> @@ -146,7 +146,7 @@ static inline int mips_sc_is_activated(struct cpuinfo_mips *c)
>         return 1;
>  }
>
> -static int __init mips_sc_probe_cm3(void)
> +static int mips_sc_probe_cm3(void)
>  {
>         struct cpuinfo_mips *c = &current_cpu_data;
>         unsigned long cfg = read_gcr_l2_config();
> @@ -180,7 +180,7 @@ static int __init mips_sc_probe_cm3(void)
>         return 0;
>  }
>
> -static inline int __init mips_sc_probe(void)
> +static inline int mips_sc_probe(void)
>  {
>         struct cpuinfo_mips *c = &current_cpu_data;
>         unsigned int config1, config2;
> --
> 2.29.2
>
diff mbox series

Patch

diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 99521764c75b..4f976d687ab0 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -1609,7 +1609,7 @@  static void __init loongson2_sc_init(void)
 	c->options |= MIPS_CPU_INCLUSIVE_CACHES;
 }
 
-static void __init loongson3_sc_init(void)
+static void loongson3_sc_init(void)
 {
 	struct cpuinfo_mips *c = &current_cpu_data;
 	unsigned int config2, lsize;
diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c
index dd0a5becaabd..06ec304ad4d1 100644
--- a/arch/mips/mm/sc-mips.c
+++ b/arch/mips/mm/sc-mips.c
@@ -146,7 +146,7 @@  static inline int mips_sc_is_activated(struct cpuinfo_mips *c)
 	return 1;
 }
 
-static int __init mips_sc_probe_cm3(void)
+static int mips_sc_probe_cm3(void)
 {
 	struct cpuinfo_mips *c = &current_cpu_data;
 	unsigned long cfg = read_gcr_l2_config();
@@ -180,7 +180,7 @@  static int __init mips_sc_probe_cm3(void)
 	return 0;
 }
 
-static inline int __init mips_sc_probe(void)
+static inline int mips_sc_probe(void)
 {
 	struct cpuinfo_mips *c = &current_cpu_data;
 	unsigned int config1, config2;