mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:04:43 +01:00
s390/kdump: Provide is_kdump_kernel() implementation
s390 sets "elfcorehdr_addr = ELFCORE_ADDR_MAX;" early during
setup_arch() to deactivate the "elfcorehdr= kernel" parameter,
resulting in is_kdump_kernel() returning "false".
During vmcore_init()->elfcorehdr_alloc(), if on a dump kernel and
allocation succeeded, elfcorehdr_addr will be set to a valid address
and is_kdump_kernel() will consequently return "true".
is_kdump_kernel() should return a consistent result during all boot
stages, and properly return "true" if in a kdump environment - just
like it is done on powerpc where "false" is indicated in fadump
environments, as added in commit b098f1c323 ("powerpc/fadump: make
is_kdump_kernel() return false when fadump is active").
Similarly provide a custom is_kdump_kernel() implementation that will only
return "true" in kdump environments, and will do so consistently during
boot.
Update the documentation of dump_available().
Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com>
Link: https://lore.kernel.org/r/20241023090651.1115507-1-david@redhat.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
2835f8bf55
commit
82a0fcb1ad
3 changed files with 22 additions and 8 deletions
|
|
@ -94,6 +94,9 @@ void arch_kexec_protect_crashkres(void);
|
|||
|
||||
void arch_kexec_unprotect_crashkres(void);
|
||||
#define arch_kexec_unprotect_crashkres arch_kexec_unprotect_crashkres
|
||||
|
||||
bool is_kdump_kernel(void);
|
||||
#define is_kdump_kernel is_kdump_kernel
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KEXEC_FILE
|
||||
|
|
|
|||
|
|
@ -237,6 +237,17 @@ int remap_oldmem_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
|||
prot);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return true only when in a kdump or stand-alone kdump environment.
|
||||
* Note that /proc/vmcore might also be available in "standard zfcp/nvme dump"
|
||||
* environments, where this function returns false; see dump_available().
|
||||
*/
|
||||
bool is_kdump_kernel(void)
|
||||
{
|
||||
return oldmem_data.start;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(is_kdump_kernel);
|
||||
|
||||
static const char *nt_name(Elf64_Word type)
|
||||
{
|
||||
const char *name = "LINUX";
|
||||
|
|
|
|||
|
|
@ -574,7 +574,7 @@ int smp_store_status(int cpu)
|
|||
|
||||
/*
|
||||
* Collect CPU state of the previous, crashed system.
|
||||
* There are four cases:
|
||||
* There are three cases:
|
||||
* 1) standard zfcp/nvme dump
|
||||
* condition: OLDMEM_BASE == NULL && is_ipl_type_dump() == true
|
||||
* The state for all CPUs except the boot CPU needs to be collected
|
||||
|
|
@ -587,16 +587,16 @@ int smp_store_status(int cpu)
|
|||
* with sigp stop-and-store-status. The firmware or the boot-loader
|
||||
* stored the registers of the boot CPU in the absolute lowcore in the
|
||||
* memory of the old system.
|
||||
* 3) kdump and the old kernel did not store the CPU state,
|
||||
* or stand-alone kdump for DASD
|
||||
* condition: OLDMEM_BASE != NULL && !is_kdump_kernel()
|
||||
* 3) kdump or stand-alone kdump for DASD
|
||||
* condition: OLDMEM_BASE != NULL && is_ipl_type_dump() == false
|
||||
* The state for all CPUs except the boot CPU needs to be collected
|
||||
* with sigp stop-and-store-status. The kexec code or the boot-loader
|
||||
* stored the registers of the boot CPU in the memory of the old system.
|
||||
* 4) kdump and the old kernel stored the CPU state
|
||||
* condition: OLDMEM_BASE != NULL && is_kdump_kernel()
|
||||
* This case does not exist for s390 anymore, setup_arch explicitly
|
||||
* deactivates the elfcorehdr= kernel parameter
|
||||
*
|
||||
* Note that the legacy kdump mode where the old kernel stored the CPU states
|
||||
* does no longer exist: setup_arch() explicitly deactivates the elfcorehdr=
|
||||
* kernel parameter. The is_kdump_kernel() implementation on s390 is independent
|
||||
* of the elfcorehdr= parameter.
|
||||
*/
|
||||
static bool dump_available(void)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue