From: wangyufen@huawei.com (wangyufen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] ARM:kexec:offline panic_smp_self_stop CPU
Date: Fri, 2 Nov 2018 10:31:27 +0800 [thread overview]
Message-ID: <5BDBB6FF.6080907@huawei.com> (raw)
In-Reply-To: <20181101113430.GO30658@n2100.armlinux.org.uk>
In case panic() and panic() called at the same time on different CPUS.
For example:
CPU 0:
panic()
__crash_kexec
machine_crash_shutdown
crash_smp_send_stop
machine_kexec
BUG_ON(num_online_cpus() > 1);
CPU 1:
panic()
local_irq_disable
panic_smp_self_stop
If CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop(), kdump
fails. CPU1 can't receive the ipi irq, CPU1 will be always online.
To fix this problem, this patch split out the panic_smp_self_stop()
and add set_cpu_online(smp_processor_id(), false).
Signed-off-by: Yufen Wang <wangyufen@huawei.com>
---
arch/arm/kernel/smp.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 9000d8b..d7b86e4 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -682,6 +682,21 @@ void smp_send_stop(void)
pr_warn("SMP: failed to stop secondary CPUs\n");
}
+/* In case panic() and panic() called at the same time on CPU1 and CPU2,
+ * and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop()
+ * CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online,
+ * kdump fails. So split out the panic_smp_self_stop() and add
+ * set_cpu_online(smp_processor_id(), false).
+ */
+void panic_smp_self_stop(void)
+{
+ pr_debug("CPU %u will stop doing anything useful since another CPU has paniced\n",
+ smp_processor_id());
+ set_cpu_online(smp_processor_id(), false);
+ while (1)
+ cpu_relax();
+}
+
/*
* not supported here
*/
--
2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: wangyufen <wangyufen@huawei.com>
To: Russell King - ARM Linux <linux@armlinux.org.uk>
Cc: <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <akpm@linux-foundation.org>,
<kstewart@linuxfoundation.org>, <rppt@linux.vnet.ibm.com>,
<gregkh@linuxfoundation.org>, <tglx@linutronix.de>,
<pombredanne@nexb.com>, <weiyongjun1@huawei.com>,
<huawei.libin@huawei.com>, Wangyufen <wangyufen@huawei.com>
Subject: [PATCH v2] ARM:kexec:offline panic_smp_self_stop CPU
Date: Fri, 2 Nov 2018 10:31:27 +0800 [thread overview]
Message-ID: <5BDBB6FF.6080907@huawei.com> (raw)
In-Reply-To: <20181101113430.GO30658@n2100.armlinux.org.uk>
In case panic() and panic() called at the same time on different CPUS.
For example:
CPU 0:
panic()
__crash_kexec
machine_crash_shutdown
crash_smp_send_stop
machine_kexec
BUG_ON(num_online_cpus() > 1);
CPU 1:
panic()
local_irq_disable
panic_smp_self_stop
If CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop(), kdump
fails. CPU1 can't receive the ipi irq, CPU1 will be always online.
To fix this problem, this patch split out the panic_smp_self_stop()
and add set_cpu_online(smp_processor_id(), false).
Signed-off-by: Yufen Wang <wangyufen@huawei.com>
---
arch/arm/kernel/smp.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 9000d8b..d7b86e4 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -682,6 +682,21 @@ void smp_send_stop(void)
pr_warn("SMP: failed to stop secondary CPUs\n");
}
+/* In case panic() and panic() called at the same time on CPU1 and CPU2,
+ * and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop()
+ * CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online,
+ * kdump fails. So split out the panic_smp_self_stop() and add
+ * set_cpu_online(smp_processor_id(), false).
+ */
+void panic_smp_self_stop(void)
+{
+ pr_debug("CPU %u will stop doing anything useful since another CPU has paniced\n",
+ smp_processor_id());
+ set_cpu_online(smp_processor_id(), false);
+ while (1)
+ cpu_relax();
+}
+
/*
* not supported here
*/
--
2.7.4
next prev parent reply other threads:[~2018-11-02 2:31 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-01 11:20 [PATCH] ARM:kexec:offline panic_smp_self_stop CPU Wang Yufen
2018-11-01 11:20 ` Wang Yufen
2018-11-01 11:34 ` Russell King - ARM Linux
2018-11-01 11:34 ` Russell King - ARM Linux
2018-11-02 1:17 ` wangyufen
2018-11-02 1:17 ` wangyufen
2018-11-02 2:31 ` wangyufen [this message]
2018-11-02 2:31 ` [PATCH v2] " wangyufen
2018-11-02 9:55 ` Russell King - ARM Linux
2018-11-02 9:55 ` Russell King - ARM Linux
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5BDBB6FF.6080907@huawei.com \
--to=wangyufen@huawei.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.