| From: Eric DeVolder <eric.devolder@oracle.com> |
| Subject: x86/crash: optimize CPU changes |
| Date: Mon, 14 Aug 2023 17:44:46 -0400 |
| |
| crash_prepare_elf64_headers() writes into the elfcorehdr an ELF PT_NOTE |
| for all possible CPUs. As such, subsequent changes to CPUs (ie. hot |
| un/plug, online/offline) do not need to rewrite the elfcorehdr. |
| |
| The kimage->file_mode term covers kdump images loaded via the |
| kexec_file_load() syscall. Since crash_prepare_elf64_headers() wrote the |
| initial elfcorehdr, no update to the elfcorehdr is needed for CPU changes. |
| |
| The kimage->elfcorehdr_updated term covers kdump images loaded via the |
| kexec_load() syscall. At least one memory or CPU change must occur to |
| cause crash_prepare_elf64_headers() to rewrite the elfcorehdr. |
| Afterwards, no update to the elfcorehdr is needed for CPU changes. |
| |
| This code is intentionally *NOT* hoisted into crash_handle_hotplug_event() |
| as it would prevent the arch-specific handler from running for CPU |
| changes. This would break PPC, for example, which needs to update other |
| information besides the elfcorehdr, on CPU changes. |
| |
| Link: https://lkml.kernel.org/r/20230814214446.6659-9-eric.devolder@oracle.com |
| Signed-off-by: Eric DeVolder <eric.devolder@oracle.com> |
| Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com> |
| Acked-by: Hari Bathini <hbathini@linux.ibm.com> |
| Acked-by: Baoquan 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: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| arch/x86/kernel/crash.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/arch/x86/kernel/crash.c~x86-crash-optimize-cpu-changes |
| +++ a/arch/x86/kernel/crash.c |
| @@ -470,6 +470,16 @@ void arch_crash_handle_hotplug_event(str |
| unsigned long elfsz = 0; |
| |
| /* |
| + * As crash_prepare_elf64_headers() has already described all |
| + * possible CPUs, there is no need to update the elfcorehdr |
| + * for additional CPU changes. |
| + */ |
| + if ((image->file_mode || image->elfcorehdr_updated) && |
| + ((image->hp_action == KEXEC_CRASH_HP_ADD_CPU) || |
| + (image->hp_action == KEXEC_CRASH_HP_REMOVE_CPU))) |
| + return; |
| + |
| + /* |
| * Create the new elfcorehdr reflecting the changes to CPU and/or |
| * memory resources. |
| */ |
| _ |