• Sourabh Jain's avatar
    powerpc/crash: add crash CPU hotplug support · b741092d
    Sourabh Jain authored
    Due to CPU/Memory hotplug or online/offline events, the elfcorehdr
    (which describes the CPUs and memory of the crashed kernel) and FDT
    (Flattened Device Tree) of kdump image becomes outdated. Consequently,
    attempting dump collection with an outdated elfcorehdr or FDT can lead
    to failed or inaccurate dump collection.
    
    Going forward, CPU hotplug or online/offline events are referred as
    CPU/Memory add/remove events.
    
    The current solution to address the above issue involves monitoring the
    CPU/Memory add/remove events in userspace using udev rules and whenever
    there are changes in CPU and memory resources, the entire kdump image
    is loaded again. The kdump image includes kernel, initrd, elfcorehdr,
    FDT, purgatory. Given that only elfcorehdr and FDT get outdated due to
    CPU/Memory add/remove events, reloading the entire kdump image is
    inefficient. More importantly, kdump remains inactive for a substantial
    amount of time until the kdump reload completes.
    
    To address the aforementioned issue, commit 24726275 ("crash: add
    generic infrastructure for crash hotplug support") added a generic
    infrastructure that allows architectures to selectively update the kdump
    image component during CPU or memory add/remove events within the kernel
    itself.
    
    In the event of a CPU or memory add/remove events, the generic crash
    hotplug event handler, `crash_handle_hotplug_event()`, is triggered. It
    then acquires the necessary locks to update the kdump image and invokes
    the architecture-specific crash hotplug handler,
    `arch_crash_handle_hotplug_event()`, to update the required kdump image
    components.
    
    This patch adds crash hotplug handler for PowerPC and enable support to
    update the kdump image on CPU add/remove events. Support for memory
    add/remove events is added in a subsequent patch with the title
    "powerpc: add crash memory hotplug support"
    
    As mentioned earlier, only the elfcorehdr and FDT kdump image components
    need to be updated in the event of CPU or memory add/remove events.
    However, on PowerPC architecture crash hotplug handler only updates the
    FDT to enable crash hotplug support for CPU add/remove events. Here's
    why.
    
    The elfcorehdr on PowerPC is built with possible CPUs, and thus, it does
    not need an update on CPU add/remove events. On the other hand, the FDT
    needs to be updated on CPU add events to include the newly added CPU. If
    the FDT is not updated and the kernel crashes on a newly added CPU, the
    kdump kernel will fail to boot due to the unavailability of the crashing
    CPU in the FDT. During the early boot, it is expected that the boot CPU
    must be a part of the FDT; otherwise, the kernel will raise a BUG and
    fail to boot. For more information, refer to commit 36ae37e3
    ("powerpc: Make boot_cpuid common between 32 and 64-bit"). Since it is
    okay to have an offline CPU in the kdump FDT, no action is taken in case
    of CPU removal.
    
    There are two system calls, `kexec_file_load` and `kexec_load`, used to
    load the kdump image. Few changes have been made to ensure kernel can
    safely update the FDT of kdump image loaded using both system calls.
    
    For kexec_file_load syscall the kdump image is prepared in kernel. So to
    support an increasing number of CPUs, the FDT is constructed with extra
    buffer space to ensure it can accommodate a possible number of CPU
    nodes. Additionally, a call to fdt_pack (which trims the unused space
    once the FDT is prepared) is avoided if this feature is enabled.
    
    For the kexec_load syscall, the FDT is updated only if the
    KEXEC_CRASH_HOTPLUG_SUPPORT kexec flag is passed to the kernel by
    userspace (kexec tools). When userspace passes this flag to the kernel,
    it indicates that the FDT is built to accommodate possible CPUs, and the
    FDT segment is excluded from SHA calculation, making it safe to update.
    
    The changes related to this feature are kept under the CRASH_HOTPLUG
    config, and it is enabled by default.
    Signed-off-by: default avatarSourabh Jain <sourabhjain@linux.ibm.com>
    Acked-by: default avatarHari Bathini <hbathini@linux.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240326055413.186534-6-sourabhjain@linux.ibm.com
    b741092d
Kconfig 40 KB