Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 574b851e authored by Toshi Kani's avatar Toshi Kani Committed by Rafael J. Wysocki
Browse files

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: default avatarToshi Kani <toshi.kani@hp.com>
Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: default avatarYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent f6913f99
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ int __ref _debug_hotplug_cpu(int cpu, int action)
	if (!cpu_is_hotpluggable(cpu))
		return -EINVAL;

	lock_device_hotplug();
	cpu_hotplug_driver_lock();

	switch (action) {
@@ -91,6 +92,7 @@ int __ref _debug_hotplug_cpu(int cpu, int action)
	}

	cpu_hotplug_driver_unlock();
	unlock_device_hotplug();

	return ret;
}
+22 −2
Original line number Diff line number Diff line
@@ -93,7 +93,17 @@ static ssize_t cpu_probe_store(struct device *dev,
			       const char *buf,
			       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,
@@ -101,7 +111,17 @@ static ssize_t cpu_release_store(struct device *dev,
				 const char *buf,
				 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);