Skip to contentSkip to conversation

ARM: S3C2410: Remove section mismatch warning

PATCH New Tushar Behera 2 participants 5 messages Oct 7, 2011 – Oct 10, 2011

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

v2 cover ARM: S3C2410: Remove section mismatch warning

While compiling with s3c2410_defconfig, we receive 4 section mismatch warnings.

Patch 1 addresses a couple of warnings related to usb_simtec_init(). Patch 2 addresses mismatch warnings in a couple of mach-*/irq.c files.

Changes for V2:
* The original patch is splitted to address to different logical solutions.
* __initdata attribute is removed from struct sysdev_driver structures and __init attribute is removed from all referenced function definitions.

The patches are rebased on v3.1-rc8. They are only build tested, they are not boot tested on any hardware.

Tushar Behera (2):
ARM: S3C2410: Add __init attribute to usb_simtec_init()
ARM: S3C2410: irq: Remove __init attributes to fix compilation
warning

 arch/arm/mach-s3c2410/usb-simtec.c |    2 +-
 arch/arm/mach-s3c2410/usb-simtec.h |    2 +-
 arch/arm/mach-s3c2416/irq.c        |    4 ++--
 arch/arm/mach-s3c2443/irq.c        |    4 ++--
 4 files changed, 6 insertions(+), 6 deletions(-)
Signature · 1 line
1.7.4.1
#1 lore raw

PATCH v2 1/2 ARM: S3C2410: Add __init attribute to usb_simtec_init()

usb_simtec_init() references s3c_ohci_set_platdata() which is defined with __init attribute. Hence to remove section mismatch warning, __init attribute is added to usb_simtec_init().

It removes following two warnigs.

WARNING: vmlinux.o(.text+0x1460c): Section mismatch in reference from
the function usb_simtec_init() to the function
.init.text:s3c_ohci_set_platdata()
The function usb_simtec_init() references the function
__init s3c_ohci_set_platdata().

WARNING: vmlinux.o(.text+0x14650): Section mismatch in reference from
the function usb_simtec_init() to the (unknown reference)
.init.data:(unknown)
The function usb_simtec_init() references the (unknown reference) __initdata (unknown).

---
 arch/arm/mach-s3c2410/usb-simtec.c |    2 +-
 arch/arm/mach-s3c2410/usb-simtec.h |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-s3c2410/usb-simtec.c +1 -1
index 29bd3d9..3a1028c 100644
@@ -104,7 +104,7 @@ static struct s3c2410_hcd_info usb_simtec_info __initdata = {
 };
 
 
-int usb_simtec_init(void)
+int __init usb_simtec_init(void)
 {
 	int ret;
 
arch/arm/mach-s3c2410/usb-simtec.h +1 -1
index 03842ed..43cc88f 100644
@@ -12,5 +12,5 @@
  * published by the Free Software Foundation.
 */
 
-extern int usb_simtec_init(void);
+extern int __init usb_simtec_init(void);
 
Signature · 1 line
1.7.4.1
#2 lore raw

PATCH v2 1/2 ARM: S3C2410: Add __init attribute to usb_simtec_init()

Hello.

Quoted 19 lines · Tushar Behera

usb_simtec_init() references s3c_ohci_set_platdata() which is defined with __init attribute. Hence to remove section mismatch warning, __init attribute is added to usb_simtec_init().

It removes following two warnigs.

WARNING: vmlinux.o(.text+0x1460c): Section mismatch in reference from
the function usb_simtec_init() to the function
.init.text:s3c_ohci_set_platdata()
The function usb_simtec_init() references the function
__init s3c_ohci_set_platdata().

WARNING: vmlinux.o(.text+0x14650): Section mismatch in reference from
the function usb_simtec_init() to the (unknown reference)
.init.data:(unknown)
The function usb_simtec_init() references the (unknown reference) __initdata (unknown).

[...]

arch/arm/mach-s3c2410/usb-simtec.h line 15

Quoted 10 lines
arch/arm/mach-s3c2410/usb-simtec.h +1 -1
index 03842ed..43cc88f 100644
@@ -12,5 +12,5 @@
   * published by the Free Software Foundation.
  */
 
-extern int usb_simtec_init(void);
+extern int __init usb_simtec_init(void);

Function prototypes don't need to be annotated with __init.

WBR, Sergei

#3 lore raw

PATCH v2 1/2 ARM: S3C2410: Add __init attribute to usb_simtec_init()

Hi Sergei,

Quoted 34 lines · Sergei Shtylyov

Hello.

Quoted 19 lines · Tushar Behera

usb_simtec_init() references s3c_ohci_set_platdata() which is defined with __init attribute. Hence to remove section mismatch warning, __init attribute is added to usb_simtec_init().

It removes following two warnigs.

WARNING: vmlinux.o(.text+0x1460c): Section mismatch in reference from the function usb_simtec_init() to the function .init.text:s3c_ohci_set_platdata()
The function usb_simtec_init() references the function __init s3c_ohci_set_platdata().

WARNING: vmlinux.o(.text+0x14650): Section mismatch in reference from the function usb_simtec_init() to the (unknown reference) .init.data:(unknown)
The function usb_simtec_init() references the (unknown reference) __initdata (unknown).

[...]

Quoted 9 lines
arch/arm/mach-s3c2410/usb-simtec.h +0 -0
index 03842ed..43cc88f 100644
@@ -12,5 +12,5 @@
 * published by the Free Software Foundation.
 */
 
Quoted 5 lines

arch/arm/mach-s3c2410/usb-simtec.h line 15

Quoted 2 lines
arch/arm/mach-s3c2410/usb-simtec.h +1 -1
-extern int usb_simtec_init(void);
+extern int __init usb_simtec_init(void);

Function prototypes don't need to be annotated with __init.

I agree that function prototypes don't require to be annotated.

But, will it not be better to have same annotation for both function prototypes and the function definitions?

Quoted 2 lines

WBR, Sergei

Thanks for your review.

Signature · 1 line
Tushar Behera
#4 lore raw

PATCH v2 2/2 ARM: S3C2410: irq: Remove __init attributes to fix compilation warning

In reply to Tushar Behera

The structure *_irq_driver is passed as a parameter in sysdev_driver_register(). This in turn would add this structure to a list which may be traversed later.

Hence, even though the functions referenced through this structure have __init attribute, we cannot possibly add __initdata attribute to it.

To remove compilation warnings, the functions referenced thorugh this structure are also defined without __init attribute.

It removes following two warnings.

WARNING: vmlinux.o(.data+0x4f58): Section mismatch in reference from the variable s3c2416_irq_driver to the function .init.text:s3c2416_irq_add() The variable s3c2416_irq_driver references the function __init s3c2416_irq_add()

WARNING: vmlinux.o(.data+0x7c50): Section mismatch in reference from the variable s3c2443_irq_driver to the function .init.text:s3c2443_irq_add() The variable s3c2443_irq_driver references the function __init s3c2443_irq_add()

---
 arch/arm/mach-s3c2416/irq.c |    4 ++--
 arch/arm/mach-s3c2443/irq.c |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
arch/arm/mach-s3c2416/irq.c +2 -2
index 28ad20d..53e8e57 100644
@@ -194,7 +194,7 @@ static struct irq_chip s3c2416_irq_uart3 = {
 
 /* IRQ initialisation code */
 
-static int __init s3c2416_add_sub(unsigned int base,
+static int s3c2416_add_sub(unsigned int base,
 				   void (*demux)(unsigned int,
 						 struct irq_desc *),
 				   struct irq_chip *chip,
@@ -213,7 +213,7 @@ static int __init s3c2416_add_sub(unsigned int base,
 	return 0;
 }
 
-static int __init s3c2416_irq_add(struct sys_device *sysdev)
+static int s3c2416_irq_add(struct sys_device *sysdev)
 {
 	printk(KERN_INFO "S3C2416: IRQ Support\n");
 
arch/arm/mach-s3c2443/irq.c +2 -2
index 83ecb11..18585dd 100644
@@ -222,7 +222,7 @@ static struct irq_chip s3c2443_irq_cam = {
 
 /* IRQ initialisation code */
 
-static int __init s3c2443_add_sub(unsigned int base,
+static int s3c2443_add_sub(unsigned int base,
 				   void (*demux)(unsigned int,
 						 struct irq_desc *),
 				   struct irq_chip *chip,
@@ -241,7 +241,7 @@ static int __init s3c2443_add_sub(unsigned int base,
 	return 0;
 }
 
-static int __init s3c2443_irq_add(struct sys_device *sysdev)
+static int s3c2443_irq_add(struct sys_device *sysdev)
 {
 	printk("S3C2443: IRQ Support\n");
 
Signature · 1 line
1.7.4.1