提交 574b851e 编写于 作者: T Toshi Kani 提交者: Rafael J. Wysocki

hotplug / x86: Add hotplug lock to missing places

lock_device_hotplug[_sysfs]() serializes CPU & Memory online/offline
and hotplug operations.  However, this lock is not held in the debug
interfaces below that initiate CPU online/offline operations.

 - _debug_hotplug_cpu(), cpu0 hotplug test interface enabled by
   CONFIG_DEBUG_HOTPLUG_CPU0.
 - cpu_probe_store() and cpu_release_store(), cpu hotplug test interface
   enabled by CONFIG_ARCH_CPU_PROBE_RELEASE.

This patch changes the above interfaces to hold lock_device_hotplug().
Signed-off-by: NToshi Kani <toshi.kani@hp.com>
Acked-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: NYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
上级 f6913f99
...@@ -65,6 +65,7 @@ int __ref _debug_hotplug_cpu(int cpu, int action) ...@@ -65,6 +65,7 @@ int __ref _debug_hotplug_cpu(int cpu, int action)
if (!cpu_is_hotpluggable(cpu)) if (!cpu_is_hotpluggable(cpu))
return -EINVAL; return -EINVAL;
lock_device_hotplug();
cpu_hotplug_driver_lock(); cpu_hotplug_driver_lock();
switch (action) { switch (action) {
...@@ -91,6 +92,7 @@ int __ref _debug_hotplug_cpu(int cpu, int action) ...@@ -91,6 +92,7 @@ int __ref _debug_hotplug_cpu(int cpu, int action)
} }
cpu_hotplug_driver_unlock(); cpu_hotplug_driver_unlock();
unlock_device_hotplug();
return ret; return ret;
} }
......
...@@ -93,7 +93,17 @@ static ssize_t cpu_probe_store(struct device *dev, ...@@ -93,7 +93,17 @@ static ssize_t cpu_probe_store(struct device *dev,
const char *buf, const char *buf,
size_t count) size_t count)
{ {
return arch_cpu_probe(buf, count); ssize_t cnt;
int ret;
ret = lock_device_hotplug_sysfs();
if (ret)
return ret;
cnt = arch_cpu_probe(buf, count);
unlock_device_hotplug();
return cnt;
} }
static ssize_t cpu_release_store(struct device *dev, static ssize_t cpu_release_store(struct device *dev,
...@@ -101,7 +111,17 @@ static ssize_t cpu_release_store(struct device *dev, ...@@ -101,7 +111,17 @@ static ssize_t cpu_release_store(struct device *dev,
const char *buf, const char *buf,
size_t count) size_t count)
{ {
return arch_cpu_release(buf, count); ssize_t cnt;
int ret;
ret = lock_device_hotplug_sysfs();
if (ret)
return ret;
cnt = arch_cpu_release(buf, count);
unlock_device_hotplug();
return cnt;
} }
static DEVICE_ATTR(probe, S_IWUSR, NULL, cpu_probe_store); static DEVICE_ATTR(probe, S_IWUSR, NULL, cpu_probe_store);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册