Thread (5 messages) 5 messages, 3 authors, 2012-08-18

Re: [PATCH V2] MIPS: Fix poweroff failure when HOTPLUG_CPU configured.

From: Huacai Chen <hidden>
Date: 2012-08-14 14:24:29
Also in: lkml

On Tue, Aug 14, 2012 at 7:48 PM, Ralf Baechle [off-list ref] wrote:
On Mon, Aug 13, 2012 at 08:52:24PM +0800, Huacai Chen wrote:
quoted
When poweroff machine, kernel_power_off() call disable_nonboot_cpus().
And if we have HOTPLUG_CPU configured, disable_nonboot_cpus() is not an
empty function but attempt to actually disable the nonboot cpus. Since
system state is SYSTEM_POWER_OFF, play_dead() won't be called and thus
disable_nonboot_cpus() hangs. Therefore, we make this patch to avoid
poweroff failure.
quoted
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index e9a5fd7..69b17a9 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -72,9 +72,7 @@ void __noreturn cpu_idle(void)
                      }
              }
 #ifdef CONFIG_HOTPLUG_CPU
-             if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map) &&
-                 (system_state == SYSTEM_RUNNING ||
-                  system_state == SYSTEM_BOOTING))
+             if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map))
Looks good - but I'm wondering if the "!cpu_isset(cpu, cpu_callin_map)"
can be removed as well?
For X86, IA64, ARM, SPARC64 and most other arch, "!cpu_online(cpu)" is
the only condition of play_dead(). I keep "!cpu_isset(cpu,
cpu_callin_map)" because this does't refuse poweroff and I don't know
why the old condition of play_dead() is so complex.
Also, which -stable branches is this patch applicable?
3.3, 3.4 and 3.5 branch can use it, 3.2 and earlier kernels should do
some small changes.
  Ralf
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help