Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

kexec/crash: no crash update when kexec in progress

The following errors are observed when kexec is done with SMT=off on
powerpc.

[ 358.458385] Removing IBM Power 842 compression device
[ 374.795734] kexec_core: Starting new kernel
[ 374.795748] kexec: Waking offline cpu 1.
[ 374.875695] crash hp: kexec_trylock() failed, elfcorehdr may be inaccurate
[ 374.935833] kexec: Waking offline cpu 2.
[ 375.015664] crash hp: kexec_trylock() failed, elfcorehdr may be inaccurate
snip..
[ 375.515823] kexec: Waking offline cpu 6.
[ 375.635667] crash hp: kexec_trylock() failed, elfcorehdr may be inaccurate
[ 375.695836] kexec: Waking offline cpu 7.

To avoid kexec kernel boot failure on PowerPC, all the present CPUs that
are offline are brought online during kexec. For more information, refer
to commit e8e5c2155b00 ("powerpc/kexec: Fix orphaned offline CPUs across
kexec"). Bringing the CPUs online triggers the crash hotplug handler,
crash_handle_hotplug_event(), to update the kdump image. Since the system
is on the kexec kernel boot path and the kexec lock is held, the
crash_handle_hotplug_event() function fails to acquire the same lock to
update the kdump image, resulting in the error messages mentioned above.

To fix this, return from crash_handle_hotplug_event() without printing the
error message if kexec is in progress.

The same applies to the crash_check_hotplug_support() function. Return 0
if kexec is in progress because kernel is not in a position to update the
kdump image.

Link: https://lkml.kernel.org/r/20240921103745.560430-1-sourabhjain@linux.ibm.com
Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Acked-by: Baoquan he <bhe@redhat.com>
Reported-by: Sachin P Bappalige <sachinpb@linux.vnet.ibm.com>
Cc: Hari Bathini <hbathini@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Sourabh Jain and committed by
Andrew Morton
6efbd5dd 5c50b3b8

+4 -2
+4 -2
kernel/crash_core.c
··· 505 505 crash_hotplug_lock(); 506 506 /* Obtain lock while reading crash information */ 507 507 if (!kexec_trylock()) { 508 - pr_info("kexec_trylock() failed, kdump image may be inaccurate\n"); 508 + if (!kexec_in_progress) 509 + pr_info("kexec_trylock() failed, kdump image may be inaccurate\n"); 509 510 crash_hotplug_unlock(); 510 511 return 0; 511 512 } ··· 548 547 crash_hotplug_lock(); 549 548 /* Obtain lock while changing crash information */ 550 549 if (!kexec_trylock()) { 551 - pr_info("kexec_trylock() failed, kdump image may be inaccurate\n"); 550 + if (!kexec_in_progress) 551 + pr_info("kexec_trylock() failed, kdump image may be inaccurate\n"); 552 552 crash_hotplug_unlock(); 553 553 return; 554 554 }