calibrate_delay() must be __cpuinit
PATCH 1/1 calibrate_delay() must be __cpuinit
calibrate_delay() must be __cpuinit, not __{dev,}init.
I've verified that this is correct for all users.
While doing the latter, I also did the following cleanups:
- remove pointless additional prototypes in C files
- ensure all users #include <linux/delay.h>
This patch fixes the following section mismatches with CONFIG_HOTPLUG=n, CONFIG_HOTPLUG_CPU=y:
<-- snip -->
...
WARNING: vmlinux.o(.text+0x1128d): Section mismatch: reference to .init.text.1:calibrate_delay (between 'check_cx686_slop' and 'set_cx86_reorder')
WARNING: vmlinux.o(.text+0x25102): Section mismatch: reference to .init.text.1:calibrate_delay (between 'smp_callin' and 'cpu_coregroup_map')
...
<-- snip -->
---
arch/alpha/kernel/smp.c | 4 ---- arch/frv/kernel/setup.c | 2 +- arch/ia64/kernel/smpboot.c | 1 - arch/mips/kernel/smp.c | 1 - arch/powerpc/platforms/powermac/cpufreq_32.c | 2 -- arch/sparc/kernel/sun4d_smp.c | 4 +--- arch/sparc/kernel/sun4m_smp.c | 5 ++--- arch/sparc64/kernel/smp.c | 2 -- arch/x86/kernel/cpu/cyrix.c | 2 -- arch/x86/kernel/smpboot_32.c | 2 -- arch/x86/mach-voyager/voyager_smp.c | 2 -- arch/xtensa/kernel/time.c | 2 +- drivers/s390/sysinfo.c | 2 +- init/calibrate.c | 6 +++--- 14 files changed, 9 insertions(+), 28 deletions(-)
dd28ad1a68b203f4588b0f88ae29fd03646a8541
arch/alpha/kernel/smp.c +0 -4
@@ -77,10 +77,6 @@ int smp_num_probed; /* Internal processor count */int smp_num_cpus =1 ;/* Number that came online. */ EXPORT_SYMBOL (smp_num_cpus); -extern void calibrate_delay (void ); - - -/* * Called by both boot and secondaries to move global data into * per-processor storage.
arch/frv/kernel/setup.c +1 -1
@@ -708,7 +708,7 @@ static void __init reserve_dma_coherent(void)/* * calibrate the delay loop */ -void __init calibrate_delay (void ) +void __cpuinit calibrate_delay (void ) { loops_per_jiffy = __delay_loops_MHz * (1000000 /HZ );
arch/ia64/kernel/smpboot.c +0 -1
@@ -120,7 +120,6 @@ static volatile unsigned long go[SLAVE + 1];#define DEBUG_ITC_SYNC 0 -extern void __devinit calibrate_delay (void );extern void start_ap (void );extern unsigned long ia64_iobase;
arch/mips/kernel/smp.c +0 -1
@@ -53,7 +53,6 @@ int __cpu_logical_map[NR_CPUS]; /* Map logical to physical */EXPORT_SYMBOL (phys_cpu_present_map);EXPORT_SYMBOL (cpu_online_map); -extern void __init calibrate_delay (void );extern void cpu_idle (void );/*
arch/powerpc/platforms/powermac/cpufreq_32.c +0 -2
@@ -113,8 +113,6 @@ static inline void debug_calc_bogomips(void)* result. We backup/restore the value to avoid affecting the * core cpufreq framework's own calculation. */ -extern void calibrate_delay (void ); -unsigned long save_lpj = loops_per_jiffy;calibrate_delay (); loops_per_jiffy = save_lpj;
arch/sparc/kernel/sun4d_smp.c +1 -3
@@ -19,12 +19,12 @@#include <linux/mm.h> #include <linux/swap.h> #include <linux/profile.h> +#include <linux/delay.h> #include <asm/ptrace.h> #include <asm/atomic.h> #include <asm/irq_regs.h> -#include <asm/delay.h> #include <asm/irq.h> #include <asm/page.h> #include <asm/pgalloc.h>
@@ -41,8 +41,6 @@extern ctxd_t *srmmu_ctx_table_phys; -extern void calibrate_delay (void ); -static volatile int smp_processors_ready =0 ;static int smp_highest_cpu;extern volatile unsigned long cpu_callin_map[NR_CPUS ];
arch/sparc/kernel/sun4m_smp.c +2 -3
@@ -16,6 +16,8 @@#include <linux/mm.h> #include <linux/swap.h> #include <linux/profile.h> +#include <linux/delay.h> +#include <asm/cacheflush.h> #include <asm/tlbflush.h> #include <asm/irq_regs.h>
@@ -23,7 +25,6 @@#include <asm/ptrace.h> #include <asm/atomic.h> -#include <asm/delay.h> #include <asm/irq.h> #include <asm/page.h> #include <asm/pgalloc.h>
@@ -39,8 +40,6 @@extern ctxd_t *srmmu_ctx_table_phys; -extern void calibrate_delay (void ); -extern volatile unsigned long cpu_callin_map[NR_CPUS ];extern unsigned char boot_cpu_id;
arch/sparc64/kernel/smp.c +0 -2
@@ -46,8 +46,6 @@#include <asm/ldc.h> #include <asm/hypervisor.h> -extern void calibrate_delay (void ); -int sparc64_multi_core__read_mostly ;cpumask_t cpu_possible_map__read_mostly =CPU_MASK_NONE ;
arch/x86/kernel/cpu/cyrix.c +0 -2
@@ -82,8 +82,6 @@ static char cyrix_model_mult2[] __cpuinitdata = "12233445";* FIXME: our newer udelay uses the tsc. We don't need to frob with SLOP */ -extern void calibrate_delay (void )__init ; -static void __cpuinit check_cx686_slop (struct cpuinfo_x86 *c) {unsigned long flags;
arch/x86/kernel/smpboot_32.c +0 -2
@@ -213,8 +213,6 @@ valid_k7: ; } -extern void calibrate_delay (void ); -static atomic_t init_deasserted;static void __cpuinit smp_callin (void )
arch/x86/mach-voyager/voyager_smp.c +0 -2
@@ -455,8 +455,6 @@ static void __init start_secondary(void *unused) {__u8 cpuid =hard_smp_processor_id (); -/* external functions not defined in the headers */ -extern void calibrate_delay (void );cpu_init ();
arch/xtensa/kernel/time.c +1 -1
@@ -204,7 +204,7 @@ again: }#ifndef CONFIG_GENERIC_CALIBRATE_DELAY -void __devinit calibrate_delay (void ) +void __cpuinit calibrate_delay (void ) { loops_per_jiffy =CCOUNT_PER_JIFFY ; printk("Calibrating delay loop (skipped)... "
drivers/s390/sysinfo.c +1 -1
@@ -422,7 +422,7 @@ void s390_adjust_jiffies(void)/* * calibrate the delay loop */ -void __init calibrate_delay (void ) +void __cpuinit calibrate_delay (void ) {s390_adjust_jiffies ();/* Print the good old Bogomips line .. */
init/calibrate.c +3 -3
@@ -29,7 +29,7 @@ __setup("lpj=", lpj_setup);#define DELAY_CALIBRATION_TICKS ((HZ < 100) ? 1 : (HZ/100))#define MAX_DIRECT_CALIBRATION_RETRIES 5 -static unsigned long __devinit calibrate_delay_direct (void ) +static unsigned long __cpuinit calibrate_delay_direct (void ) {unsigned long pre_start, start, post_start;unsigned long pre_end, end, post_end;
@@ -102,7 +102,7 @@ static unsigned long __devinit calibrate_delay_direct(void) return 0; }#else -static unsigned long __devinit calibrate_delay_direct (void ) {return 0 ;} +static unsigned long __cpuinit calibrate_delay_direct (void ) {return 0 ;}#endif /*
@@ -112,7 +112,7 @@ static unsigned long __devinit calibrate_delay_direct(void) {return 0;}*/ #define LPS_PREC 8 -void __devinit calibrate_delay (void ) +void __cpuinit calibrate_delay (void ) {unsigned long ticks, loopbit;int lps_precision =LPS_PREC ;