diff mbox

[4/4] arm: mach-s3c2440: mini2440: fix section mismatch

Message ID 1310033919-4245-5-git-send-email-w.sang@pengutronix.de (mailing list archive)
State New, archived
Headers show

Commit Message

Wolfram Sang July 7, 2011, 10:18 a.m. UTC
If mini2440_init() is in __init, mini2440_parse_features() should also
be in __init. Fixes:

(.text+0x9adc): Section mismatch in reference from the function mini2440_parse_features.clone.0() to the (unknown reference) .init.data:(unknown)
The function mini2440_parse_features.clone.0() references the (unknown reference) __initdata (unknown).

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: Michel Pollet <buserror@gmail.com>
Cc: Kukjin Kim <kgene.kim@samsung.com>
---
 arch/arm/mach-s3c2440/mach-mini2440.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Kim Kukjin July 8, 2011, 6:06 a.m. UTC | #1
Wolfram Sang wrote:
> 
> If mini2440_init() is in __init, mini2440_parse_features() should also
> be in __init. Fixes:
> 
> (.text+0x9adc): Section mismatch in reference from the function
> mini2440_parse_features.clone.0() to the (unknown reference)
.init.data:(unknown)
> The function mini2440_parse_features.clone.0() references the (unknown
reference)
> __initdata (unknown).

But I couldn't find above "Section mismatch" in my building with
CONFIG_DEBUG_SECTION_MISMATCH=y.

Hmm...

> 
> Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> Cc: Michel Pollet <buserror@gmail.com>
> Cc: Kukjin Kim <kgene.kim@samsung.com>
> ---
>  arch/arm/mach-s3c2440/mach-mini2440.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/mach-s3c2440/mach-mini2440.c b/arch/arm/mach-
> s3c2440/mach-mini2440.c
> index dd3120d..fc2dc0b 100644
> --- a/arch/arm/mach-s3c2440/mach-mini2440.c
> +++ b/arch/arm/mach-s3c2440/mach-mini2440.c
> @@ -552,7 +552,7 @@ struct mini2440_features_t {
>  	struct platform_device *optional[8];
>  };
> 
> -static void mini2440_parse_features(
> +static void __init mini2440_parse_features(
>  		struct mini2440_features_t * features,
>  		const char * features_str )
>  {
> --
> 1.7.5.4

Thanks.

Best regards,
Kgene.
--
Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
Russell King - ARM Linux July 8, 2011, 9:12 a.m. UTC | #2
On Fri, Jul 08, 2011 at 03:06:17PM +0900, Kukjin Kim wrote:
> Wolfram Sang wrote:
> > 
> > If mini2440_init() is in __init, mini2440_parse_features() should also
> > be in __init. Fixes:
> > 
> > (.text+0x9adc): Section mismatch in reference from the function
> > mini2440_parse_features.clone.0() to the (unknown reference)
> .init.data:(unknown)
> > The function mini2440_parse_features.clone.0() references the (unknown
> reference)
> > __initdata (unknown).
> 
> But I couldn't find above "Section mismatch" in my building with
> CONFIG_DEBUG_SECTION_MISMATCH=y.

Your compiler may have inlined the function, so defeating the check.

static struct s3c2410fb_display mini2440_lcd_cfg[] __initdata = {

and mini2440_parse_features() references this variable.  Therefore
either mini2440_parse_features() needs to be marked __init (it's
only caller is from __init, so that seems sensible) or the
__initdata markers on the referenced data need to be removed.

Adding __init looks like the right thing.
diff mbox

Patch

diff --git a/arch/arm/mach-s3c2440/mach-mini2440.c b/arch/arm/mach-s3c2440/mach-mini2440.c
index dd3120d..fc2dc0b 100644
--- a/arch/arm/mach-s3c2440/mach-mini2440.c
+++ b/arch/arm/mach-s3c2440/mach-mini2440.c
@@ -552,7 +552,7 @@  struct mini2440_features_t {
 	struct platform_device *optional[8];
 };
 
-static void mini2440_parse_features(
+static void __init mini2440_parse_features(
 		struct mini2440_features_t * features,
 		const char * features_str )
 {