[PATCH V3] MIPS: Loongson64: Add kexec/kdump support
Jinyang He
hejinyang at loongson.cn
Tue Jan 19 20:49:19 EST 2021
On 01/20/2021 05:08 AM, Thomas Bogendoerfer wrote:
> On Fri, Jan 08, 2021 at 06:07:39PM +0800, Jinyang He wrote:
>> Unlike the cavium-octeon platform, the Loongson64 platform needs some
>> changes. Before the kernel starts, (before entering the kernel_entry), each
>> CPU has its own state (the SMP system). For Loongson64, only the boot CPU
>> will enter the kernel_entry, and other CPUs will query their mailbox value
>> in a loop. This is what the BIOS does for the CPU. Here is different from
>> cavium-octeon. All CPUs will enter the kernel_entry on cavium-octeon
>> platform. Then the kernel_entry_setup, the co-CPUs will enter the query
>> loop. I saw the kernel_entry_setup of other platforms, such as ip27, malta,
>> and generic. They are not like cavium-octeon and the co-CPUs entering the
>> loop may be earlier than entering kernel_entry. So I have reason to guess
>> that most SMP system platform CPUs are similar to Loongson64.
>>
>> relocate_kernel.S is like BIOS doing s omething for the CPU. It allows the
>> boot CPU to start from the new kernel_entry and makes the co-CPUs enter a
>> loop. The already existing infrastructure may be more suitable for non-smp
>> platforms. Although we can do something with plat_smp_ops.kexec_nonboot_cpu,
>> more new problems will arise in that case. The kexec process actually runs
>> on a copy of relocate_kernel.S, which will bring a lot of problems...
>>
>> Above all just my personal thoughts.
> thank you for describing current state. So it looks like kexec and SMP
> is probably only working for Octeon and maybe some MIPS VPE based SMP
> systems, but not with "real" cores.
>
> How about the patch below as preparation for your loongson64 kexec patch ?
> You only need to put write a kexec_smp_wait_final macro and the rest of
> your patch stays the same...
>
> Thomas.
Thank you for this patch. By applying your patch and the revised Huacai's
patch, kexec works well on the Loongson-3A4000. I compared the assembly
code, too. It's the same as the previous patch doing. I think it's correct.
Huacai, how do you think about it?
Thanks, :-)
Jinyang
>
> From 81d3e1e24a0dae48f310b8d819d625f88139ef9b Mon Sep 17 00:00:00 2001
> From: Thomas Bogendoerfer <tsbogend at alpha.franken.de>
> Date: Tue, 19 Jan 2021 21:58:55 +0100
> Subject: [PATCH] MIPS: Use macro for kexec_smp_wait specials
>
> Signed-off-by: Thomas Bogendoerfer <tsbogend at alpha.franken.de>
> ---
> .../include/asm/mach-cavium-octeon/kernel-entry-init.h | 8 ++++++++
> arch/mips/kernel/relocate_kernel.S | 9 ++++-----
> 2 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h b/arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h
> index c38b38ce5a3d..b071a7353ee1 100644
> --- a/arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h
> +++ b/arch/mips/include/asm/mach-cavium-octeon/kernel-entry-init.h
> @@ -157,4 +157,12 @@
> .macro smp_slave_setup
> .endm
>
> +#define USE_KEXEC_SMP_WAIT_FINAL
> + .macro kexec_smp_wait_final
> + .set push
> + .set noreorder
> + synci 0($0)
> + .set pop
> + .endm
> +
> #endif /* __ASM_MACH_CAVIUM_OCTEON_KERNEL_ENTRY_H */
> diff --git a/arch/mips/kernel/relocate_kernel.S b/arch/mips/kernel/relocate_kernel.S
> index ac870893ba2d..f3c908abdbb8 100644
> --- a/arch/mips/kernel/relocate_kernel.S
> +++ b/arch/mips/kernel/relocate_kernel.S
> @@ -11,6 +11,8 @@
> #include <asm/stackframe.h>
> #include <asm/addrspace.h>
>
> +#include <kernel-entry-init.h>
> +
> LEAF(relocate_new_kernel)
> PTR_L a0, arg0
> PTR_L a1, arg1
> @@ -125,11 +127,8 @@ LEAF(kexec_smp_wait)
> 1: LONG_L s0, (t0)
> bne s0, zero,1b
>
> -#ifdef CONFIG_CPU_CAVIUM_OCTEON
> - .set push
> - .set noreorder
> - synci 0($0)
> - .set pop
> +#ifdef USE_KEXEC_SMP_WAIT_FINAL
> + kexec_smp_wait_final
> #else
> sync
> #endif
More information about the kexec
mailing list