From: Oleg Nesterov cpu_idle() is referenced from generic code (init/main.c). It is declared/defined in init/main.c: void cpu_idle(void) i386/kernel/process.c void cpu_idle(void) i386/kernel/smpboot.c: int cpu_idle(void) i386/mach-voyager/voyager_smp.c: int cpu_idle(void) ppc/kernel/idle.c: int cpu_idle(void) ppc/kernel/smp.c: int cpu_idle(void *unused) ppc64/kernel/idle.c: int cpu_idle(void) ppc64/kernel/smp.c: int cpu_idle(void *unused) sparc/kernel/process.c: int cpu_idle(void) sparc64/kernel/process.c: int cpu_idle(void) sh/kernel/process.c: void cpu_idle(void *unused) sh/kernel/smp.c: int cpu_idle(void *unused) ia64/kernel/smpboot.c: int cpu_idle(void) ia64/kernel/process.c: void cpu_idle(void *unused) sh64/kernel/process.c: void cpu_idle(void *unused) s390/kernel/process.c: int cpu_idle(void) s390/kernel/smp.c: int cpu_idle(void * unused) m32r/kernel/process.c: void cpu_idle(void) m32r/kernel/smpboot.c int cpu_idle(void) Other arches beleive that cpu_idle is void(void). This patch puts 'void cpu_idle(void)' in include/linux/smp.h and fixes conflicting definitions. Also removes now unneeded declarations in x86_64, alpha, parisc. Only i386 part is tested. Signed-off-by: Oleg Nesterov Signed-off-by: Andrew Morton --- 25-akpm/arch/alpha/kernel/proto.h | 3 --- 25-akpm/arch/i386/kernel/smpboot.c | 6 ++---- 25-akpm/arch/i386/mach-voyager/voyager_smp.c | 5 ++--- 25-akpm/arch/ia64/kernel/process.c | 2 +- 25-akpm/arch/ia64/kernel/smpboot.c | 5 ++--- 25-akpm/arch/m32r/kernel/smpboot.c | 4 ++-- 25-akpm/arch/parisc/kernel/smp.c | 1 - 25-akpm/arch/ppc/kernel/idle.c | 3 +-- 25-akpm/arch/ppc/kernel/smp.c | 4 ++-- 25-akpm/arch/ppc64/kernel/idle.c | 3 +-- 25-akpm/arch/ppc64/kernel/smp.c | 4 ++-- 25-akpm/arch/s390/kernel/process.c | 3 +-- 25-akpm/arch/s390/kernel/smp.c | 4 ++-- 25-akpm/arch/sh/kernel/process.c | 2 +- 25-akpm/arch/sh/kernel/smp.c | 4 ++-- 25-akpm/arch/sh64/kernel/process.c | 2 +- 25-akpm/arch/sparc/kernel/process.c | 9 +++------ 25-akpm/arch/sparc/kernel/sun4d_smp.c | 1 - 25-akpm/arch/sparc/kernel/sun4m_smp.c | 1 - 25-akpm/arch/sparc64/kernel/process.c | 8 ++++---- 25-akpm/include/asm-x86_64/proto.h | 1 - 25-akpm/include/linux/smp.h | 2 ++ 25-akpm/init/main.c | 1 - 23 files changed, 31 insertions(+), 47 deletions(-) diff -puN arch/alpha/kernel/proto.h~fix-conflicting-cpu_idle-declarations arch/alpha/kernel/proto.h --- 25/arch/alpha/kernel/proto.h~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.958834960 -0800 +++ 25-akpm/arch/alpha/kernel/proto.h 2004-12-27 09:36:37.026824624 -0800 @@ -167,9 +167,6 @@ extern void entSys(void); extern void entUna(void); extern void entDbg(void); -/* process.c */ -extern void cpu_idle(void) __attribute__((noreturn)); - /* ptrace.c */ extern int ptrace_set_bpt (struct task_struct *child); extern int ptrace_cancel_bpt (struct task_struct *child); diff -puN arch/i386/kernel/smpboot.c~fix-conflicting-cpu_idle-declarations arch/i386/kernel/smpboot.c --- 25/arch/i386/kernel/smpboot.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.959834808 -0800 +++ 25-akpm/arch/i386/kernel/smpboot.c 2004-12-27 09:36:37.012826752 -0800 @@ -411,12 +411,10 @@ void __init smp_callin(void) int cpucount; -extern int cpu_idle(void); - /* * Activate a secondary processor. */ -int __init start_secondary(void *unused) +static void __init start_secondary(void *unused) { /* * Dont put anything before smp_callin(), SMP @@ -441,7 +439,7 @@ int __init start_secondary(void *unused) local_flush_tlb(); cpu_set(smp_processor_id(), cpu_online_map); wmb(); - return cpu_idle(); + cpu_idle(); } /* diff -puN arch/i386/mach-voyager/voyager_smp.c~fix-conflicting-cpu_idle-declarations arch/i386/mach-voyager/voyager_smp.c --- 25/arch/i386/mach-voyager/voyager_smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.961834504 -0800 +++ 25-akpm/arch/i386/mach-voyager/voyager_smp.c 2004-12-27 09:36:37.013826600 -0800 @@ -457,13 +457,12 @@ setup_trampoline(void) } /* Routine initially called when a non-boot CPU is brought online */ -int __init +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); - extern int cpu_idle(void); cpu_init(); @@ -520,7 +519,7 @@ start_secondary(void *unused) cpu_set(cpuid, cpu_online_map); wmb(); - return cpu_idle(); + cpu_idle(); } diff -puN arch/ia64/kernel/process.c~fix-conflicting-cpu_idle-declarations arch/ia64/kernel/process.c --- 25/arch/ia64/kernel/process.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.963834200 -0800 +++ 25-akpm/arch/ia64/kernel/process.c 2004-12-27 09:36:37.022825232 -0800 @@ -244,7 +244,7 @@ void cpu_idle_wait(void) EXPORT_SYMBOL_GPL(cpu_idle_wait); void __attribute__((noreturn)) -cpu_idle (void *unused) +cpu_idle (void) { void (*mark_idle)(int) = ia64_mark_idle; int cpu = smp_processor_id(); diff -puN arch/ia64/kernel/smpboot.c~fix-conflicting-cpu_idle-declarations arch/ia64/kernel/smpboot.c --- 25/arch/ia64/kernel/smpboot.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.964834048 -0800 +++ 25-akpm/arch/ia64/kernel/smpboot.c 2004-12-27 09:36:37.020825536 -0800 @@ -343,8 +343,6 @@ smp_callin (void) int __devinit start_secondary (void *unused) { - extern int cpu_idle (void); - /* Early console may use I/O ports */ ia64_set_kr(IA64_KR_IO_BASE, __pa(ia64_iobase)); @@ -353,7 +351,8 @@ start_secondary (void *unused) cpu_init(); smp_callin(); - return cpu_idle(); + cpu_idle(); + return 0; } struct pt_regs * __devinit idle_regs(struct pt_regs *regs) diff -puN arch/m32r/kernel/smpboot.c~fix-conflicting-cpu_idle-declarations arch/m32r/kernel/smpboot.c --- 25/arch/m32r/kernel/smpboot.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.966833744 -0800 +++ 25-akpm/arch/m32r/kernel/smpboot.c 2004-12-27 09:36:37.025824776 -0800 @@ -58,7 +58,6 @@ #define Dprintk(x...) #endif -extern int cpu_idle(void); extern cpumask_t cpu_initialized; /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ @@ -443,7 +442,8 @@ int __init start_secondary(void *unused) */ local_flush_tlb_all(); - return cpu_idle(); + cpu_idle(); + return 0; } /*==========================================================================* diff -puN arch/parisc/kernel/smp.c~fix-conflicting-cpu_idle-declarations arch/parisc/kernel/smp.c --- 25/arch/parisc/kernel/smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.967833592 -0800 +++ 25-akpm/arch/parisc/kernel/smp.c 2004-12-27 09:36:37.027824472 -0800 @@ -459,7 +459,6 @@ smp_cpu_init(int cpunum) */ void __init smp_callin(void) { - extern void cpu_idle(void); /* arch/parisc/kernel/process.c */ int slave_id = cpu_now_booting; #if 0 void *istack; diff -puN arch/ppc64/kernel/idle.c~fix-conflicting-cpu_idle-declarations arch/ppc64/kernel/idle.c --- 25/arch/ppc64/kernel/idle.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.969833288 -0800 +++ 25-akpm/arch/ppc64/kernel/idle.c 2004-12-27 09:36:37.016826144 -0800 @@ -298,10 +298,9 @@ static int native_idle(void) #endif /* CONFIG_PPC_ISERIES */ -int cpu_idle(void) +void cpu_idle(void) { idle_loop(); - return 0; } int powersave_nap; diff -puN arch/ppc64/kernel/smp.c~fix-conflicting-cpu_idle-declarations arch/ppc64/kernel/smp.c --- 25/arch/ppc64/kernel/smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.970833136 -0800 +++ 25-akpm/arch/ppc64/kernel/smp.c 2004-12-27 09:36:37.015826296 -0800 @@ -74,7 +74,6 @@ static volatile unsigned int cpu_callin_ extern unsigned char stab_array[]; -extern int cpu_idle(void *unused); void smp_call_function_interrupt(void); int smt_enabled_at_boot = 1; @@ -523,7 +522,8 @@ int __devinit start_secondary(void *unus local_irq_enable(); - return cpu_idle(NULL); + cpu_idle(); + return 0; } int setup_profiling_timer(unsigned int multiplier) diff -puN arch/ppc/kernel/idle.c~fix-conflicting-cpu_idle-declarations arch/ppc/kernel/idle.c --- 25/arch/ppc/kernel/idle.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.971832984 -0800 +++ 25-akpm/arch/ppc/kernel/idle.c 2004-12-27 09:36:37.014826448 -0800 @@ -57,14 +57,13 @@ void default_idle(void) /* * The body of the idle task. */ -int cpu_idle(void) +void cpu_idle(void) { for (;;) if (ppc_md.idle != NULL) ppc_md.idle(); else default_idle(); - return 0; } #if defined(CONFIG_SYSCTL) && defined(CONFIG_6xx) diff -puN arch/ppc/kernel/smp.c~fix-conflicting-cpu_idle-declarations arch/ppc/kernel/smp.c --- 25/arch/ppc/kernel/smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.973832680 -0800 +++ 25-akpm/arch/ppc/kernel/smp.c 2004-12-27 09:36:37.014826448 -0800 @@ -60,7 +60,6 @@ static struct smp_ops_t *smp_ops; volatile unsigned long cpu_callin_map[NR_CPUS]; int start_secondary(void *); -extern int cpu_idle(void *unused); void smp_call_function_interrupt(void); static int __smp_call_function(void (*func) (void *info), void *info, int wait, int target); @@ -358,7 +357,8 @@ int __devinit start_secondary(void *unus smp_ops->take_timebase(); printk("CPU %i done timebase take...\n", cpu); - return cpu_idle(NULL); + cpu_idle(); + return 0; } int __cpu_up(unsigned int cpu) diff -puN arch/s390/kernel/process.c~fix-conflicting-cpu_idle-declarations arch/s390/kernel/process.c --- 25/arch/s390/kernel/process.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.974832528 -0800 +++ 25-akpm/arch/s390/kernel/process.c 2004-12-27 09:36:37.023825080 -0800 @@ -159,11 +159,10 @@ void default_idle(void) #endif /* CONFIG_ARCH_S390X */ } -int cpu_idle(void) +void cpu_idle(void) { for (;;) default_idle(); - return 0; } void show_regs(struct pt_regs *regs) diff -puN arch/s390/kernel/smp.c~fix-conflicting-cpu_idle-declarations arch/s390/kernel/smp.c --- 25/arch/s390/kernel/smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.975832376 -0800 +++ 25-akpm/arch/s390/kernel/smp.c 2004-12-27 09:36:37.024824928 -0800 @@ -42,7 +42,6 @@ #include /* prototypes */ -extern int cpu_idle(void * unused); extern volatile int __cpu_logical_map[]; @@ -557,7 +556,8 @@ int __devinit start_secondary(void *cpuv /* Print info about this processor */ print_cpu_info(&S390_lowcore.cpu_data); /* cpu_idle will call schedule for us */ - return cpu_idle(NULL); + cpu_idle(); + return 0; } static void __init smp_create_idle(unsigned int cpu) diff -puN arch/sh64/kernel/process.c~fix-conflicting-cpu_idle-declarations arch/sh64/kernel/process.c --- 25/arch/sh64/kernel/process.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.994829488 -0800 +++ 25-akpm/arch/sh64/kernel/process.c 2004-12-27 09:36:37.022825232 -0800 @@ -338,7 +338,7 @@ void default_idle(void) } } -void cpu_idle(void *unused) +void cpu_idle(void) { default_idle(); } diff -puN arch/sh/kernel/process.c~fix-conflicting-cpu_idle-declarations arch/sh/kernel/process.c --- 25/arch/sh/kernel/process.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.995829336 -0800 +++ 25-akpm/arch/sh/kernel/process.c 2004-12-27 09:36:37.019825688 -0800 @@ -68,7 +68,7 @@ void default_idle(void) } } -void cpu_idle(void *unused) +void cpu_idle(void) { default_idle(); } diff -puN arch/sh/kernel/smp.c~fix-conflicting-cpu_idle-declarations arch/sh/kernel/smp.c --- 25/arch/sh/kernel/smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.996829184 -0800 +++ 25-akpm/arch/sh/kernel/smp.c 2004-12-27 09:36:37.020825536 -0800 @@ -37,7 +37,6 @@ int smp_threads_ready = 0; struct sh_cpuinfo cpu_data[NR_CPUS]; -extern int cpu_idle(void *unused); extern void per_cpu_trap_init(void); cpumask_t cpu_possible_map; @@ -124,7 +123,8 @@ int start_secondary(void *unused) atomic_inc(&cpus_booted); - return cpu_idle(0); + cpu_idle(); + return 0; } void __init smp_cpus_done(unsigned int max_cpus) diff -puN arch/sparc64/kernel/process.c~fix-conflicting-cpu_idle-declarations arch/sparc64/kernel/process.c --- 25/arch/sparc64/kernel/process.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.998828880 -0800 +++ 25-akpm/arch/sparc64/kernel/process.c 2004-12-27 09:36:37.019825688 -0800 @@ -60,10 +60,10 @@ void default_idle(void) /* * the idle loop on a Sparc... ;) */ -int cpu_idle(void) +void cpu_idle(void) { if (current->pid != 0) - return -EPERM; + return; /* endless idle loop with no priority at all */ for (;;) { @@ -80,7 +80,7 @@ int cpu_idle(void) schedule(); check_pgt_cache(); } - return 0; + return; } #else @@ -90,7 +90,7 @@ int cpu_idle(void) */ #define idle_me_harder() (cpu_data(smp_processor_id()).idle_volume += 1) #define unidle_me() (cpu_data(smp_processor_id()).idle_volume = 0) -int cpu_idle(void) +void cpu_idle(void) { set_thread_flag(TIF_POLLING_NRFLAG); while(1) { diff -puN arch/sparc/kernel/process.c~fix-conflicting-cpu_idle-declarations arch/sparc/kernel/process.c --- 25/arch/sparc/kernel/process.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:36.999828728 -0800 +++ 25-akpm/arch/sparc/kernel/process.c 2004-12-27 09:36:37.018825840 -0800 @@ -81,10 +81,8 @@ void default_idle(void) /* * the idle loop on a Sparc... ;) */ -int cpu_idle(void) +void cpu_idle(void) { - int ret = -EPERM; - if (current->pid != 0) goto out; @@ -128,15 +126,14 @@ int cpu_idle(void) schedule(); check_pgt_cache(); } - ret = 0; out: - return ret; + return; } #else /* This is being executed in task 0 'user space'. */ -int cpu_idle(void) +void cpu_idle(void) { /* endless idle loop with no priority at all */ while(1) { diff -puN arch/sparc/kernel/sun4d_smp.c~fix-conflicting-cpu_idle-declarations arch/sparc/kernel/sun4d_smp.c --- 25/arch/sparc/kernel/sun4d_smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:37.001828424 -0800 +++ 25-akpm/arch/sparc/kernel/sun4d_smp.c 2004-12-27 09:36:37.016826144 -0800 @@ -145,7 +145,6 @@ void __init smp4d_callin(void) spin_unlock_irqrestore(&sun4d_imsk_lock, flags); } -extern int cpu_idle(void *unused); extern void init_IRQ(void); extern void cpu_panic(void); diff -puN arch/sparc/kernel/sun4m_smp.c~fix-conflicting-cpu_idle-declarations arch/sparc/kernel/sun4m_smp.c --- 25/arch/sparc/kernel/sun4m_smp.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:37.002828272 -0800 +++ 25-akpm/arch/sparc/kernel/sun4m_smp.c 2004-12-27 09:36:37.017825992 -0800 @@ -121,7 +121,6 @@ void __init smp4m_callin(void) local_irq_enable(); } -extern int cpu_idle(void *unused); extern void init_IRQ(void); extern void cpu_panic(void); diff -puN include/asm-x86_64/proto.h~fix-conflicting-cpu_idle-declarations include/asm-x86_64/proto.h --- 25/include/asm-x86_64/proto.h~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:37.003828120 -0800 +++ 25-akpm/include/asm-x86_64/proto.h 2004-12-27 09:36:52.851418920 -0800 @@ -25,7 +25,6 @@ extern void ia32_syscall(void); extern void ia32_cstar_target(void); extern void ia32_sysenter_target(void); -extern void cpu_idle(void); extern void config_acpi_tables(void); extern void ia32_syscall(void); extern void iommu_hole_init(void); diff -puN include/linux/smp.h~fix-conflicting-cpu_idle-declarations include/linux/smp.h --- 25/include/linux/smp.h~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:37.005827816 -0800 +++ 25-akpm/include/linux/smp.h 2004-12-27 09:36:37.010827056 -0800 @@ -8,6 +8,8 @@ #include +extern void cpu_idle(void); + #ifdef CONFIG_SMP #include diff -puN init/main.c~fix-conflicting-cpu_idle-declarations init/main.c --- 25/init/main.c~fix-conflicting-cpu_idle-declarations 2004-12-27 09:36:37.006827664 -0800 +++ 25-akpm/init/main.c 2004-12-27 09:36:37.011826904 -0800 @@ -288,7 +288,6 @@ static int __init init_setup(char *str) __setup("init=", init_setup); extern void setup_arch(char **); -extern void cpu_idle(void); #ifndef CONFIG_SMP _