From: Dengcheng Zhu <dzhu@wavecomp.com>
To: pburton@wavecomp.com, ralf@linux-mips.org
Cc: linux-mips@linux-mips.org, rachel.mozes@intel.com,
Dengcheng Zhu <dzhu@wavecomp.com>
Subject: [PATCH v4 4/6] MIPS: kexec: Do not flush system wide caches in machine_kexec()
Date: Wed, 5 Sep 2018 08:59:07 -0700 [thread overview]
Message-ID: <20180905155909.30454-5-dzhu@wavecomp.com> (raw)
In-Reply-To: <20180905155909.30454-1-dzhu@wavecomp.com>
Instead of __flush_cache_all(), simply flush local icache range. In systems
without IOCU, flushing system wide caches require sending IPIs. But other
CPUs have disabled local IRQs waiting for the reboot signal. It will then
cause system hang.
This patch fixes this problem.
Tested-by: Rachel Mozes <rachel.mozes@intel.com>
Reported-by: Rachel Mozes <rachel.mozes@intel.com>
Signed-off-by: Dengcheng Zhu <dzhu@wavecomp.com>
---
arch/mips/kernel/machine_kexec.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/arch/mips/kernel/machine_kexec.c b/arch/mips/kernel/machine_kexec.c
index baffc7113204..c2119e448490 100644
--- a/arch/mips/kernel/machine_kexec.c
+++ b/arch/mips/kernel/machine_kexec.c
@@ -139,7 +139,16 @@ machine_kexec(struct kimage *image)
printk("Will call new kernel at %08lx\n", image->start);
printk("Bye ...\n");
- __flush_cache_all();
+ /*
+ * __flush_cache_all() is expensive but unnecessary. More
+ * importantly, it could freeze the system as it may need to send
+ * IPIs, whereas other CPUs have been waiting for the reboot signal
+ * (kexec_ready_to_reboot) with local irqs disabled, because
+ * machine_crash_shutdown() has been called prior to entering
+ * this function - machine_kexec().
+ */
+ local_flush_icache_range(reboot_code_buffer,
+ reboot_code_buffer + relocate_new_kernel_size);
#ifdef CONFIG_SMP
atomic_set(&kexec_ready_to_reboot, 1);
--
2.17.1
next prev parent reply other threads:[~2018-09-05 16:02 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-05 15:59 [PATCH v4 0/6] MIPS: kexec/kdump: Fix smp reboot and other issues Dengcheng Zhu
2018-09-05 15:59 ` [PATCH v4 1/6] MIPS: Make play_dead() work for kexec Dengcheng Zhu
2018-09-05 15:59 ` [PATCH v4 2/6] MIPS: kexec: Let the new kernel handle all CPUs Dengcheng Zhu
2018-09-05 15:59 ` [PATCH v4 3/6] MIPS: kexec: Deprecate (relocated_)kexec_smp_wait Dengcheng Zhu
2018-09-05 15:59 ` Dengcheng Zhu [this message]
2018-09-05 15:59 ` [PATCH v4 5/6] MIPS: kexec: Relax memory restriction Dengcheng Zhu
2018-09-05 15:59 ` [PATCH v4 6/6] MIPS: kexec: Use prepare method from Generic for UHI platforms Dengcheng Zhu
2018-09-05 22:54 ` [PATCH v4 0/6] MIPS: kexec/kdump: Fix smp reboot and other issues Paul Burton
2018-09-06 19:19 ` Dengcheng Zhu
2018-09-06 20:34 ` Paul Burton
2018-09-06 22:23 ` Dengcheng Zhu
2018-09-06 23:21 ` Paul Burton
2018-09-07 19:47 ` Dengcheng Zhu
2018-09-07 19:47 ` Dengcheng Zhu
2018-09-07 21:42 ` Paul Burton
2018-09-07 22:21 ` Dengcheng Zhu
2018-09-07 22:21 ` Dengcheng Zhu
2018-09-07 23:11 ` Paul Burton
2018-09-07 23:31 ` Dengcheng Zhu
2018-09-07 23:31 ` Dengcheng Zhu
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=20180905155909.30454-5-dzhu@wavecomp.com \
--to=dzhu@wavecomp.com \
--cc=linux-mips@linux-mips.org \
--cc=pburton@wavecomp.com \
--cc=rachel.mozes@intel.com \
--cc=ralf@linux-mips.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.