: MIPS: IP27: Fix section mismatches & mark boot functions w/ __init
PATCH 1/1 : MIPS: IP27: Fix section mismatches & mark boot functions w/ __init
From: Joshua Kinard <[email protected]>
When the xwidget.h changes were added in 4.1, they inadvertently created a few section mismatch warnings due to not using '__init' on a few functions:
WARNING: vmlinux.o(.text+0x38f8): Section mismatch in reference from the function xbow_probe() to the variable .init.rodata:widget_idents The function xbow_probe() references
the variable __initconst widget_idents.
This is often because xbow_probe lacks a __initconst
annotation or the annotation of widget_idents is wrong.
WARNING: vmlinux.o(.text+0x3bd8): Section mismatch in reference from the function xtalk_probe_node() to the variable .init.rodata:widget_idents The function xtalk_probe_node() references
the variable __initconst widget_idents.
This is often because xtalk_probe_node lacks a __initconst
annotation or the annotation of widget_idents is wrong.
Fix this, and add __init to nearby IP27 functions that are only used during system boot up, as this platform can't hotswap CPUs/nodes while running anyways.
--- arch/mips/sgi-ip27/ip27-init.c | 2 +- arch/mips/sgi-ip27/ip27-smp.c | 10 +++++----- arch/mips/sgi-ip27/ip27-xtalk.c | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-)
linux-mips-ip27-fix-section-mismatches.patch
arch/mips/sgi-ip27/ip27-init.c +1 -1
@@ -110,7 +110,7 @@ static void per_hub_init(cnodeid_t cnode) } } -void per_cpu_init (void ) +void __init per_cpu_init (void ) {int cpu =smp_processor_id ();int slice =LOCAL_HUB_L (PI_CPU_NUM );
arch/mips/sgi-ip27/ip27-smp.c +5 -5
@@ -94,7 +94,7 @@ static int do_cpumask(cnodeid_t cnode, nasid_t nasid, int highest)return highest; } -void cpu_node_probe (void ) +void __init cpu_node_probe (void ) {int i, highest =0 ;gda_t *gdap =GDA ;
@@ -127,7 +127,7 @@ void cpu_node_probe(void)printk ("Discovered %d cpus on %d nodes\n" , highest +1 ,num_online_nodes ()); } -static __init void intr_clear_all (nasid_t nasid) +static void __init intr_clear_all (nasid_t nasid) {int i;
@@ -173,12 +173,12 @@ static void ip27_send_ipi_mask(const struct cpumask *mask, unsigned int action)ip27_send_ipi_single (i, action); } -static void ip27_init_secondary (void ) +static void __init ip27_init_secondary (void ) {per_cpu_init (); } -static void ip27_smp_finish (void ) +static void __init ip27_smp_finish (void ) {extern void hub_rt_clock_event_init (void );
@@ -191,7 +191,7 @@ static void ip27_smp_finish(void)* set sp to the kernel stack of the newly created idle process, gp to the proc * struct so that current_thread_info() will work. */ -static void ip27_boot_secondary (int cpu,struct task_struct *idle) +static void __init ip27_boot_secondary (int cpu,struct task_struct *idle) {unsigned long gp = (unsigned long )task_thread_info (idle);unsigned long sp =__KSTK_TOS (idle);
arch/mips/sgi-ip27/ip27-xtalk.c +3 -3
@@ -22,7 +22,7 @@extern int bridge_probe (nasid_t nasid,int widget,int masterwid); -static int probe_one_port (nasid_t nasid,int widget,int masterwid) +static int __init probe_one_port (nasid_t nasid,int widget,int masterwid) {const struct widget_ident *res;u32 wid_id, wid_part, wid_mfgr, wid_rev;
@@ -63,7 +63,7 @@ static int probe_one_port(nasid_t nasid, int widget, int masterwid)return 0 ; } -static int xbow_probe (nasid_t nasid) +static int __init xbow_probe (nasid_t nasid) {lboard_t *brd;klxbow_t *xbow_p;
@@ -116,7 +116,7 @@ static int xbow_probe(nasid_t nasid)return 0 ; } -void xtalk_probe_node (cnodeid_t nid) +void __init xtalk_probe_node (cnodeid_t nid) {volatile u64 hubreg;nasid_t nasid;