]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sparc64: Set cpu state to offline when stopped
authorVijay Kumar <vijay.ac.kumar@oracle.com>
Wed, 1 Feb 2017 19:34:37 +0000 (11:34 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 15 Jun 2017 03:43:47 +0000 (20:43 -0700)
CPU needs to be marked offline before stopping it. When not marked
offline, the xcall receives HV_EWOULDBLOCK and so assumes that not all
CPUs received the message, and retries. After 10000 retries, it finally
fails with fatal mondo timeout.

Signed-off-by: Vijay Kumar <vijay.ac.kumar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit cffb3e76818fee4763a2ce5f2b1eca2d7885e2cf)

Signed-off-by: Vijay Kumar <vijay.ac.kumar@oracle.com>
Orabug: 24297427

arch/sparc/kernel/smp_64.c

index 3210a3db13cd0acea7d301ef08789f43dc1f81ac..e846288e2a3b8e880dd8214f136b8e3a24698646 100644 (file)
@@ -1535,6 +1535,7 @@ void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs)
 
 static void stop_this_cpu(void *dummy)
 {
+       set_cpu_online(smp_processor_id(), false);
        prom_stopself();
 }
 
@@ -1546,6 +1547,8 @@ void smp_send_stop(void)
                for_each_online_cpu(cpu) {
                        if (cpu == smp_processor_id())
                                continue;
+
+                       set_cpu_online(cpu, false);
 #ifdef CONFIG_SUN_LDOMS
                        if (ldom_domaining_enabled) {
                                unsigned long hv_err;