All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric DeVolder <eric.devolder@oracle.com>
To: linux-kernel@vger.kernel.org, x86@kernel.org,
	kexec@lists.infradead.org, ebiederm@xmission.com,
	dyoung@redhat.com, bhe@redhat.com, vgoyal@redhat.com
Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de,
	dave.hansen@linux.intel.com, hpa@zytor.com,
	nramas@linux.microsoft.com, thomas.lendacky@amd.com,
	robh@kernel.org, efault@gmx.de, rppt@kernel.org,
	konrad.wilk@oracle.com, boris.ostrovsky@oracle.com,
	eric.devolder@oracle.com
Subject: [PATCH v4 10/10] crash hp: Add x86 crash hotplug support for kexec_load
Date: Wed,  9 Feb 2022 14:57:06 -0500	[thread overview]
Message-ID: <20220209195706.51522-11-eric.devolder@oracle.com> (raw)
In-Reply-To: <20220209195706.51522-1-eric.devolder@oracle.com>

For kexec_file_load support, the loading of the crash kernel occurs
entirely within the kernel, and as such the elfcorehdr is readily
identified (so that it can be modified upon hotplug events).

This change enables support for kexec_load by identifying the
elfcorehdr segment in the arch_crash_hotplug_handler(), if it has
not already been identified.

In general, support for kexec_load requires corresponding changes
to the userspace kexec-tools utility. It is the responsibility of
the userspace kexec utility to ensure that:
 - the elfcorehdr segment is sufficiently large enough to accommodate
   hotplug changes, ala CRASH_HOTPLUG_ELFCOREHDR_SZ.
 - provides a purgatory that excludes the elfcorehdr from its list of
   run-time segments to check.
These changes to the userspace kexec utility are available, but not
yet accepted upstream.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/x86/kernel/crash.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index 6215c51919db..1b3e5e4fb965 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -458,6 +458,32 @@ void arch_crash_hotplug_handler(struct kimage *image,
 	void *elfbuf = NULL;
 	unsigned long mem, memsz;
 
+	/*
+	 * When the struct kimage is alloced, it is wiped to zero, so
+	 * the elf_index_valid defaults to false. It is set on the
+	 * kexec_file_load path, or here for kexec_load.
+	 */
+	if (!image->elf_index_valid) {
+		unsigned int n;
+
+		for (n = 0; n < image->nr_segments; n++) {
+			mem = image->segment[n].mem;
+			memsz = image->segment[n].memsz;
+			ptr = map_crash_pages(mem, memsz);
+			if (ptr) {
+				/* The segment containing elfcorehdr */
+				if ((ptr[0] == 0x7F) &&
+					(ptr[1] == 'E') &&
+					(ptr[2] == 'L') &&
+					(ptr[3] == 'F')) {
+					image->elf_index = (int)n;
+					image->elf_index_valid = true;
+				}
+			}
+			unmap_crash_pages((void **)&ptr);
+		}
+	}
+
 	/* Must have valid elfcorehdr index */
 	if (!image->elf_index_valid) {
 		pr_err("crash hp: unable to locate elfcorehdr segment");
-- 
2.27.0


WARNING: multiple messages have this Message-ID (diff)
From: Eric DeVolder <eric.devolder@oracle.com>
To: kexec@lists.infradead.org
Subject: [PATCH v4 10/10] crash hp: Add x86 crash hotplug support for kexec_load
Date: Wed,  9 Feb 2022 14:57:06 -0500	[thread overview]
Message-ID: <20220209195706.51522-11-eric.devolder@oracle.com> (raw)
In-Reply-To: <20220209195706.51522-1-eric.devolder@oracle.com>

For kexec_file_load support, the loading of the crash kernel occurs
entirely within the kernel, and as such the elfcorehdr is readily
identified (so that it can be modified upon hotplug events).

This change enables support for kexec_load by identifying the
elfcorehdr segment in the arch_crash_hotplug_handler(), if it has
not already been identified.

In general, support for kexec_load requires corresponding changes
to the userspace kexec-tools utility. It is the responsibility of
the userspace kexec utility to ensure that:
 - the elfcorehdr segment is sufficiently large enough to accommodate
   hotplug changes, ala CRASH_HOTPLUG_ELFCOREHDR_SZ.
 - provides a purgatory that excludes the elfcorehdr from its list of
   run-time segments to check.
These changes to the userspace kexec utility are available, but not
yet accepted upstream.

Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
---
 arch/x86/kernel/crash.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
index 6215c51919db..1b3e5e4fb965 100644
--- a/arch/x86/kernel/crash.c
+++ b/arch/x86/kernel/crash.c
@@ -458,6 +458,32 @@ void arch_crash_hotplug_handler(struct kimage *image,
 	void *elfbuf = NULL;
 	unsigned long mem, memsz;
 
+	/*
+	 * When the struct kimage is alloced, it is wiped to zero, so
+	 * the elf_index_valid defaults to false. It is set on the
+	 * kexec_file_load path, or here for kexec_load.
+	 */
+	if (!image->elf_index_valid) {
+		unsigned int n;
+
+		for (n = 0; n < image->nr_segments; n++) {
+			mem = image->segment[n].mem;
+			memsz = image->segment[n].memsz;
+			ptr = map_crash_pages(mem, memsz);
+			if (ptr) {
+				/* The segment containing elfcorehdr */
+				if ((ptr[0] == 0x7F) &&
+					(ptr[1] == 'E') &&
+					(ptr[2] == 'L') &&
+					(ptr[3] == 'F')) {
+					image->elf_index = (int)n;
+					image->elf_index_valid = true;
+				}
+			}
+			unmap_crash_pages((void **)&ptr);
+		}
+	}
+
 	/* Must have valid elfcorehdr index */
 	if (!image->elf_index_valid) {
 		pr_err("crash hp: unable to locate elfcorehdr segment");
-- 
2.27.0



  parent reply	other threads:[~2022-02-09 20:03 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-09 19:56 [PATCH v4 00/10] crash: Kernel handling of CPU and memory hot un/plug Eric DeVolder
2022-02-09 19:56 ` Eric DeVolder
2022-02-09 19:56 ` [PATCH v4 01/10] crash: fix minor typo/bug in debug message Eric DeVolder
2022-02-09 19:56   ` Eric DeVolder
2022-02-09 19:56 ` [PATCH v4 02/10] crash hp: Introduce CRASH_HOTPLUG configuration options Eric DeVolder
2022-02-09 19:56   ` Eric DeVolder
2022-02-23  3:25   ` Baoquan He
2022-02-23  3:25     ` Baoquan He
2022-03-01 20:04     ` Eric DeVolder
2022-03-01 20:04       ` Eric DeVolder
2022-03-02  9:20       ` David Hildenbrand
2022-03-02  9:20         ` David Hildenbrand
2022-03-03 10:22         ` Baoquan He
2022-03-03 10:22           ` Baoquan He
2022-03-03 11:36           ` David Hildenbrand
2022-03-03 11:36             ` David Hildenbrand
2022-03-03 12:08             ` Baoquan He
2022-03-03 12:08               ` Baoquan He
2022-03-03 15:31               ` Eric DeVolder
2022-03-03 15:31                 ` Eric DeVolder
2022-02-09 19:56 ` [PATCH v4 03/10] crash hp: definitions and prototype changes Eric DeVolder
2022-02-09 19:56   ` Eric DeVolder
2022-02-23  3:43   ` Baoquan He
2022-02-23  3:43     ` Baoquan He
2022-03-01 20:04     ` Eric DeVolder
2022-03-01 20:04       ` Eric DeVolder
2022-02-09 19:57 ` [PATCH v4 04/10] crash hp: prototype change for crash_prepare_elf64_headers Eric DeVolder
2022-02-09 19:57   ` Eric DeVolder
2022-02-23  3:46   ` Baoquan He
2022-02-23  3:46     ` Baoquan He
2022-03-01 20:05     ` Eric DeVolder
2022-03-01 20:05       ` Eric DeVolder
2022-02-09 19:57 ` [PATCH v4 05/10] crash hp: introduce helper functions un/map_crash_pages Eric DeVolder
2022-02-09 19:57   ` Eric DeVolder
2022-02-23  3:58   ` Baoquan He
2022-02-23  3:58     ` Baoquan He
2022-03-01 20:06     ` Eric DeVolder
2022-03-01 20:06       ` Eric DeVolder
2022-02-09 19:57 ` [PATCH v4 06/10] crash hp: generic crash hotplug support infrastructure Eric DeVolder
2022-02-09 19:57   ` Eric DeVolder
2022-02-23  3:59   ` Baoquan He
2022-02-23  3:59     ` Baoquan He
2022-03-01 20:07     ` Eric DeVolder
2022-03-01 20:07       ` Eric DeVolder
2022-02-09 19:57 ` [PATCH v4 07/10] crash hp: exclude elfcorehdr from the segment digest Eric DeVolder
2022-02-09 19:57   ` Eric DeVolder
2022-02-23  4:00   ` Baoquan He
2022-02-23  4:00     ` Baoquan He
2022-03-01 20:07     ` Eric DeVolder
2022-03-01 20:07       ` Eric DeVolder
2022-02-09 19:57 ` [PATCH v4 08/10] crash hp: exclude hot remove cpu from elfcorehdr notes Eric DeVolder
2022-02-09 19:57   ` Eric DeVolder
2022-02-23  4:04   ` Baoquan He
2022-02-23  4:04     ` Baoquan He
2022-03-01 20:08     ` Eric DeVolder
2022-03-01 20:08       ` Eric DeVolder
2022-02-09 19:57 ` [PATCH v4 09/10] crash hp: Add x86 crash hotplug support for kexec_file_load Eric DeVolder
2022-02-09 19:57   ` Eric DeVolder
2022-02-23  4:10   ` Baoquan He
2022-02-23  4:10     ` Baoquan He
2022-03-01 20:12     ` Eric DeVolder
2022-03-01 20:12       ` Eric DeVolder
2022-03-03 10:27       ` Baoquan He
2022-03-03 10:27         ` Baoquan He
2022-02-09 19:57 ` Eric DeVolder [this message]
2022-02-09 19:57   ` [PATCH v4 10/10] crash hp: Add x86 crash hotplug support for kexec_load Eric DeVolder
2022-02-21  4:08 ` [PATCH v4 00/10] crash: Kernel handling of CPU and memory hot un/plug Baoquan He
2022-02-21  4:08   ` Baoquan He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220209195706.51522-11-eric.devolder@oracle.com \
    --to=eric.devolder@oracle.com \
    --cc=bhe@redhat.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=bp@alien8.de \
    --cc=dave.hansen@linux.intel.com \
    --cc=dyoung@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=efault@gmx.de \
    --cc=hpa@zytor.com \
    --cc=kexec@lists.infradead.org \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nramas@linux.microsoft.com \
    --cc=robh@kernel.org \
    --cc=rppt@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=vgoyal@redhat.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.