---

 include/linux/cpu.h |    9 +++++++++
 net/core/flow.c     |    4 ++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff -puN net/core/flow.c~flow-cpucontrol-fix net/core/flow.c
--- 25/net/core/flow.c~flow-cpucontrol-fix	2004-01-22 19:52:46.000000000 -0800
+++ 25-akpm/net/core/flow.c	2004-01-22 19:52:46.000000000 -0800
@@ -286,7 +286,7 @@ void flow_cache_flush(void)
 
 	/* Don't want cpus going down or up during this, also protects
 	 * against multiple callers. */
-	down(&cpucontrol);
+	down_cpucontrol();
 	atomic_set(&info.cpuleft, num_online_cpus());
 	init_completion(&info.completion);
 
@@ -296,7 +296,7 @@ void flow_cache_flush(void)
 	local_bh_enable();
 
 	wait_for_completion(&info.completion);
-	up(&cpucontrol);
+	up_cpucontrol();
 }
 
 static void __devinit flow_cache_cpu_prepare(int cpu)
diff -puN include/linux/cpu.h~flow-cpucontrol-fix include/linux/cpu.h
--- 25/include/linux/cpu.h~flow-cpucontrol-fix	2004-01-22 19:52:46.000000000 -0800
+++ 25-akpm/include/linux/cpu.h	2004-01-22 19:52:46.000000000 -0800
@@ -37,7 +37,12 @@ extern int register_cpu_notifier(struct 
 extern void unregister_cpu_notifier(struct notifier_block *nb);
 
 int cpu_up(unsigned int cpu);
+
+#define down_cpucontrol()	down(&cpucontrol)
+#define up_cpucontrol()		up(&cpucontrol)
+
 #else
+
 static inline int register_cpu_notifier(struct notifier_block *nb)
 {
 	return 0;
@@ -45,6 +50,10 @@ static inline int register_cpu_notifier(
 static inline void unregister_cpu_notifier(struct notifier_block *nb)
 {
 }
+
+#define down_cpucontrol()	do { } while (0)
+#define up_cpucontrol()		do { } while (0)
+
 #endif /* CONFIG_SMP */
 extern struct sysdev_class cpu_sysdev_class;
 

_