This patch shuts down all secondary cpus before executing machine_kexec. This avoids paging errors and random hangups when doing kexec.
Signed-off-by: Daniel Danzberger <[email protected]> --- .../120-mt7621-kexec-smp-shutdown.patch | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 target/linux/ramips/patches-4.14/120-mt7621-kexec-smp-shutdown.patch diff --git a/target/linux/ramips/patches-4.14/120-mt7621-kexec-smp-shutdown.patch b/target/linux/ramips/patches-4.14/120-mt7621-kexec-smp-shutdown.patch new file mode 100644 index 0000000000..a4c0e59521 --- /dev/null +++ b/target/linux/ramips/patches-4.14/120-mt7621-kexec-smp-shutdown.patch @@ -0,0 +1,65 @@ +From 17288381dfc3e920d81cfd4e63e33e3630d54a58 Mon Sep 17 00:00:00 2001 +From: Daniel Danzberger <[email protected]> +Date: Sat, 22 Dec 2018 22:20:37 +0100 +Subject: [PATCH] mt7621: kexec: shutdown secondary cpus + +Signed-off-by: Daniel Danzberger <[email protected]> +--- + arch/mips/ralink/mt7621.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/arch/mips/ralink/mt7621.c b/arch/mips/ralink/mt7621.c +index 801edf9..34dced6 100644 +--- a/arch/mips/ralink/mt7621.c ++++ b/arch/mips/ralink/mt7621.c +@@ -13,6 +13,7 @@ + #include <linux/clk.h> + #include <linux/clkdev.h> + #include <linux/clk-provider.h> ++#include <linux/cpu.h> + #include <dt-bindings/clock/mt7621-clk.h> + + #include <asm/mipsregs.h> +@@ -23,6 +24,7 @@ + #include <asm/mips-boards/launch.h> + #include <asm/delay.h> + #include <asm/time.h> ++#include <asm/kexec.h> + + #include <pinmux.h> + +@@ -271,6 +273,21 @@ static int udelay_recal(void) + } + device_initcall(udelay_recal); + ++#ifdef CONFIG_KEXEC ++static void mt7621_kexec_shutdown(void) ++{ ++ int reboot_cpu = 0; ++ int cpu; ++ ++ for_each_online_cpu(cpu) { ++ if (cpu != reboot_cpu) ++ cpu_down(cpu); ++ } ++ cpu_hotplug_disable(); ++} ++#endif ++ ++ + void prom_soc_init(struct ralink_soc_info *soc_info) + { + void __iomem *sysc = (void __iomem *) KSEG1ADDR(MT7621_SYSC_BASE); +@@ -325,6 +342,9 @@ void prom_soc_init(struct ralink_soc_info *soc_info) + + rt2880_pinmux_data = mt7621_pinmux_data; + ++#ifdef CONFIG_KEXEC ++ _machine_kexec_shutdown = mt7621_kexec_shutdown; ++#endif + + if (!register_cps_smp_ops()) + return; +-- +2.11.0 + -- 2.20.1 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
