sparc32: probe for cpu info only during startup
authorSam Ravnborg <sam@ravnborg.org>
Thu, 21 Apr 2011 22:46:21 +0000 (15:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 Apr 2011 22:46:21 +0000 (15:46 -0700)
We did a cpu_probe() call each time a CPU got online - which
only effect was to save latest CPU/FPU info for use by show_cpuinfo().
Use same setup as for sparc64 where we probe for this info during startup,
and only once.

This allowed us to annotate a few functions __init which again
fixed the following section mismatch warnings:

WARNING: vmlinux.o(.text+0x65f0): Section mismatch in reference from the function set_cpu_and_fpu() to the (unknown reference) .init.rodata:(unknown)
WARNING: vmlinux.o(.text+0x65f8): Section mismatch in reference from the function set_cpu_and_fpu() to the (unknown reference) .init.rodata:(unknown)
WARNING: vmlinux.o(.text+0x664c): Section mismatch in reference from the function set_cpu_and_fpu() to the variable .init.rodata:manufacturer_info
WARNING: vmlinux.o(.text+0x6650): Section mismatch in reference from the function set_cpu_and_fpu() to the variable .init.rodata:manufacturer_info

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/leon.h
arch/sparc/kernel/cpu.c
arch/sparc/kernel/devices.c
arch/sparc/kernel/leon_smp.c
arch/sparc/kernel/sun4d_smp.c
arch/sparc/kernel/sun4m_smp.c

index 31fb2ac77afa81f33d4459c7a766f4f13cb2ae82..f1598ca255f04f6b9e8870bb9b330290a06528e7 100644 (file)
@@ -343,7 +343,6 @@ extern void leon_smp_done(void);
 extern void leon_boot_cpus(void);
 extern int leon_boot_one_cpu(int i);
 void leon_init_smp(void);
-extern void cpu_probe(void);
 extern void cpu_idle(void);
 extern void init_IRQ(void);
 extern void cpu_panic(void);
index c3483c71aa0436efa8452c091eb4a75f51a2faa5..138dbbc8dc8475d477119420fec89d582577006f 100644 (file)
@@ -258,7 +258,7 @@ static const char *sparc_fpu_type;
 const char *sparc_pmu_type;
 
 
-static void set_cpu_and_fpu(int psr_impl, int psr_vers, int fpu_vers)
+static void __init set_cpu_and_fpu(int psr_impl, int psr_vers, int fpu_vers)
 {
        const struct manufacturer_info *manuf;
        int i;
@@ -434,7 +434,7 @@ const struct seq_operations cpuinfo_op = {
 };
 
 #ifdef CONFIG_SPARC32
-void __cpuinit cpu_probe(void)
+static int __init cpu_type_probe(void)
 {
        int psr_impl, psr_vers, fpu_vers;
        int psr;
@@ -453,8 +453,12 @@ void __cpuinit cpu_probe(void)
        put_psr(psr);
 
        set_cpu_and_fpu(psr_impl, psr_vers, fpu_vers);
+
+       return 0;
 }
-#else
+#endif /* CONFIG_SPARC32 */
+
+#ifdef CONFIG_SPARC64
 static void __init sun4v_cpu_probe(void)
 {
        switch (sun4v_chip_type) {
@@ -495,6 +499,6 @@ static int __init cpu_type_probe(void)
        }
        return 0;
 }
+#endif /* CONFIG_SPARC64 */
 
 early_initcall(cpu_type_probe);
-#endif
index d2eddd6647cd2d1debfb79d11a9bce1cc87e8c74..12aff23beb940afdff7b2e04503499f6b4125f25 100644 (file)
@@ -20,7 +20,6 @@
 #include <asm/system.h>
 #include <asm/cpudata.h>
 
-extern void cpu_probe(void);
 extern void clock_stop_probe(void); /* tadpole.c */
 extern void sun4c_probe_memerr_reg(void);
 
@@ -133,7 +132,6 @@ void __init device_scan(void)
        }
 #endif /* !CONFIG_SMP */
 
-       cpu_probe();
        {
                extern void auxio_probe(void);
                extern void auxio_power_probe(void);
index 053eca9f78e939f8754c1e3d388718a81c43cdf5..b4059dbb6d93ded43b88e9785cec5d70c9765fce 100644 (file)
@@ -94,8 +94,6 @@ void __cpuinit leon_callin(void)
        local_flush_cache_all();
        local_flush_tlb_all();
 
-       cpu_probe();
-
        /* Fix idle thread fields. */
        __asm__ __volatile__("ld [%0], %%g6\n\t" : : "r"(&current_set[cpuid])
                             : "memory" /* paranoid */);
index 475d50b96cd0bb7f49d0e05a9ce566a10edab3a5..38423a05ae41f4f98a1fa7d239232b2919372f48 100644 (file)
@@ -80,8 +80,6 @@ void __cpuinit smp4d_callin(void)
        local_flush_cache_all();
        local_flush_tlb_all();
 
-       cpu_probe();
-
        while ((unsigned long)current_set[cpuid] < PAGE_OFFSET)
                barrier();
 
index 58b8d849674cf63f0f255d96f3b5a834f83ae337..5545d10d50cd20f324ece1d1de2890d10428713b 100644 (file)
@@ -59,8 +59,6 @@ void __cpuinit smp4m_callin(void)
        local_flush_cache_all();
        local_flush_tlb_all();
 
-       cpu_probe();
-
        /* Fix idle thread fields. */
        __asm__ __volatile__("ld [%0], %%g6\n\t"
                             : : "r" (&current_set[cpuid])