fix conflicting cpu_idle() declarations
Subsystems (5)
PATCH 1/1 fix conflicting cpu_idle() declarations
cpu_idle() 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.
diffstat output:
arch/alpha/kernel/proto.h | 3 --- arch/i386/kernel/smpboot.c | 6 ++---- arch/i386/mach-voyager/voyager_smp.c | 5 ++--- arch/ia64/kernel/process.c | 2 +- arch/ia64/kernel/smpboot.c | 5 ++--- arch/m32r/kernel/smpboot.c | 4 ++-- arch/parisc/kernel/smp.c | 1 - arch/ppc/kernel/idle.c | 3 +-- arch/ppc/kernel/smp.c | 4 ++-- arch/ppc64/kernel/idle.c | 3 +-- arch/ppc64/kernel/smp.c | 4 ++-- arch/s390/kernel/process.c | 3 +-- arch/s390/kernel/smp.c | 4 ++-- arch/sh/kernel/process.c | 2 +- arch/sh/kernel/smp.c | 4 ++-- arch/sh64/kernel/process.c | 2 +- arch/sparc/kernel/process.c | 9 +++------ arch/sparc/kernel/sun4d_smp.c | 1 - arch/sparc/kernel/sun4m_smp.c | 1 - arch/sparc64/kernel/process.c | 8 ++++---- include/asm-x86_64/proto.h | 1 - include/linux/smp.h | 2 ++ init/main.c | 1 - 23 files changed, 31 insertions(+), 47 deletions(-)
include/linux/smp.h renamed from include/linux/smp.h~1_common +2 -0
@@ -8,6 +8,8 @@#include <linux/config.h> +extern void cpu_idle (void ); +#ifdef CONFIG_SMP #include <linux/preempt.h>
init/main.c renamed from init/main.c~1_common +0 -1
@@ -359,7 +359,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
arch/i386/kernel/smpboot.c renamed from arch/i386/kernel/smpboot.c~2_i386 +2 -4
@@ -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 (); }/*
arch/i386/mach-voyager/voyager_smp.c renamed from arch/i386/mach-voyager/voyager_smp.c~2_i386 +2 -3
@@ -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 (); }
arch/ppc/kernel/idle.c renamed from arch/ppc/kernel/idle.c~3_ppc +1 -2
@@ -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)
arch/ppc/kernel/smp.c renamed from arch/ppc/kernel/smp.c~3_ppc +2 -2
@@ -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)
arch/ppc64/kernel/smp.c renamed from arch/ppc64/kernel/smp.c~4_ppc64 +2 -2
@@ -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 *unuslocal_irq_enable (); -return cpu_idle (NULL ); +cpu_idle (); +return 0 ; }int setup_profiling_timer (unsigned int multiplier)
arch/ppc64/kernel/idle.c renamed from arch/ppc64/kernel/idle.c~4_ppc64 +1 -2
@@ -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;
arch/sparc/kernel/sun4d_smp.c renamed from arch/sparc/kernel/sun4d_smp.c~5_sparc +0 -1
@@ -146,7 +146,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 );
arch/sparc/kernel/sun4m_smp.c renamed from arch/sparc/kernel/sun4m_smp.c~5_sparc +0 -1
@@ -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 );
arch/sparc/kernel/process.c renamed from arch/sparc/kernel/process.c~5_sparc +3 -6
@@ -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 ) {
arch/sparc64/kernel/process.c renamed from arch/sparc64/kernel/process.c~6_sparc64 +4 -4
@@ -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 ) {
arch/sh/kernel/process.c renamed from arch/sh/kernel/process.c~7_sh +1 -1
@@ -68,7 +68,7 @@ void default_idle(void) } } -void cpu_idle (void *unused) +void cpu_idle (void ) {default_idle (); }
arch/sh/kernel/smp.c renamed from arch/sh/kernel/smp.c~7_sh +2 -2
@@ -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)
arch/ia64/kernel/smpboot.c renamed from arch/ia64/kernel/smpboot.c~8_ia64 +2 -3
@@ -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)
arch/ia64/kernel/process.c renamed from arch/ia64/kernel/process.c~8_ia64 +1 -1
@@ -226,7 +226,7 @@ static inline void play_dead(void)#endif /* CONFIG_HOTPLUG_CPU */ void __attribute__((noreturn)) -cpu_idle (void *unused) +cpu_idle (void ) {void (*mark_idle)(int ) = ia64_mark_idle;
arch/sh64/kernel/process.c renamed from arch/sh64/kernel/process.c~9_sh64 +1 -1
@@ -338,7 +338,7 @@ void default_idle(void) } } -void cpu_idle (void *unused) +void cpu_idle (void ) {default_idle (); }
arch/s390/kernel/process.c renamed from arch/s390/kernel/process.c~10_s390 +1 -2
@@ -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)
arch/s390/kernel/smp.c renamed from arch/s390/kernel/smp.c~10_s390 +2 -2
@@ -42,7 +42,6 @@#include <asm/tlbflush.h> /* 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)
arch/m32r/kernel/smpboot.c renamed from arch/m32r/kernel/smpboot.c~11_m32 +2 -2
@@ -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 ; }/*==========================================================================*
include/asm-x86_64/proto.h renamed from include/asm-x86_64/proto.h~12_x86_64 +0 -1
@@ -26,7 +26,6 @@ extern void ia32_cstar_target(void);extern void ia32_sysenter_target (void );extern void calibrate_delay (void ); -extern void cpu_idle (void );extern void config_acpi_tables (void );extern void ia32_syscall (void );extern void iommu_hole_init (void );
arch/alpha/kernel/proto.h renamed from arch/alpha/kernel/proto.h~13_alpha +0 -3
@@ -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);
arch/parisc/kernel/smp.c renamed from arch/parisc/kernel/smp.c~14_parisc +0 -1
@@ -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;
Quoted 7 lines · Oleg Nesterov
cpu_idle()declared/defined ininit/main.c: voidcpu_idle(void)i386/kernel/process.cvoidcpu_idle(void)i386/kernel/smpboot.c: intcpu_idle(void)i386/mach-voyager/voyager_smp.c: intcpu_idle(void)ppc/kernel/idle.c: intcpu_idle(void)ppc/kernel/smp.c: intcpu_idle(void *unused)
Quoted 8 lines
ppc64/kernel/idle.c: intcpu_idle(void)ppc64/kernel/smp.c: intcpu_idle(void *unused)sparc/kernel/process.c: intcpu_idle(void)sparc64/kernel/process.c: intcpu_idle(void)sh/kernel/process.c: voidcpu_idle(void *unused)sh/kernel/smp.c: intcpu_idle(void *unused)ia64/kernel/smpboot.c: intcpu_idle(void)ia64/kernel/process.c: voidcpu_idle(void *unused)
It's remarkable that several arches are internally inconsistent. Anyway, this will likely be a shoo-in, as it removes more code than it adds. The mess surrounding cpu_idle() has been aggravating for some time.
-- wli
PATCH 1/1 fix sparc64 cpu_idle()
Quoted 17 lines · William Lee Irwin III
Quoted 15 lines · Oleg Nesterov
cpu_idle()declared/defined ininit/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)
Quoted 3 lines
It's remarkable that several arches are internally inconsistent. Anyway, this will likely be a shoo-in, as it removes more code than it adds. The mess surrounding
cpu_idle()has been aggravating for some time.
It's not flexible to enforce 'void cpu_idle(void)' all over. What If someday someone would want cpu_idle() to return value for some arch.
Currently sparch64's UP cpu_idel() returns -EPERM. This is paranoia.
diff -Nurp 2.6.10/arch/sparc64/kernel/process.c2.6.10-cy/arch/sparc64/kernel/process.c
arch/sparc64/kernel/process.c +1 -5
@@ -60,11 +60,8 @@ void default_idle(void)/* * the idle loop on a Sparc... ;) */ -int cpu_idle (void ) +void cpu_idle (void ) { -if (current->pid !=0 ) -return -EPERM ; -/* endless idle loop with no priority at all */ for (;;) {/* If current->work.need_resched is zero we should really
@@ -80,7 +77,6 @@ int cpu_idle(void)schedule (); check_pgt_cache(); } -return 0 ; }#else
Signature · 2 lines
Coywolf Qi Hunt Homepage http://sosdg.org/~coywolf/
Re: [patch] fix sparc64 cpu_idle()
Currently sparc and sparc64's UP cpu_idel() checks current pid. This is paranoia.
sparc/kernel/process.c | 10 +--------- sparc64/kernel/process.c | 6 +----- 2 files changed, 2 insertions(+), 14 deletions(-)
diff -Nurp 2.6.10/arch/sparc/kernel/process.c2.6.10-cy/arch/sparc/kernel/process.c
arch/sparc/kernel/process.c +1 -9
@@ -81,13 +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; -/* endless idle loop with no priority at all */ for (;;) {if (ARCH_SUN4C_SUN4 ) {
@@ -128,9 +123,6 @@ int cpu_idle(void)schedule (); check_pgt_cache(); } - ret =0 ; -out: -return ret; }#else
diff -Nurp 2.6.10/arch/sparc64/kernel/process.c2.6.10-cy/arch/sparc64/kernel/process.c
arch/sparc64/kernel/process.c +1 -5
@@ -60,11 +60,8 @@ void default_idle(void)/* * the idle loop on a Sparc... ;) */ -int cpu_idle (void ) +void cpu_idle (void ) { -if (current->pid !=0 ) -return -EPERM ; -/* endless idle loop with no priority at all */ for (;;) {/* If current->work.need_resched is zero we should really
@@ -80,7 +77,6 @@ int cpu_idle(void)schedule (); check_pgt_cache(); } -return 0 ; }#else
Signature · 2 lines
Coywolf Qi Hunt Homepage http://sosdg.org/~coywolf/
Re: [patch] fix sparc64 cpu_idle()
(cc: list trimmed)
arch/sparc/kernel/process.c void default_idle(void) · line 90
Quoted 5 lines · Coywolf Qi Hunt
arch/sparc/kernel/process.c +0
-5-int ret = -EPERM ; - -if (current->pid !=0 ) - goto out; -
Maybe just a WARN_ON(current->pid != 0) would be a good compromise... I imagine that someone added the check for some reason but you're right that just returning an error code (that presumably noone checks, right?) doesn't make much sense
-Mitch
Re: [patch] fix sparc64 cpu_idle()
In reply to Coywolf Qi HuntQuoted 4 lines · Coywolf Qi Hunt
It's not flexible to enforce 'void
cpu_idle(void)' all over. What If someday someone would want to return value for some arch.
May be you are right, but i can't imagine what could be done after return from cpu_idle() except panic(). cpu_idle() is the last call in start_kernel().
Oleg.
Hello,
From: Oleg Nesterov <[email protected]>
Date: Mon, 27 Dec 2004 19:51:07 +0300
Quoted 7 lines
Hello.
I am sorry, i misspelled your email in cc list.
Could you please check
arch/m32r/part?Oleg.
I think it is OK for m32r.
BTW, you moved the definition of cpu_idle() to smp.h. It may not be included from arch/*/process.c in some archs. Is it OK?
Thank you.
-- Takata
Quoted 4 lines · Hirokazu Takata
I think it is OK for m32r.
BTW, you moved the definition ofcpu_idle()tosmp.h. It may not be included fromarch/*/process.cin some archs. Is it OK?
It should be okay to include even on UP-only arches, IIRC it has stubs for UP versions of various locking primitives etc. used widely throughout the kernel.
-- wli
James Bottomley
maintainerQuoted 7 lines · Oleg Nesterov
cpu_idle()declared/defined in
init/main.c: voidcpu_idle(void)
i386/kernel/process.cvoidcpu_idle(void)i386/kernel/smpboot.c: intcpu_idle(void)i386/mach-voyager/voyager_smp.c: intcpu_idle(void)
Patch looks good. This bit applies and compiles and boots fine on my voyager.
James