* [patch, -rc6] x86_64: UP build fixes
@ 2006-11-16 8:48 Ingo Molnar
2006-11-16 8:58 ` Andrew Morton
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Ingo Molnar @ 2006-11-16 8:48 UTC (permalink / raw)
To: Andrew Morton; +Cc: Andi Kleen, Linus Torvalds, linux-kernel
Subject: x86_64: UP build fixes
From: Ingo Molnar <mingo@elte.hu>
x86_64 does not build cleanly on UP:
arch/x86_64/kernel/vsyscall.c: In function 'cpu_vsyscall_notifier':
arch/x86_64/kernel/vsyscall.c:282: warning: implicit declaration of function 'smp_call_function_single'
arch/x86_64/kernel/vsyscall.c: At top level:
arch/x86_64/kernel/vsyscall.c:279: warning: 'cpu_vsyscall_notifier' defined but not used
this patch fixes it.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
include/asm-x86_64/smp.h | 11 ++---------
include/linux/cpu.h | 2 +-
include/linux/smp.h | 9 +++++++++
3 files changed, 12 insertions(+), 10 deletions(-)
Index: linux/include/asm-x86_64/smp.h
===================================================================
--- linux.orig/include/asm-x86_64/smp.h
+++ linux/include/asm-x86_64/smp.h
@@ -115,16 +115,9 @@ static __inline int logical_smp_processo
}
#ifdef CONFIG_SMP
-#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu]
+# define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu]
#else
-#define cpu_physical_id(cpu) boot_cpu_id
-static inline int smp_call_function_single(int cpuid, void (*func) (void *info),
- void *info, int retry, int wait)
-{
- /* Disable interrupts here? */
- func(info);
- return 0;
-}
+# define cpu_physical_id(cpu) boot_cpu_id
#endif /* !CONFIG_SMP */
#endif
Index: linux/include/linux/cpu.h
===================================================================
--- linux.orig/include/linux/cpu.h
+++ linux/include/linux/cpu.h
@@ -81,7 +81,7 @@ int cpu_down(unsigned int cpu);
#define lock_cpu_hotplug() do { } while (0)
#define unlock_cpu_hotplug() do { } while (0)
#define lock_cpu_hotplug_interruptible() 0
-#define hotcpu_notifier(fn, pri) do { } while (0)
+#define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0)
#define register_hotcpu_notifier(nb) do { } while (0)
#define unregister_hotcpu_notifier(nb) do { } while (0)
Index: linux/include/linux/smp.h
===================================================================
--- linux.orig/include/linux/smp.h
+++ linux/include/linux/smp.h
@@ -100,6 +100,15 @@ static inline void smp_send_reschedule(i
#define num_booting_cpus() 1
#define smp_prepare_boot_cpu() do {} while (0)
+static inline int
+smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
+ int retry, int wait)
+{
+ func(info);
+
+ return 0;
+}
+
#endif /* !SMP */
/*
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 8:48 [patch, -rc6] x86_64: UP build fixes Ingo Molnar @ 2006-11-16 8:58 ` Andrew Morton 2006-11-16 9:28 ` Ingo Molnar 2006-11-16 9:01 ` Andi Kleen 2006-11-16 9:03 ` Ingo Molnar 2 siblings, 1 reply; 16+ messages in thread From: Andrew Morton @ 2006-11-16 8:58 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andi Kleen, Linus Torvalds, linux-kernel On Thu, 16 Nov 2006 09:48:55 +0100 Ingo Molnar <mingo@elte.hu> wrote: > +static inline int > +smp_call_function_single(int cpuid, void (*func) (void *info), void *info, > + int retry, int wait) > +{ > + func(info); > + > + return 0; > +} > + Given that on SMP the function is called with local interrupts disabled, I'd suggest that it should be called with local interrupts disabled on UP as well. on_each_cpu() does this and one caller (at least) relies upon it (invalidate_bh_lrus(), iirc). ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 8:58 ` Andrew Morton @ 2006-11-16 9:28 ` Ingo Molnar 2006-11-16 9:45 ` Ingo Molnar 0 siblings, 1 reply; 16+ messages in thread From: Ingo Molnar @ 2006-11-16 9:28 UTC (permalink / raw) To: Andrew Morton; +Cc: Andi Kleen, Linus Torvalds, linux-kernel * Andrew Morton <akpm@osdl.org> wrote: > On Thu, 16 Nov 2006 09:48:55 +0100 > Ingo Molnar <mingo@elte.hu> wrote: > > > +static inline int > > +smp_call_function_single(int cpuid, void (*func) (void *info), void *info, > > + int retry, int wait) > > +{ > > + func(info); > > + > > + return 0; > > +} > > + > > Given that on SMP the function is called with local interrupts > disabled, I'd suggest that it should be called with local interrupts > disabled on UP as well. > > on_each_cpu() does this and one caller (at least) relies upon it > (invalidate_bh_lrus(), iirc). ok, fair enough. Then this is a (minor) bugfix as well. Ingo ---------------> Subject: x86_64: build fixes From: Ingo Molnar <mingo@elte.hu> x86_64 does not build cleanly on UP: arch/x86_64/kernel/vsyscall.c: In function 'cpu_vsyscall_notifier': arch/x86_64/kernel/vsyscall.c:282: warning: implicit declaration of function 'smp_call_function_single' arch/x86_64/kernel/vsyscall.c: At top level: arch/x86_64/kernel/vsyscall.c:279: warning: 'cpu_vsyscall_notifier' defined but not used this patch fixes it. Signed-off-by: Ingo Molnar <mingo@elte.hu> --- include/asm-x86_64/smp.h | 11 ++--------- include/linux/smp.h | 13 +++++++++++++ 2 files changed, 15 insertions(+), 9 deletions(-) Index: linux/include/asm-x86_64/smp.h =================================================================== --- linux.orig/include/asm-x86_64/smp.h +++ linux/include/asm-x86_64/smp.h @@ -115,16 +115,9 @@ static __inline int logical_smp_processo } #ifdef CONFIG_SMP -#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] +# define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] #else -#define cpu_physical_id(cpu) boot_cpu_id -static inline int smp_call_function_single(int cpuid, void (*func) (void *info), - void *info, int retry, int wait) -{ - /* Disable interrupts here? */ - func(info); - return 0; -} +# define cpu_physical_id(cpu) boot_cpu_id #endif /* !CONFIG_SMP */ #endif Index: linux/include/linux/smp.h =================================================================== --- linux.orig/include/linux/smp.h +++ linux/include/linux/smp.h @@ -100,6 +100,19 @@ static inline void smp_send_reschedule(i #define num_booting_cpus() 1 #define smp_prepare_boot_cpu() do {} while (0) +static inline int +smp_call_function_single(int cpuid, void (*func) (void *info), void *info, + int retry, int wait) +{ + unsigned long flags; + + local_irq_save(flags); + func(info); + local_irq_restore(flags); + + return 0; +} + #endif /* !SMP */ /* ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 9:28 ` Ingo Molnar @ 2006-11-16 9:45 ` Ingo Molnar 0 siblings, 0 replies; 16+ messages in thread From: Ingo Molnar @ 2006-11-16 9:45 UTC (permalink / raw) To: Andrew Morton; +Cc: Andi Kleen, Linus Torvalds, linux-kernel * Ingo Molnar <mingo@elte.hu> wrote: > > on_each_cpu() does this and one caller (at least) relies upon it > > (invalidate_bh_lrus(), iirc). > > ok, fair enough. Then this is a (minor) bugfix as well. ok, this doesnt build on some configs - so the replacement patch below moves the UP variant to a function (which makes sense anyway). Ingo ---------------> Subject: x86_64: build fixes From: Ingo Molnar <mingo@elte.hu> x86_64 does not build cleanly on UP: arch/x86_64/kernel/vsyscall.c: In function 'cpu_vsyscall_notifier': arch/x86_64/kernel/vsyscall.c:282: warning: implicit declaration of function 'smp_call_function_single' arch/x86_64/kernel/vsyscall.c: At top level: arch/x86_64/kernel/vsyscall.c:279: warning: 'cpu_vsyscall_notifier' defined but not used this patch fixes it by making smp_call_function_single() globally available. Signed-off-by: Ingo Molnar <mingo@elte.hu> --- include/asm-x86_64/smp.h | 11 ++--------- include/linux/smp.h | 10 +++++++--- kernel/sched.c | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) Index: linux/include/asm-x86_64/smp.h =================================================================== --- linux.orig/include/asm-x86_64/smp.h +++ linux/include/asm-x86_64/smp.h @@ -115,16 +115,9 @@ static __inline int logical_smp_processo } #ifdef CONFIG_SMP -#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] +# define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] #else -#define cpu_physical_id(cpu) boot_cpu_id -static inline int smp_call_function_single(int cpuid, void (*func) (void *info), - void *info, int retry, int wait) -{ - /* Disable interrupts here? */ - func(info); - return 0; -} +# define cpu_physical_id(cpu) boot_cpu_id #endif /* !CONFIG_SMP */ #endif Index: linux/include/linux/smp.h =================================================================== --- linux.orig/include/linux/smp.h +++ linux/include/linux/smp.h @@ -53,9 +53,6 @@ extern void smp_cpus_done(unsigned int m */ int smp_call_function(void(*func)(void *info), void *info, int retry, int wait); -int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, - int retry, int wait); - /* * Call a function on all processors */ @@ -103,6 +100,13 @@ static inline void smp_send_reschedule(i #endif /* !SMP */ /* + * Call a function on a specific CPU (on UP the function gets executed + * on the current CPU, immediately): + */ +int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, + int retry, int wait); + +/* * smp_processor_id(): get the current CPU ID. * * if DEBUG_PREEMPT is enabled the we check whether it is Index: linux/kernel/sched.c =================================================================== --- linux.orig/kernel/sched.c +++ linux/kernel/sched.c @@ -1110,6 +1110,25 @@ repeat: task_rq_unlock(rq, &flags); } +#ifndef CONFIG_SMP +/* + * Call a function on a specific CPU (on UP the function gets executed + * on the current CPU, immediately): + */ +int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, + int retry, int wait) +{ + unsigned long flags; + + local_irq_save(flags); + func(info); + local_irq_restore(flags); + + return 0; +} +EXPORT_SYMBOL(smp_call_function_single); +#endif + /*** * kick_process - kick a running thread to enter/exit the kernel * @p: the to-be-kicked thread ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 8:48 [patch, -rc6] x86_64: UP build fixes Ingo Molnar 2006-11-16 8:58 ` Andrew Morton @ 2006-11-16 9:01 ` Andi Kleen 2006-11-16 9:17 ` Andrew Morton 2006-11-16 9:03 ` Ingo Molnar 2 siblings, 1 reply; 16+ messages in thread From: Andi Kleen @ 2006-11-16 9:01 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Linus Torvalds, linux-kernel On Thursday 16 November 2006 09:48, Ingo Molnar wrote: > arch/x86_64/kernel/vsyscall.c: In function 'cpu_vsyscall_notifier': > arch/x86_64/kernel/vsyscall.c:282: warning: implicit declaration of function 'smp_call_function_single' > arch/x86_64/kernel/vsyscall.c: At top level: > arch/x86_64/kernel/vsyscall.c:279: warning: 'cpu_vsyscall_notifier' defined but not used Oops. My fault indeed. Here's a simpler patch to fix it. -Andi Fix vsyscall.c compilation on UP Broken by earlier patch by me. Index: linux/arch/x86_64/kernel/vsyscall.c =================================================================== --- linux.orig/arch/x86_64/kernel/vsyscall.c +++ linux/arch/x86_64/kernel/vsyscall.c @@ -274,6 +274,7 @@ static void __cpuinit cpu_vsyscall_init( vsyscall_set_cpu(raw_smp_processor_id()); } +#ifdef CONFIG_HOTPLUG_CPU static int __cpuinit cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg) { @@ -282,6 +283,7 @@ cpu_vsyscall_notifier(struct notifier_bl smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1); return NOTIFY_DONE; } +#endif static void __init map_vsyscall(void) { @@ -303,7 +305,9 @@ static int __init vsyscall_init(void) register_sysctl_table(kernel_root_table2, 0); #endif on_each_cpu(cpu_vsyscall_init, NULL, 0, 1); +#ifdef CONFIG_HOTPLUG_CPU hotcpu_notifier(cpu_vsyscall_notifier, 0); +#endif return 0; } ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 9:01 ` Andi Kleen @ 2006-11-16 9:17 ` Andrew Morton 2006-11-16 9:22 ` Andi Kleen 0 siblings, 1 reply; 16+ messages in thread From: Andrew Morton @ 2006-11-16 9:17 UTC (permalink / raw) To: Andi Kleen; +Cc: Ingo Molnar, Linus Torvalds, linux-kernel On Thu, 16 Nov 2006 10:01:01 +0100 Andi Kleen <ak@suse.de> wrote: > +#ifdef CONFIG_HOTPLUG_CPU > hotcpu_notifier(cpu_vsyscall_notifier, 0); > +#endif this part isn't needed - the definition handles that. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 9:17 ` Andrew Morton @ 2006-11-16 9:22 ` Andi Kleen 2006-11-16 9:48 ` Ingo Molnar 0 siblings, 1 reply; 16+ messages in thread From: Andi Kleen @ 2006-11-16 9:22 UTC (permalink / raw) To: Andrew Morton; +Cc: Ingo Molnar, Linus Torvalds, linux-kernel On Thursday 16 November 2006 10:17, Andrew Morton wrote: > On Thu, 16 Nov 2006 10:01:01 +0100 > Andi Kleen <ak@suse.de> wrote: > > > +#ifdef CONFIG_HOTPLUG_CPU > > hotcpu_notifier(cpu_vsyscall_notifier, 0); > > +#endif > > this part isn't needed - the definition handles that. Thanks. Updated patch appended. -Andi Fix vsyscall.c compilation on UP Broken by earlier patch by me. Signed-off-by: Andi Kleen <ak@suse.de> Index: linux/arch/x86_64/kernel/vsyscall.c =================================================================== --- linux.orig/arch/x86_64/kernel/vsyscall.c +++ linux/arch/x86_64/kernel/vsyscall.c @@ -274,6 +274,7 @@ static void __cpuinit cpu_vsyscall_init( vsyscall_set_cpu(raw_smp_processor_id()); } +#ifdef CONFIG_HOTPLUG_CPU static int __cpuinit cpu_vsyscall_notifier(struct notifier_block *n, unsigned long action, void *arg) { @@ -282,6 +283,7 @@ cpu_vsyscall_notifier(struct notifier_bl smp_call_function_single(cpu, cpu_vsyscall_init, NULL, 0, 1); return NOTIFY_DONE; } +#endif static void __init map_vsyscall(void) { ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 9:22 ` Andi Kleen @ 2006-11-16 9:48 ` Ingo Molnar 2006-11-16 10:09 ` Andi Kleen 0 siblings, 1 reply; 16+ messages in thread From: Ingo Molnar @ 2006-11-16 9:48 UTC (permalink / raw) To: Andi Kleen; +Cc: Andrew Morton, Linus Torvalds, linux-kernel * Andi Kleen <ak@suse.de> wrote: > On Thursday 16 November 2006 10:17, Andrew Morton wrote: > > On Thu, 16 Nov 2006 10:01:01 +0100 > > Andi Kleen <ak@suse.de> wrote: > > > > > +#ifdef CONFIG_HOTPLUG_CPU > > > hotcpu_notifier(cpu_vsyscall_notifier, 0); > > > +#endif > > > > this part isn't needed - the definition handles that. > > Thanks. Updated patch appended. my hotplug-CPU cleanup patch solves this in a cleaner way: by removing all those #ifdefs as well. Ingo ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 9:48 ` Ingo Molnar @ 2006-11-16 10:09 ` Andi Kleen 2006-11-16 12:29 ` Ingo Molnar 0 siblings, 1 reply; 16+ messages in thread From: Andi Kleen @ 2006-11-16 10:09 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Linus Torvalds, linux-kernel On Thursday 16 November 2006 10:48, Ingo Molnar wrote: > > * Andi Kleen <ak@suse.de> wrote: > > > On Thursday 16 November 2006 10:17, Andrew Morton wrote: > > > On Thu, 16 Nov 2006 10:01:01 +0100 > > > Andi Kleen <ak@suse.de> wrote: > > > > > > > +#ifdef CONFIG_HOTPLUG_CPU > > > > hotcpu_notifier(cpu_vsyscall_notifier, 0); > > > > +#endif > > > > > > this part isn't needed - the definition handles that. > > > > Thanks. Updated patch appended. > > my hotplug-CPU cleanup patch solves this in a cleaner way: by removing > all those #ifdefs as well. Fine, but I suspect that late in the release it's better to go for minimal "obvious" fixes. Later it can then be cleaned up properly. -Andi ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 10:09 ` Andi Kleen @ 2006-11-16 12:29 ` Ingo Molnar 0 siblings, 0 replies; 16+ messages in thread From: Ingo Molnar @ 2006-11-16 12:29 UTC (permalink / raw) To: Andi Kleen; +Cc: Andrew Morton, Linus Torvalds, linux-kernel * Andi Kleen <ak@suse.de> wrote: > > my hotplug-CPU cleanup patch solves this in a cleaner way: by > > removing all those #ifdefs as well. > > Fine, but I suspect that late in the release it's better to go for > minimal "obvious" fixes. Later it can then be cleaned up properly. we are not /that/ late to not apply trivial cleanups. If my patch breaks anything then it's easy enough to fix it. But 'lets clean this up later' is bound to be forgotten and puts the onus on the person doing the cleanups. You yourself have sent more complex partly-cleanup patches upstream just 2 days ago: [PATCH for 2.6.19] [8/9] x86_64: Fix vgetcpu when CONFIG_HOTPLUG_CPU is disabled Ingo ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch, -rc6] x86_64: UP build fixes 2006-11-16 8:48 [patch, -rc6] x86_64: UP build fixes Ingo Molnar 2006-11-16 8:58 ` Andrew Morton 2006-11-16 9:01 ` Andi Kleen @ 2006-11-16 9:03 ` Ingo Molnar 2006-11-16 9:32 ` [patch] hotplug CPU: clean up hotcpu_notifier() use Ingo Molnar 2 siblings, 1 reply; 16+ messages in thread From: Ingo Molnar @ 2006-11-16 9:03 UTC (permalink / raw) To: Andrew Morton; +Cc: Andi Kleen, Linus Torvalds, linux-kernel * Ingo Molnar <mingo@elte.hu> wrote: > x86_64 does not build cleanly on UP: updated patch below - i left out the cpu.h bits because they caused problems elsewhere. Ingo ---------------> Subject: x86_64: build fixes From: Ingo Molnar <mingo@elte.hu> x86_64 does not build cleanly on UP: arch/x86_64/kernel/vsyscall.c: In function 'cpu_vsyscall_notifier': arch/x86_64/kernel/vsyscall.c:282: warning: implicit declaration of function 'smp_call_function_single' arch/x86_64/kernel/vsyscall.c: At top level: arch/x86_64/kernel/vsyscall.c:279: warning: 'cpu_vsyscall_notifier' defined but not used this patch fixes it. Signed-off-by: Ingo Molnar <mingo@elte.hu> --- include/asm-x86_64/smp.h | 11 ++--------- include/linux/smp.h | 9 +++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) Index: linux/include/asm-x86_64/smp.h =================================================================== --- linux.orig/include/asm-x86_64/smp.h +++ linux/include/asm-x86_64/smp.h @@ -115,16 +115,9 @@ static __inline int logical_smp_processo } #ifdef CONFIG_SMP -#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] +# define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] #else -#define cpu_physical_id(cpu) boot_cpu_id -static inline int smp_call_function_single(int cpuid, void (*func) (void *info), - void *info, int retry, int wait) -{ - /* Disable interrupts here? */ - func(info); - return 0; -} +# define cpu_physical_id(cpu) boot_cpu_id #endif /* !CONFIG_SMP */ #endif Index: linux/include/linux/smp.h =================================================================== --- linux.orig/include/linux/smp.h +++ linux/include/linux/smp.h @@ -100,6 +100,15 @@ static inline void smp_send_reschedule(i #define num_booting_cpus() 1 #define smp_prepare_boot_cpu() do {} while (0) +static inline int +smp_call_function_single(int cpuid, void (*func) (void *info), void *info, + int retry, int wait) +{ + func(info); + + return 0; +} + #endif /* !SMP */ /* ^ permalink raw reply [flat|nested] 16+ messages in thread
* [patch] hotplug CPU: clean up hotcpu_notifier() use 2006-11-16 9:03 ` Ingo Molnar @ 2006-11-16 9:32 ` Ingo Molnar 2006-11-16 21:59 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Ingo Molnar @ 2006-11-16 9:32 UTC (permalink / raw) To: Andrew Morton; +Cc: Andi Kleen, Linus Torvalds, linux-kernel * Ingo Molnar <mingo@elte.hu> wrote: > > x86_64 does not build cleanly on UP: > > updated patch below - i left out the cpu.h bits because they caused > problems elsewhere. the cpu-hotplug related warning is solved by the cleanup below. Identity patch, does not change the code. Ingo ----------------------------> Subject: [patch] hotplug CPU: clean up hotcpu_notifier() use From: Ingo Molnar <mingo@elte.hu> There was lots of #ifdef noise in the kernel due to hotcpu_notifier(fn, prio) not correctly marking 'fn' as used in the !HOTPLUG_CPU case, and thus generating compiler warnings of unused symbols, hence forcing people to add #ifdefs. the compiler can skip truly unused functions just fine: text data bss dec hex filename 1624412 728710 3674856 6027978 5bfaca vmlinux.before 1624412 728710 3674856 6027978 5bfaca vmlinux.after Signed-off-by: Ingo Molnar <mingo@elte.hu> --- arch/i386/kernel/cpu/mcheck/therm_throt.c | 2 -- arch/i386/kernel/cpuid.c | 2 -- arch/i386/kernel/microcode.c | 2 -- arch/i386/kernel/msr.c | 2 -- arch/ia64/kernel/palinfo.c | 2 -- arch/ia64/kernel/salinfo.c | 2 -- arch/s390/appldata/appldata_base.c | 2 -- arch/x86_64/kernel/mce.c | 2 -- arch/x86_64/kernel/mce_amd.c | 2 -- block/ll_rw_blk.c | 4 ---- drivers/cpufreq/cpufreq.c | 2 -- fs/buffer.c | 2 -- fs/xfs/xfs_mount.c | 4 +--- include/linux/cpu.h | 6 +++--- kernel/cpuset.c | 4 ---- kernel/profile.c | 3 +-- kernel/sched.c | 3 --- kernel/workqueue.c | 2 -- lib/radix-tree.c | 2 -- mm/page_alloc.c | 4 ---- mm/swap.c | 2 ++ mm/vmscan.c | 2 -- net/core/dev.c | 2 -- net/core/flow.c | 2 -- 24 files changed, 7 insertions(+), 55 deletions(-) Index: linux/arch/i386/kernel/cpu/mcheck/therm_throt.c =================================================================== --- linux.orig/arch/i386/kernel/cpu/mcheck/therm_throt.c +++ linux/arch/i386/kernel/cpu/mcheck/therm_throt.c @@ -115,7 +115,6 @@ static __cpuinit int thermal_throttle_ad return sysfs_create_group(&sys_dev->kobj, &thermal_throttle_attr_group); } -#ifdef CONFIG_HOTPLUG_CPU static __cpuinit void thermal_throttle_remove_dev(struct sys_device *sys_dev) { return sysfs_remove_group(&sys_dev->kobj, &thermal_throttle_attr_group); @@ -152,7 +151,6 @@ static struct notifier_block thermal_thr { .notifier_call = thermal_throttle_cpu_callback, }; -#endif /* CONFIG_HOTPLUG_CPU */ static __init int thermal_throttle_init_device(void) { Index: linux/arch/i386/kernel/cpuid.c =================================================================== --- linux.orig/arch/i386/kernel/cpuid.c +++ linux/arch/i386/kernel/cpuid.c @@ -167,7 +167,6 @@ static int cpuid_class_device_create(int return err; } -#ifdef CONFIG_HOTPLUG_CPU static int cpuid_class_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; @@ -187,7 +186,6 @@ static struct notifier_block __cpuinitda { .notifier_call = cpuid_class_cpu_callback, }; -#endif /* !CONFIG_HOTPLUG_CPU */ static int __init cpuid_init(void) { Index: linux/arch/i386/kernel/microcode.c =================================================================== --- linux.orig/arch/i386/kernel/microcode.c +++ linux/arch/i386/kernel/microcode.c @@ -703,7 +703,6 @@ static struct sysdev_driver mc_sysdev_dr .resume = mc_sysdev_resume, }; -#ifdef CONFIG_HOTPLUG_CPU static __cpuinit int mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) { @@ -726,7 +725,6 @@ mc_cpu_callback(struct notifier_block *n static struct notifier_block mc_cpu_notifier = { .notifier_call = mc_cpu_callback, }; -#endif static int __init microcode_init (void) { Index: linux/arch/i386/kernel/msr.c =================================================================== --- linux.orig/arch/i386/kernel/msr.c +++ linux/arch/i386/kernel/msr.c @@ -250,7 +250,6 @@ static int msr_class_device_create(int i return err; } -#ifdef CONFIG_HOTPLUG_CPU static int msr_class_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { @@ -271,7 +270,6 @@ static struct notifier_block __cpuinitda { .notifier_call = msr_class_cpu_callback, }; -#endif static int __init msr_init(void) { Index: linux/arch/ia64/kernel/palinfo.c =================================================================== --- linux.orig/arch/ia64/kernel/palinfo.c +++ linux/arch/ia64/kernel/palinfo.c @@ -952,7 +952,6 @@ remove_palinfo_proc_entries(unsigned int } } -#ifdef CONFIG_HOTPLUG_CPU static int palinfo_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { @@ -974,7 +973,6 @@ static struct notifier_block palinfo_cpu .notifier_call = palinfo_cpu_callback, .priority = 0, }; -#endif static int __init palinfo_init(void) Index: linux/arch/ia64/kernel/salinfo.c =================================================================== --- linux.orig/arch/ia64/kernel/salinfo.c +++ linux/arch/ia64/kernel/salinfo.c @@ -575,7 +575,6 @@ static struct file_operations salinfo_da .write = salinfo_log_write, }; -#ifdef CONFIG_HOTPLUG_CPU static int __devinit salinfo_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) { @@ -620,7 +619,6 @@ static struct notifier_block salinfo_cpu .notifier_call = salinfo_cpu_callback, .priority = 0, }; -#endif /* CONFIG_HOTPLUG_CPU */ static int __init salinfo_init(void) Index: linux/arch/s390/appldata/appldata_base.c =================================================================== --- linux.orig/arch/s390/appldata/appldata_base.c +++ linux/arch/s390/appldata/appldata_base.c @@ -561,7 +561,6 @@ appldata_offline_cpu(int cpu) spin_unlock(&appldata_timer_lock); } -#ifdef CONFIG_HOTPLUG_CPU static int __cpuinit appldata_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) @@ -582,7 +581,6 @@ appldata_cpu_notify(struct notifier_bloc static struct notifier_block appldata_nb = { .notifier_call = appldata_cpu_notify, }; -#endif /* * appldata_init() Index: linux/arch/x86_64/kernel/mce.c =================================================================== --- linux.orig/arch/x86_64/kernel/mce.c +++ linux/arch/x86_64/kernel/mce.c @@ -641,7 +641,6 @@ static __cpuinit int mce_create_device(u return err; } -#ifdef CONFIG_HOTPLUG_CPU static void mce_remove_device(unsigned int cpu) { int i; @@ -674,7 +673,6 @@ mce_cpu_callback(struct notifier_block * static struct notifier_block mce_cpu_notifier = { .notifier_call = mce_cpu_callback, }; -#endif static __init int mce_init_device(void) { Index: linux/arch/x86_64/kernel/mce_amd.c =================================================================== --- linux.orig/arch/x86_64/kernel/mce_amd.c +++ linux/arch/x86_64/kernel/mce_amd.c @@ -551,7 +551,6 @@ out: return err; } -#ifdef CONFIG_HOTPLUG_CPU /* * let's be hotplug friendly. * in case of multiple core processors, the first core always takes ownership @@ -656,7 +655,6 @@ static int threshold_cpu_callback(struct static struct notifier_block threshold_cpu_notifier = { .notifier_call = threshold_cpu_callback, }; -#endif /* CONFIG_HOTPLUG_CPU */ static __init int threshold_init_device(void) { Index: linux/block/ll_rw_blk.c =================================================================== --- linux.orig/block/ll_rw_blk.c +++ linux/block/ll_rw_blk.c @@ -3374,8 +3374,6 @@ static void blk_done_softirq(struct soft } } -#ifdef CONFIG_HOTPLUG_CPU - static int blk_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { @@ -3401,8 +3399,6 @@ static struct notifier_block __devinitda .notifier_call = blk_cpu_notify, }; -#endif /* CONFIG_HOTPLUG_CPU */ - /** * blk_complete_request - end I/O on a request * @req: the request being processed Index: linux/drivers/cpufreq/cpufreq.c =================================================================== --- linux.orig/drivers/cpufreq/cpufreq.c +++ linux/drivers/cpufreq/cpufreq.c @@ -1535,7 +1535,6 @@ int cpufreq_update_policy(unsigned int c } EXPORT_SYMBOL(cpufreq_update_policy); -#ifdef CONFIG_HOTPLUG_CPU static int cpufreq_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { @@ -1575,7 +1574,6 @@ static struct notifier_block __cpuinitda { .notifier_call = cpufreq_cpu_callback, }; -#endif /* CONFIG_HOTPLUG_CPU */ /********************************************************************* * REGISTER / UNREGISTER CPUFREQ DRIVER * Index: linux/fs/buffer.c =================================================================== --- linux.orig/fs/buffer.c +++ linux/fs/buffer.c @@ -2972,7 +2972,6 @@ init_buffer_head(void *data, kmem_cache_ } } -#ifdef CONFIG_HOTPLUG_CPU static void buffer_exit_cpu(int cpu) { int i; @@ -2994,7 +2993,6 @@ static int buffer_cpu_notify(struct noti buffer_exit_cpu((unsigned long)hcpu); return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ void __init buffer_init(void) { Index: linux/fs/xfs/xfs_mount.c =================================================================== --- linux.orig/fs/xfs/xfs_mount.c +++ linux/fs/xfs/xfs_mount.c @@ -1704,7 +1704,6 @@ xfs_mount_log_sbunit( * is present to prevent thrashing). */ -#ifdef CONFIG_HOTPLUG_CPU /* * hot-plug CPU notifier support. * @@ -1761,7 +1760,6 @@ xfs_icsb_cpu_notify( return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ int xfs_icsb_init_counters( @@ -1777,8 +1775,8 @@ xfs_icsb_init_counters( #ifdef CONFIG_HOTPLUG_CPU mp->m_icsb_notifier.notifier_call = xfs_icsb_cpu_notify; mp->m_icsb_notifier.priority = 0; - register_hotcpu_notifier(&mp->m_icsb_notifier); #endif /* CONFIG_HOTPLUG_CPU */ + register_hotcpu_notifier(&mp->m_icsb_notifier); for_each_online_cpu(i) { cntp = (xfs_icsb_cnts_t *)per_cpu_ptr(mp->m_sb_cnts, i); Index: linux/include/linux/cpu.h =================================================================== --- linux.orig/include/linux/cpu.h +++ linux/include/linux/cpu.h @@ -81,9 +81,9 @@ int cpu_down(unsigned int cpu); #define lock_cpu_hotplug() do { } while (0) #define unlock_cpu_hotplug() do { } while (0) #define lock_cpu_hotplug_interruptible() 0 -#define hotcpu_notifier(fn, pri) do { } while (0) -#define register_hotcpu_notifier(nb) do { } while (0) -#define unregister_hotcpu_notifier(nb) do { } while (0) +#define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) +#define register_hotcpu_notifier(nb) do { (void)(nb); } while (0) +#define unregister_hotcpu_notifier(nb) do { (void)(nb); } while (0) /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ static inline int cpu_is_offline(int cpu) { return 0; } Index: linux/kernel/cpuset.c =================================================================== --- linux.orig/kernel/cpuset.c +++ linux/kernel/cpuset.c @@ -2045,7 +2045,6 @@ out: return err; } -#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_MEMORY_HOTPLUG) /* * If common_cpu_mem_hotplug_unplug(), below, unplugs any CPUs * or memory nodes, we need to walk over the cpuset hierarchy, @@ -2109,9 +2108,7 @@ static void common_cpu_mem_hotplug_unplu mutex_unlock(&callback_mutex); mutex_unlock(&manage_mutex); } -#endif -#ifdef CONFIG_HOTPLUG_CPU /* * The top_cpuset tracks what CPUs and Memory Nodes are online, * period. This is necessary in order to make cpusets transparent @@ -2128,7 +2125,6 @@ static int cpuset_handle_cpuhp(struct no common_cpu_mem_hotplug_unplug(); return 0; } -#endif #ifdef CONFIG_MEMORY_HOTPLUG /* Index: linux/kernel/profile.c =================================================================== --- linux.orig/kernel/profile.c +++ linux/kernel/profile.c @@ -298,7 +298,6 @@ out: put_cpu(); } -#ifdef CONFIG_HOTPLUG_CPU static int __devinit profile_cpu_callback(struct notifier_block *info, unsigned long action, void *__cpu) { @@ -351,10 +350,10 @@ static int __devinit profile_cpu_callbac } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ #else /* !CONFIG_SMP */ #define profile_flip_buffers() do { } while (0) #define profile_discard_flip_buffers() do { } while (0) +#define profile_cpu_callback NULL void profile_hit(int type, void *__pc) { Index: linux/kernel/sched.c =================================================================== --- linux.orig/kernel/sched.c +++ linux/kernel/sched.c @@ -6723,8 +6723,6 @@ SYSDEV_ATTR(sched_smt_power_savings, 064 sched_smt_power_savings_store); #endif - -#ifdef CONFIG_HOTPLUG_CPU /* * Force a reinitialization of the sched domains hierarchy. The domains * and groups cannot be updated in place without racing with the balancing @@ -6757,7 +6755,6 @@ static int update_sched_domains(struct n return NOTIFY_OK; } -#endif void __init sched_init_smp(void) { Index: linux/kernel/workqueue.c =================================================================== --- linux.orig/kernel/workqueue.c +++ linux/kernel/workqueue.c @@ -609,7 +609,6 @@ int current_is_keventd(void) } -#ifdef CONFIG_HOTPLUG_CPU /* Take the work from this (downed) CPU. */ static void take_over_work(struct workqueue_struct *wq, unsigned int cpu) { @@ -692,7 +691,6 @@ static int __devinit workqueue_cpu_callb return NOTIFY_OK; } -#endif void init_workqueues(void) { Index: linux/lib/radix-tree.c =================================================================== --- linux.orig/lib/radix-tree.c +++ linux/lib/radix-tree.c @@ -869,7 +869,6 @@ static __init void radix_tree_init_maxin height_to_maxindex[i] = __maxindex(i); } -#ifdef CONFIG_HOTPLUG_CPU static int radix_tree_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) @@ -889,7 +888,6 @@ static int radix_tree_callback(struct no } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ void __init radix_tree_init(void) { Index: linux/mm/page_alloc.c =================================================================== --- linux.orig/mm/page_alloc.c +++ linux/mm/page_alloc.c @@ -700,7 +700,6 @@ void drain_node_pages(int nodeid) } #endif -#if defined(CONFIG_PM) || defined(CONFIG_HOTPLUG_CPU) static void __drain_pages(unsigned int cpu) { unsigned long flags; @@ -722,7 +721,6 @@ static void __drain_pages(unsigned int c } } } -#endif /* CONFIG_PM || CONFIG_HOTPLUG_CPU */ #ifdef CONFIG_PM @@ -2736,7 +2734,6 @@ void __init free_area_init(unsigned long __pa(PAGE_OFFSET) >> PAGE_SHIFT, NULL); } -#ifdef CONFIG_HOTPLUG_CPU static int page_alloc_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { @@ -2751,7 +2748,6 @@ static int page_alloc_cpu_notify(struct } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ void __init page_alloc_init(void) { Index: linux/mm/swap.c =================================================================== --- linux.orig/mm/swap.c +++ linux/mm/swap.c @@ -514,5 +514,7 @@ void __init swap_setup(void) * Right now other parts of the system means that we * _really_ don't want to cluster much more */ +#ifdef CONFIG_HOTPLUG_CPU hotcpu_notifier(cpu_swap_callback, 0); +#endif } Index: linux/mm/vmscan.c =================================================================== --- linux.orig/mm/vmscan.c +++ linux/mm/vmscan.c @@ -1508,7 +1508,6 @@ out: } #endif -#ifdef CONFIG_HOTPLUG_CPU /* It's optimal to keep kswapds on the same CPUs as their memory, but not required for correctness. So if the last cpu in a node goes away, we get changed to run anywhere: as the first one comes back, @@ -1529,7 +1528,6 @@ static int __devinit cpu_callback(struct } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ /* * This kswapd start function will be called by init and node-hot-add. Index: linux/net/core/dev.c =================================================================== --- linux.orig/net/core/dev.c +++ linux/net/core/dev.c @@ -3361,7 +3361,6 @@ void unregister_netdev(struct net_device EXPORT_SYMBOL(unregister_netdev); -#ifdef CONFIG_HOTPLUG_CPU static int dev_cpu_callback(struct notifier_block *nfb, unsigned long action, void *ocpu) @@ -3405,7 +3404,6 @@ static int dev_cpu_callback(struct notif return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ #ifdef CONFIG_NET_DMA /** Index: linux/net/core/flow.c =================================================================== --- linux.orig/net/core/flow.c +++ linux/net/core/flow.c @@ -340,7 +340,6 @@ static void __devinit flow_cache_cpu_pre tasklet_init(tasklet, flow_cache_flush_tasklet, 0); } -#ifdef CONFIG_HOTPLUG_CPU static int flow_cache_cpu(struct notifier_block *nfb, unsigned long action, void *hcpu) @@ -349,7 +348,6 @@ static int flow_cache_cpu(struct notifie __flow_cache_shrink((unsigned long)hcpu, 0); return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ static int __init flow_cache_init(void) { ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] hotplug CPU: clean up hotcpu_notifier() use 2006-11-16 9:32 ` [patch] hotplug CPU: clean up hotcpu_notifier() use Ingo Molnar @ 2006-11-16 21:59 ` Linus Torvalds 2006-11-17 3:52 ` Ingo Molnar 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2006-11-16 21:59 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Andi Kleen, linux-kernel On Thu, 16 Nov 2006, Ingo Molnar wrote: > > the cpu-hotplug related warning is solved by the cleanup below. I do not believe this is a cleanup, at least not in this kind of form: > @@ -1777,8 +1775,8 @@ xfs_icsb_init_counters( > #ifdef CONFIG_HOTPLUG_CPU > mp->m_icsb_notifier.notifier_call = xfs_icsb_cpu_notify; > mp->m_icsb_notifier.priority = 0; > - register_hotcpu_notifier(&mp->m_icsb_notifier); > #endif /* CONFIG_HOTPLUG_CPU */ > + register_hotcpu_notifier(&mp->m_icsb_notifier); That's just horrible. Now you "register" that notifier that you've never actually even initialized. The new code is a lot worse than the old code at least in this case. Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] hotplug CPU: clean up hotcpu_notifier() use 2006-11-16 21:59 ` Linus Torvalds @ 2006-11-17 3:52 ` Ingo Molnar 2006-11-17 6:02 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Ingo Molnar @ 2006-11-17 3:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, Andi Kleen, linux-kernel * Linus Torvalds <torvalds@osdl.org> wrote: > > #ifdef CONFIG_HOTPLUG_CPU > > mp->m_icsb_notifier.notifier_call = xfs_icsb_cpu_notify; > > mp->m_icsb_notifier.priority = 0; > > - register_hotcpu_notifier(&mp->m_icsb_notifier); > > #endif /* CONFIG_HOTPLUG_CPU */ > > + register_hotcpu_notifier(&mp->m_icsb_notifier); > > That's just horrible. Now you "register" that notifier that you've > never actually even initialized. yeah - this could only be done cleanly if there was a 'set notifier parameters and register it' call, but there isnt. Find below the patch with this bit taken out. (and with the mce_amd.c fix merged in). It still removes ~25 #ifdef blocks total. Ingo ----------------------------> Subject: [patch] hotplug CPU: clean up hotcpu_notifier() use From: Ingo Molnar <mingo@elte.hu> There was lots of #ifdef noise in the kernel due to hotcpu_notifier(fn, prio) not correctly marking 'fn' as used in the !HOTPLUG_CPU case, and thus generating compiler warnings of unused symbols, hence forcing people to add #ifdefs. the compiler can skip truly unused functions just fine: text data bss dec hex filename 1624412 728710 3674856 6027978 5bfaca vmlinux.before 1624412 728710 3674856 6027978 5bfaca vmlinux.after Signed-off-by: Ingo Molnar <mingo@elte.hu> --- arch/i386/kernel/cpu/mcheck/therm_throt.c | 2 -- arch/i386/kernel/cpuid.c | 2 -- arch/i386/kernel/microcode.c | 2 -- arch/i386/kernel/msr.c | 2 -- arch/ia64/kernel/palinfo.c | 2 -- arch/ia64/kernel/salinfo.c | 2 -- arch/s390/appldata/appldata_base.c | 2 -- arch/x86_64/kernel/mce.c | 2 -- arch/x86_64/kernel/mce_amd.c | 2 -- block/ll_rw_blk.c | 4 ---- drivers/cpufreq/cpufreq.c | 2 -- fs/buffer.c | 2 -- fs/xfs/xfs_mount.c | 4 +--- include/linux/cpu.h | 6 +++--- kernel/cpuset.c | 4 ---- kernel/profile.c | 3 +-- kernel/sched.c | 3 --- kernel/workqueue.c | 2 -- lib/radix-tree.c | 2 -- mm/page_alloc.c | 4 ---- mm/swap.c | 2 ++ mm/vmscan.c | 2 -- net/core/dev.c | 2 -- net/core/flow.c | 2 -- 24 files changed, 7 insertions(+), 55 deletions(-) Index: linux/arch/i386/kernel/cpu/mcheck/therm_throt.c =================================================================== --- linux.orig/arch/i386/kernel/cpu/mcheck/therm_throt.c +++ linux/arch/i386/kernel/cpu/mcheck/therm_throt.c @@ -115,7 +115,6 @@ static __cpuinit int thermal_throttle_ad return sysfs_create_group(&sys_dev->kobj, &thermal_throttle_attr_group); } -#ifdef CONFIG_HOTPLUG_CPU static __cpuinit void thermal_throttle_remove_dev(struct sys_device *sys_dev) { return sysfs_remove_group(&sys_dev->kobj, &thermal_throttle_attr_group); @@ -152,7 +151,6 @@ static struct notifier_block thermal_thr { .notifier_call = thermal_throttle_cpu_callback, }; -#endif /* CONFIG_HOTPLUG_CPU */ static __init int thermal_throttle_init_device(void) { Index: linux/arch/i386/kernel/cpuid.c =================================================================== --- linux.orig/arch/i386/kernel/cpuid.c +++ linux/arch/i386/kernel/cpuid.c @@ -167,7 +167,6 @@ static int cpuid_class_device_create(int return err; } -#ifdef CONFIG_HOTPLUG_CPU static int cpuid_class_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { unsigned int cpu = (unsigned long)hcpu; @@ -187,7 +186,6 @@ static struct notifier_block __cpuinitda { .notifier_call = cpuid_class_cpu_callback, }; -#endif /* !CONFIG_HOTPLUG_CPU */ static int __init cpuid_init(void) { Index: linux/arch/i386/kernel/microcode.c =================================================================== --- linux.orig/arch/i386/kernel/microcode.c +++ linux/arch/i386/kernel/microcode.c @@ -703,7 +703,6 @@ static struct sysdev_driver mc_sysdev_dr .resume = mc_sysdev_resume, }; -#ifdef CONFIG_HOTPLUG_CPU static __cpuinit int mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) { @@ -726,7 +725,6 @@ mc_cpu_callback(struct notifier_block *n static struct notifier_block mc_cpu_notifier = { .notifier_call = mc_cpu_callback, }; -#endif static int __init microcode_init (void) { Index: linux/arch/i386/kernel/msr.c =================================================================== --- linux.orig/arch/i386/kernel/msr.c +++ linux/arch/i386/kernel/msr.c @@ -250,7 +250,6 @@ static int msr_class_device_create(int i return err; } -#ifdef CONFIG_HOTPLUG_CPU static int msr_class_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { @@ -271,7 +270,6 @@ static struct notifier_block __cpuinitda { .notifier_call = msr_class_cpu_callback, }; -#endif static int __init msr_init(void) { Index: linux/arch/ia64/kernel/palinfo.c =================================================================== --- linux.orig/arch/ia64/kernel/palinfo.c +++ linux/arch/ia64/kernel/palinfo.c @@ -952,7 +952,6 @@ remove_palinfo_proc_entries(unsigned int } } -#ifdef CONFIG_HOTPLUG_CPU static int palinfo_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { @@ -974,7 +973,6 @@ static struct notifier_block palinfo_cpu .notifier_call = palinfo_cpu_callback, .priority = 0, }; -#endif static int __init palinfo_init(void) Index: linux/arch/ia64/kernel/salinfo.c =================================================================== --- linux.orig/arch/ia64/kernel/salinfo.c +++ linux/arch/ia64/kernel/salinfo.c @@ -575,7 +575,6 @@ static struct file_operations salinfo_da .write = salinfo_log_write, }; -#ifdef CONFIG_HOTPLUG_CPU static int __devinit salinfo_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) { @@ -620,7 +619,6 @@ static struct notifier_block salinfo_cpu .notifier_call = salinfo_cpu_callback, .priority = 0, }; -#endif /* CONFIG_HOTPLUG_CPU */ static int __init salinfo_init(void) Index: linux/arch/s390/appldata/appldata_base.c =================================================================== --- linux.orig/arch/s390/appldata/appldata_base.c +++ linux/arch/s390/appldata/appldata_base.c @@ -561,7 +561,6 @@ appldata_offline_cpu(int cpu) spin_unlock(&appldata_timer_lock); } -#ifdef CONFIG_HOTPLUG_CPU static int __cpuinit appldata_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) @@ -582,7 +581,6 @@ appldata_cpu_notify(struct notifier_bloc static struct notifier_block appldata_nb = { .notifier_call = appldata_cpu_notify, }; -#endif /* * appldata_init() Index: linux/arch/x86_64/kernel/mce.c =================================================================== --- linux.orig/arch/x86_64/kernel/mce.c +++ linux/arch/x86_64/kernel/mce.c @@ -641,7 +641,6 @@ static __cpuinit int mce_create_device(u return err; } -#ifdef CONFIG_HOTPLUG_CPU static void mce_remove_device(unsigned int cpu) { int i; @@ -674,7 +673,6 @@ mce_cpu_callback(struct notifier_block * static struct notifier_block mce_cpu_notifier = { .notifier_call = mce_cpu_callback, }; -#endif static __init int mce_init_device(void) { Index: linux/arch/x86_64/kernel/mce_amd.c =================================================================== --- linux.orig/arch/x86_64/kernel/mce_amd.c +++ linux/arch/x86_64/kernel/mce_amd.c @@ -551,7 +551,6 @@ out: return err; } -#ifdef CONFIG_HOTPLUG_CPU /* * let's be hotplug friendly. * in case of multiple core processors, the first core always takes ownership @@ -593,12 +593,14 @@ static void threshold_remove_bank(unsign sprintf(name, "threshold_bank%i", bank); +#ifdef CONFIG_SMP /* sibling symlink */ if (shared_bank[bank] && b->blocks->cpu != cpu) { sysfs_remove_link(&per_cpu(device_mce, cpu).kobj, name); per_cpu(threshold_banks, cpu)[bank] = NULL; return; } +#endif /* remove all sibling symlinks before unregistering */ for_each_cpu_mask(i, b->cpus) { @@ -656,7 +655,6 @@ static int threshold_cpu_callback(struct static struct notifier_block threshold_cpu_notifier = { .notifier_call = threshold_cpu_callback, }; -#endif /* CONFIG_HOTPLUG_CPU */ static __init int threshold_init_device(void) { Index: linux/block/ll_rw_blk.c =================================================================== --- linux.orig/block/ll_rw_blk.c +++ linux/block/ll_rw_blk.c @@ -3374,8 +3374,6 @@ static void blk_done_softirq(struct soft } } -#ifdef CONFIG_HOTPLUG_CPU - static int blk_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { @@ -3401,8 +3399,6 @@ static struct notifier_block __devinitda .notifier_call = blk_cpu_notify, }; -#endif /* CONFIG_HOTPLUG_CPU */ - /** * blk_complete_request - end I/O on a request * @req: the request being processed Index: linux/drivers/cpufreq/cpufreq.c =================================================================== --- linux.orig/drivers/cpufreq/cpufreq.c +++ linux/drivers/cpufreq/cpufreq.c @@ -1535,7 +1535,6 @@ int cpufreq_update_policy(unsigned int c } EXPORT_SYMBOL(cpufreq_update_policy); -#ifdef CONFIG_HOTPLUG_CPU static int cpufreq_cpu_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) { @@ -1575,7 +1574,6 @@ static struct notifier_block __cpuinitda { .notifier_call = cpufreq_cpu_callback, }; -#endif /* CONFIG_HOTPLUG_CPU */ /********************************************************************* * REGISTER / UNREGISTER CPUFREQ DRIVER * Index: linux/fs/buffer.c =================================================================== --- linux.orig/fs/buffer.c +++ linux/fs/buffer.c @@ -2972,7 +2972,6 @@ init_buffer_head(void *data, kmem_cache_ } } -#ifdef CONFIG_HOTPLUG_CPU static void buffer_exit_cpu(int cpu) { int i; @@ -2994,7 +2993,6 @@ static int buffer_cpu_notify(struct noti buffer_exit_cpu((unsigned long)hcpu); return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ void __init buffer_init(void) { Index: linux/include/linux/cpu.h =================================================================== --- linux.orig/include/linux/cpu.h +++ linux/include/linux/cpu.h @@ -81,9 +81,9 @@ int cpu_down(unsigned int cpu); #define lock_cpu_hotplug() do { } while (0) #define unlock_cpu_hotplug() do { } while (0) #define lock_cpu_hotplug_interruptible() 0 -#define hotcpu_notifier(fn, pri) do { } while (0) -#define register_hotcpu_notifier(nb) do { } while (0) -#define unregister_hotcpu_notifier(nb) do { } while (0) +#define hotcpu_notifier(fn, pri) do { (void)(fn); } while (0) +#define register_hotcpu_notifier(nb) do { (void)(nb); } while (0) +#define unregister_hotcpu_notifier(nb) do { (void)(nb); } while (0) /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ static inline int cpu_is_offline(int cpu) { return 0; } Index: linux/kernel/cpuset.c =================================================================== --- linux.orig/kernel/cpuset.c +++ linux/kernel/cpuset.c @@ -2045,7 +2045,6 @@ out: return err; } -#if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_MEMORY_HOTPLUG) /* * If common_cpu_mem_hotplug_unplug(), below, unplugs any CPUs * or memory nodes, we need to walk over the cpuset hierarchy, @@ -2109,9 +2108,7 @@ static void common_cpu_mem_hotplug_unplu mutex_unlock(&callback_mutex); mutex_unlock(&manage_mutex); } -#endif -#ifdef CONFIG_HOTPLUG_CPU /* * The top_cpuset tracks what CPUs and Memory Nodes are online, * period. This is necessary in order to make cpusets transparent @@ -2128,7 +2125,6 @@ static int cpuset_handle_cpuhp(struct no common_cpu_mem_hotplug_unplug(); return 0; } -#endif #ifdef CONFIG_MEMORY_HOTPLUG /* Index: linux/kernel/profile.c =================================================================== --- linux.orig/kernel/profile.c +++ linux/kernel/profile.c @@ -298,7 +298,6 @@ out: put_cpu(); } -#ifdef CONFIG_HOTPLUG_CPU static int __devinit profile_cpu_callback(struct notifier_block *info, unsigned long action, void *__cpu) { @@ -351,10 +350,10 @@ static int __devinit profile_cpu_callbac } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ #else /* !CONFIG_SMP */ #define profile_flip_buffers() do { } while (0) #define profile_discard_flip_buffers() do { } while (0) +#define profile_cpu_callback NULL void profile_hit(int type, void *__pc) { Index: linux/kernel/sched.c =================================================================== --- linux.orig/kernel/sched.c +++ linux/kernel/sched.c @@ -6723,8 +6723,6 @@ SYSDEV_ATTR(sched_smt_power_savings, 064 sched_smt_power_savings_store); #endif - -#ifdef CONFIG_HOTPLUG_CPU /* * Force a reinitialization of the sched domains hierarchy. The domains * and groups cannot be updated in place without racing with the balancing @@ -6757,7 +6755,6 @@ static int update_sched_domains(struct n return NOTIFY_OK; } -#endif void __init sched_init_smp(void) { Index: linux/kernel/workqueue.c =================================================================== --- linux.orig/kernel/workqueue.c +++ linux/kernel/workqueue.c @@ -609,7 +609,6 @@ int current_is_keventd(void) } -#ifdef CONFIG_HOTPLUG_CPU /* Take the work from this (downed) CPU. */ static void take_over_work(struct workqueue_struct *wq, unsigned int cpu) { @@ -692,7 +691,6 @@ static int __devinit workqueue_cpu_callb return NOTIFY_OK; } -#endif void init_workqueues(void) { Index: linux/lib/radix-tree.c =================================================================== --- linux.orig/lib/radix-tree.c +++ linux/lib/radix-tree.c @@ -869,7 +869,6 @@ static __init void radix_tree_init_maxin height_to_maxindex[i] = __maxindex(i); } -#ifdef CONFIG_HOTPLUG_CPU static int radix_tree_callback(struct notifier_block *nfb, unsigned long action, void *hcpu) @@ -889,7 +888,6 @@ static int radix_tree_callback(struct no } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ void __init radix_tree_init(void) { Index: linux/mm/page_alloc.c =================================================================== --- linux.orig/mm/page_alloc.c +++ linux/mm/page_alloc.c @@ -700,7 +700,6 @@ void drain_node_pages(int nodeid) } #endif -#if defined(CONFIG_PM) || defined(CONFIG_HOTPLUG_CPU) static void __drain_pages(unsigned int cpu) { unsigned long flags; @@ -722,7 +721,6 @@ static void __drain_pages(unsigned int c } } } -#endif /* CONFIG_PM || CONFIG_HOTPLUG_CPU */ #ifdef CONFIG_PM @@ -2736,7 +2734,6 @@ void __init free_area_init(unsigned long __pa(PAGE_OFFSET) >> PAGE_SHIFT, NULL); } -#ifdef CONFIG_HOTPLUG_CPU static int page_alloc_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) { @@ -2751,7 +2748,6 @@ static int page_alloc_cpu_notify(struct } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ void __init page_alloc_init(void) { Index: linux/mm/swap.c =================================================================== --- linux.orig/mm/swap.c +++ linux/mm/swap.c @@ -514,5 +514,7 @@ void __init swap_setup(void) * Right now other parts of the system means that we * _really_ don't want to cluster much more */ +#ifdef CONFIG_HOTPLUG_CPU hotcpu_notifier(cpu_swap_callback, 0); +#endif } Index: linux/mm/vmscan.c =================================================================== --- linux.orig/mm/vmscan.c +++ linux/mm/vmscan.c @@ -1508,7 +1508,6 @@ out: } #endif -#ifdef CONFIG_HOTPLUG_CPU /* It's optimal to keep kswapds on the same CPUs as their memory, but not required for correctness. So if the last cpu in a node goes away, we get changed to run anywhere: as the first one comes back, @@ -1529,7 +1528,6 @@ static int __devinit cpu_callback(struct } return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ /* * This kswapd start function will be called by init and node-hot-add. Index: linux/net/core/dev.c =================================================================== --- linux.orig/net/core/dev.c +++ linux/net/core/dev.c @@ -3361,7 +3361,6 @@ void unregister_netdev(struct net_device EXPORT_SYMBOL(unregister_netdev); -#ifdef CONFIG_HOTPLUG_CPU static int dev_cpu_callback(struct notifier_block *nfb, unsigned long action, void *ocpu) @@ -3405,7 +3404,6 @@ static int dev_cpu_callback(struct notif return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ #ifdef CONFIG_NET_DMA /** Index: linux/net/core/flow.c =================================================================== --- linux.orig/net/core/flow.c +++ linux/net/core/flow.c @@ -340,7 +340,6 @@ static void __devinit flow_cache_cpu_pre tasklet_init(tasklet, flow_cache_flush_tasklet, 0); } -#ifdef CONFIG_HOTPLUG_CPU static int flow_cache_cpu(struct notifier_block *nfb, unsigned long action, void *hcpu) @@ -349,7 +348,6 @@ static int flow_cache_cpu(struct notifie __flow_cache_shrink((unsigned long)hcpu, 0); return NOTIFY_OK; } -#endif /* CONFIG_HOTPLUG_CPU */ static int __init flow_cache_init(void) { ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] hotplug CPU: clean up hotcpu_notifier() use 2006-11-17 3:52 ` Ingo Molnar @ 2006-11-17 6:02 ` Linus Torvalds 2006-11-17 7:28 ` Ingo Molnar 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2006-11-17 6:02 UTC (permalink / raw) To: Ingo Molnar; +Cc: Andrew Morton, Andi Kleen, linux-kernel On Fri, 17 Nov 2006, Ingo Molnar wrote: > > yeah - this could only be done cleanly if there was a 'set notifier > parameters and register it' call, but there isnt. Find below the patch > with this bit taken out. (and with the mce_amd.c fix merged in). It > still removes ~25 #ifdef blocks total. Ok, looks better, although I just don't feel comfy merging this at this point, since it looks unlikely to fix any real bugs. Will happily take it post-2.6.19 as a cleanup, though. Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch] hotplug CPU: clean up hotcpu_notifier() use 2006-11-17 6:02 ` Linus Torvalds @ 2006-11-17 7:28 ` Ingo Molnar 0 siblings, 0 replies; 16+ messages in thread From: Ingo Molnar @ 2006-11-17 7:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: Andrew Morton, Andi Kleen, linux-kernel * Linus Torvalds <torvalds@osdl.org> wrote: > On Fri, 17 Nov 2006, Ingo Molnar wrote: > > > > yeah - this could only be done cleanly if there was a 'set notifier > > parameters and register it' call, but there isnt. Find below the > > patch with this bit taken out. (and with the mce_amd.c fix merged > > in). It still removes ~25 #ifdef blocks total. > > Ok, looks better, although I just don't feel comfy merging this at > this point, since it looks unlikely to fix any real bugs. > > Will happily take it post-2.6.19 as a cleanup, though. ok - we are closer to 2.6.19-final than i thought :-) Ingo ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2006-11-17 7:40 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-11-16 8:48 [patch, -rc6] x86_64: UP build fixes Ingo Molnar 2006-11-16 8:58 ` Andrew Morton 2006-11-16 9:28 ` Ingo Molnar 2006-11-16 9:45 ` Ingo Molnar 2006-11-16 9:01 ` Andi Kleen 2006-11-16 9:17 ` Andrew Morton 2006-11-16 9:22 ` Andi Kleen 2006-11-16 9:48 ` Ingo Molnar 2006-11-16 10:09 ` Andi Kleen 2006-11-16 12:29 ` Ingo Molnar 2006-11-16 9:03 ` Ingo Molnar 2006-11-16 9:32 ` [patch] hotplug CPU: clean up hotcpu_notifier() use Ingo Molnar 2006-11-16 21:59 ` Linus Torvalds 2006-11-17 3:52 ` Ingo Molnar 2006-11-17 6:02 ` Linus Torvalds 2006-11-17 7:28 ` Ingo Molnar
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.