On 08/20/25 at 09:35pm, Baoquan He wrote: > On 08/20/25 at 05:14pm, Jinchao Wang wrote: > > crash_kexec() had its own code to exclude > > parallel execution by setting panic_cpu. > > This is already handled by panic_try_start(). > > > > Switch to panic_try_start() to remove the > > duplication and keep the logic consistent. > > > > Signed-off-by: Jinchao Wang <wangjinchao...@gmail.com> > > --- > > kernel/crash_core.c | 15 +++------------ > > 1 file changed, 3 insertions(+), 12 deletions(-) > > > > diff --git a/kernel/crash_core.c b/kernel/crash_core.c > > index a4ef79591eb2..bb38bbaf3a26 100644 > > --- a/kernel/crash_core.c > > +++ b/kernel/crash_core.c > > @@ -4,6 +4,7 @@ > > * Copyright (C) 2002-2004 Eric Biederman <ebied...@xmission.com> > > */ > > > > +#include "linux/panic.h" > > #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt > > > > #include <linux/buildid.h> > > @@ -143,17 +144,7 @@ STACK_FRAME_NON_STANDARD(__crash_kexec); > > > > __bpf_kfunc void crash_kexec(struct pt_regs *regs) > > { > > - int old_cpu, this_cpu; > > - > > - /* > > - * Only one CPU is allowed to execute the crash_kexec() code as with > > - * panic(). Otherwise parallel calls of panic() and crash_kexec() > > - * may stop each other. To exclude them, we use panic_cpu here too. > > - */ > > - old_cpu = PANIC_CPU_INVALID; > > - this_cpu = raw_smp_processor_id(); > > - > > - if (atomic_try_cmpxchg(&panic_cpu, &old_cpu, this_cpu)) { > > + if (panic_try_start()) { > > Seriously, where can I find this panic_try_start() and the > panic_reset()?
Ok, just found it's in a patch series. Grabbed the patchset and will have a look. > > > /* This is the 1st CPU which comes here, so go ahead. */ > > __crash_kexec(regs); > > > > @@ -161,7 +152,7 @@ __bpf_kfunc void crash_kexec(struct pt_regs *regs) > > * Reset panic_cpu to allow another panic()/crash_kexec() > > * call. > > */ > > - atomic_set(&panic_cpu, PANIC_CPU_INVALID); > > + panic_reset(); > > } > > } > > > > -- > > 2.43.0 > > >