• Eric DeVolder's avatar
    crash: add generic infrastructure for crash hotplug support · 24726275
    Eric DeVolder authored
    To support crash hotplug, a mechanism is needed to update the crash
    elfcorehdr upon CPU or memory changes (eg.  hot un/plug or off/ onlining).
    The crash elfcorehdr describes the CPUs and memory to be written into the
    vmcore.
    
    To track CPU changes, callbacks are registered with the cpuhp mechanism
    via cpuhp_setup_state_nocalls(CPUHP_BP_PREPARE_DYN).  The crash hotplug
    elfcorehdr update has no explicit ordering requirement (relative to other
    cpuhp states), so meets the criteria for utilizing CPUHP_BP_PREPARE_DYN. 
    CPUHP_BP_PREPARE_DYN is a dynamic state and avoids the need to introduce a
    new state for crash hotplug.  Also, CPUHP_BP_PREPARE_DYN is the last state
    in the PREPARE group, just prior to the STARTING group, which is very
    close to the CPU starting up in a plug/online situation, or stopping in a
    unplug/ offline situation.  This minimizes the window of time during an
    actual plug/online or unplug/offline situation in which the elfcorehdr
    would be inaccurate.  Note that for a CPU being unplugged or offlined, the
    CPU will still be present in the list of CPUs generated by
    crash_prepare_elf64_headers().  However, there is no need to explicitly
    omit the CPU, see justification in 'crash: change
    crash_prepare_elf64_headers() to for_each_possible_cpu()'.
    
    To track memory changes, a notifier is registered to capture the memblock
    MEM_ONLINE and MEM_OFFLINE events via register_memory_notifier().
    
    The CPU callbacks and memory notifiers invoke crash_handle_hotplug_event()
    which performs needed tasks and then dispatches the event to the
    architecture specific arch_crash_handle_hotplug_event() to update the
    elfcorehdr with the current state of CPUs and memory.  During the process,
    the kexec_lock is held.
    
    Link: https://lkml.kernel.org/r/20230814214446.6659-3-eric.devolder@oracle.comSigned-off-by: default avatarEric DeVolder <eric.devolder@oracle.com>
    Reviewed-by: default avatarSourabh Jain <sourabhjain@linux.ibm.com>
    Acked-by: default avatarHari Bathini <hbathini@linux.ibm.com>
    Acked-by: default avatarBaoquan He <bhe@redhat.com>
    Cc: Akhil Raj <lf32.dev@gmail.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Mimi Zohar <zohar@linux.ibm.com>
    Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: "Rafael J. Wysocki" <rafael@kernel.org>
    Cc: Sean Christopherson <seanjc@google.com>
    Cc: Takashi Iwai <tiwai@suse.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Thomas Weißschuh <linux@weissschuh.net>
    Cc: Valentin Schneider <vschneid@redhat.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    24726275
Kconfig.kexec 4.93 KB