Commit 27261435 authored by Nicolas Pitre's avatar Nicolas Pitre

ARM: bL_switcher: filter CPU hotplug requests when the switcher is active

Trying to support both the switcher and CPU hotplug at the same time
is tricky due to ambiguous semantics.  So let's at least prevent users
from messing around with those logical CPUs the switcher has removed
and those which were not active when the switcher was activated.
Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
parent 38c35d4f
...@@ -554,6 +554,26 @@ static int __init bL_switcher_sysfs_init(void) ...@@ -554,6 +554,26 @@ static int __init bL_switcher_sysfs_init(void)
#endif /* CONFIG_SYSFS */ #endif /* CONFIG_SYSFS */
/*
* Veto any CPU hotplug operation on those CPUs we've removed
* while the switcher is active.
* We're just not ready to deal with that given the trickery involved.
*/
static int bL_switcher_hotplug_callback(struct notifier_block *nfb,
unsigned long action, void *hcpu)
{
if (bL_switcher_active) {
int pairing = bL_switcher_cpu_pairing[(unsigned long)hcpu];
switch (action & 0xf) {
case CPU_UP_PREPARE:
case CPU_DOWN_PREPARE:
if (pairing == -1)
return NOTIFY_BAD;
}
}
return NOTIFY_DONE;
}
static bool no_bL_switcher; static bool no_bL_switcher;
core_param(no_bL_switcher, no_bL_switcher, bool, 0644); core_param(no_bL_switcher, no_bL_switcher, bool, 0644);
...@@ -566,6 +586,8 @@ static int __init bL_switcher_init(void) ...@@ -566,6 +586,8 @@ static int __init bL_switcher_init(void)
return -EINVAL; return -EINVAL;
} }
cpu_notifier(bL_switcher_hotplug_callback, 0);
if (!no_bL_switcher) { if (!no_bL_switcher) {
ret = bL_switcher_enable(); ret = bL_switcher_enable();
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment