Commit 3f8517e7 authored by Nicolas Pitre's avatar Nicolas Pitre Committed by Russell King

ARM: 8063/1: bL_switcher: fix individual online status reporting of removed CPUs

The content of /sys/devices/system/cpu/cpu*/online  is still 1 for those
CPUs that the switcher has removed even though the global state in
/sys/devices/system/cpu/online is updated correctly.

It turns out that commit 0902a904 ("Driver core: Use generic
offline/online for CPU offline/online") has changed the way those files
retrieve their content by relying on on the generic attribute handling
code.  The switcher, by calling cpu_down() directly, bypasses this
handling and the attribute value doesn't get updated.

Fix this by calling device_offline()/device_online() instead.
Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 483a6c9d
...@@ -433,8 +433,12 @@ static void bL_switcher_restore_cpus(void) ...@@ -433,8 +433,12 @@ static void bL_switcher_restore_cpus(void)
{ {
int i; int i;
for_each_cpu(i, &bL_switcher_removed_logical_cpus) for_each_cpu(i, &bL_switcher_removed_logical_cpus) {
cpu_up(i); struct device *cpu_dev = get_cpu_device(i);
int ret = device_online(cpu_dev);
if (ret)
dev_err(cpu_dev, "switcher: unable to restore CPU\n");
}
} }
static int bL_switcher_halve_cpus(void) static int bL_switcher_halve_cpus(void)
...@@ -521,7 +525,7 @@ static int bL_switcher_halve_cpus(void) ...@@ -521,7 +525,7 @@ static int bL_switcher_halve_cpus(void)
continue; continue;
} }
ret = cpu_down(i); ret = device_offline(get_cpu_device(i));
if (ret) { if (ret) {
bL_switcher_restore_cpus(); bL_switcher_restore_cpus();
return ret; return 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