From 672ab41e9381b6418cbdf17b39b51ffd64d07792 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Thu, 22 Jan 2004 19:00:26 -0800 Subject: [PATCH] [PATCH] Fix CPU hotplug in networking The code directly accessed the "cpucontrol" semaphore used for CPU hotplug. That doesn't work all that well, since the semaphore doesn't even exist on UP. --- include/linux/cpu.h | 9 +++++++++ net/core/flow.c | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 2f374d79f157..02579ec6b99c 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -37,7 +37,12 @@ extern int register_cpu_notifier(struct notifier_block *nb); extern void unregister_cpu_notifier(struct notifier_block *nb); int cpu_up(unsigned int cpu); + +#define lock_cpu_hotplug() down(&cpucontrol) +#define unlock_cpu_hotplug() 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(struct notifier_block *nb) static inline void unregister_cpu_notifier(struct notifier_block *nb) { } + +#define lock_cpu_hotplug() do { } while (0) +#define unlock_cpu_hotplug() do { } while (0) + #endif /* CONFIG_SMP */ extern struct sysdev_class cpu_sysdev_class; diff --git a/net/core/flow.c b/net/core/flow.c index 4c920bb52707..f13a1752b603 100644 --- a/net/core/flow.c +++ b/net/core/flow.c @@ -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); + lock_cpu_hotplug(); 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); + unlock_cpu_hotplug(); } static void __devinit flow_cache_cpu_prepare(int cpu) -- 2.39.5