ARM: bL_switcher: veto CPU hotplug requests when the switcher is active
authorNicolas Pitre <nicolas.pitre@linaro.org>
Tue, 27 Nov 2012 03:48:55 +0000 (22:48 -0500)
committerNicolas Pitre <nicolas.pitre@linaro.org>
Wed, 19 Jun 2013 20:54:24 +0000 (16:54 -0400)
Trying to support both the switcher and CPU hotplug at the same time
is quickly becoming very complex due to ambiguous semantics.  So let's
simply veto any hotplug requests when the switcher is active for now.

This restriction might be loosened eventually.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
arch/arm/common/bL_switcher.c

index f9b6b4607ba5fd8e59bcc5d80f592f483777e18c..e66f9227922b3c3ac31d75375c82a4f4732286d0 100644 (file)
@@ -530,6 +530,25 @@ static int __init bL_switcher_sysfs_init(void)
 
 #endif  /* CONFIG_SYSFS */
 
+/*
+ * Veto any CPU hotplug operation 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)
+{
+       switch (action) {
+       case CPU_UP_PREPARE:
+       case CPU_DOWN_PREPARE:
+               if (bL_switcher_active)
+                       return NOTIFY_BAD;
+       }
+       return NOTIFY_DONE;
+}
+
+static struct notifier_block bL_switcher_hotplug_notifier =
+        { &bL_switcher_hotplug_callback, NULL, 0 };
+
 static bool no_bL_switcher;
 core_param(no_bL_switcher, no_bL_switcher, bool, 0644);
 
@@ -542,6 +561,8 @@ static int __init bL_switcher_init(void)
                return -EINVAL;
        }
 
+       register_cpu_notifier(&bL_switcher_hotplug_notifier);
+
        if (!no_bL_switcher) {
                ret = bL_switcher_enable();
                if (ret)