Hi David.

I was looking into the few remaining section mismatch
warnings on sparc64 (with my previous posted patchset applied).

This is more an RFC than a real patch submission.
Can you try to look through my mumblings and see if anything makes sense.


The ones I have is:
WARNING: vmlinux.o(.text+0x3d76c): Section mismatch in reference from the 
variable after_lock_tlb to the function 
.cpuinit.text:sun4v_register_mondo_queues()
The function after_lock_tlb() references
the function __cpuinit sun4v_register_mondo_queues().
This is often because after_lock_tlb lacks a __cpuinit
annotation or the annotation of sun4v_register_mondo_queues is wrong.

WARNING: vmlinux.o(.text+0x3d88c): Section mismatch in reference from the 
variable after_lock_tlb to the function .devinit.text:smp_callin()
The function after_lock_tlb() references
the function __devinit smp_callin().
This is often because after_lock_tlb lacks a __devinit
annotation or the annotation of smp_callin is wrong.

This is due to the calls to smp_callin and sun4v_register_mondo_queues in 
trampoline.S
after_lock_tlb is blamed because this is the first symbol modpost could find.

I assume this code is executed only once for non HOTPLUG_CPU cases and
for HOTPLUG_CPU cases when a CPU is brought online.
So it should be __cpuinit code.

Like this:
diff --git a/arch/sparc64/kernel/trampoline.S b/arch/sparc64/kernel/trampoline.S
index 04e81dd..7cd4636 100644
--- a/arch/sparc64/kernel/trampoline.S
+++ b/arch/sparc64/kernel/trampoline.S
@@ -36,7 +36,7 @@ dtlb_load:
 tramp_stack:
        .skip   TRAMP_STACK_SIZE
 
-       .text
+       __CPUINIT
        .align          8
        .globl          sparc64_cpu_startup, sparc64_cpu_startup_end
 sparc64_cpu_startup:

That would match the declaration of sun4v_register_mondo_queues but not
smp_callin. Looking at the code (not claiming I understand it
I guess it should be __cpuinit as this is again only executed
after init in HOTPLUG_CPU cases.
So something like this:

diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index a8052b7..cc45473 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -86,7 +86,7 @@ extern void setup_sparc64_timer(void);
 
 static volatile unsigned long callin_flag = 0;
 
-void __devinit smp_callin(void)
+void __cpuinit smp_callin(void)
 {
        int cpuid = hard_smp_processor_id();
 

WARNING: vmlinux.o(.text+0x3d9ac): Section mismatch in reference from the 
variable hv_cpu_startup to the function 
.cpuinit.text:sun4v_register_mondo_queues()
The function hv_cpu_startup() references
the function __cpuinit sun4v_register_mondo_queues().
This is often because hv_cpu_startup lacks a __cpuinit
annotation or the annotation of sun4v_register_mondo_queues is wrong.

WARNING: vmlinux.o(.text+0x3d9c0): Section mismatch in reference from the 
variable hv_cpu_startup to the function .devinit.text:smp_callin()
The function hv_cpu_startup() references
the function __devinit smp_callin().
This is often because hv_cpu_startup lacks a __devinit
annotation or the annotation of smp_callin is wrong.

Same story as above - so something like this:

diff --git a/arch/sparc64/kernel/hvtramp.S b/arch/sparc64/kernel/hvtramp.S
index b692e04..014fb45 100644
--- a/arch/sparc64/kernel/hvtramp.S
+++ b/arch/sparc64/kernel/hvtramp.S
@@ -13,7 +13,7 @@
 #include <asm/head.h>
 #include <asm/asi.h>
 
-       .text
+       __CPUINIT
        .align          8
        .globl          hv_cpu_startup, hv_cpu_startup_end
 


WARNING: vmlinux.o(.text+0x47094): Section mismatch in reference from the 
function dr_cpu_data() to the function .devinit.text:mdesc_fill_in_cpu_data()
The function dr_cpu_data() references
the function __devinit mdesc_fill_in_cpu_data().
This is often because dr_cpu_data lacks a __devinit
annotation or the annotation of mdesc_fill_in_cpu_data is wrong.

I could not see how to fix this in a clean way.
dr_cpu_data() references mdesc_fill_in_cpu_data() via dr_cpu_configure()
and that looks bogus.

Full diff of the included changes below.

If you can use this in part or in toal they have my:
Signed-off-by: Sam Ravnborg <[EMAIL PROTECTED]>


        Sam

diff --git a/arch/sparc64/kernel/hvtramp.S b/arch/sparc64/kernel/hvtramp.S
index b692e04..0236c43 100644
--- a/arch/sparc64/kernel/hvtramp.S
+++ b/arch/sparc64/kernel/hvtramp.S
@@ -3,6 +3,8 @@
  * Copyright (C) 2007 David S. Miller <[EMAIL PROTECTED]>
  */
 
+#include <linux/init.h>
+
 #include <asm/thread_info.h>
 #include <asm/hypervisor.h>
 #include <asm/scratchpad.h>
@@ -13,7 +15,7 @@
 #include <asm/head.h>
 #include <asm/asi.h>
 
-       .text
+       __CPUINIT
        .align          8
        .globl          hv_cpu_startup, hv_cpu_startup_end
 
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index a8052b7..cc45473 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -86,7 +86,7 @@ extern void setup_sparc64_timer(void);
 
 static volatile unsigned long callin_flag = 0;
 
-void __devinit smp_callin(void)
+void __cpuinit smp_callin(void)
 {
        int cpuid = hard_smp_processor_id();
 
diff --git a/arch/sparc64/kernel/trampoline.S b/arch/sparc64/kernel/trampoline.S
index 04e81dd..4ae2e52 100644
--- a/arch/sparc64/kernel/trampoline.S
+++ b/arch/sparc64/kernel/trampoline.S
@@ -4,6 +4,8 @@
  * Copyright (C) 1997 David S. Miller ([EMAIL PROTECTED])
  */
 
+#include <linux/init.h>
+
 #include <asm/head.h>
 #include <asm/asi.h>
 #include <asm/lsu.h>
@@ -36,7 +38,7 @@ dtlb_load:
 tramp_stack:
        .skip   TRAMP_STACK_SIZE
 
-       .text
+       __CPUINIT
        .align          8
        .globl          sparc64_cpu_startup, sparc64_cpu_startup_end
 sparc64_cpu_startup:
-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to