Kexec Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Eric DeVolder <eric.devolder@oracle.com>
To: kexec@lists.infradead.org, horms@verge.net.au, andrew.cooper3@citrix.com
Cc: daniel.kiper@oracle.com, konrad.wilk@oracle.com
Subject: [PATCH v5 11/11] kexec: Add option to get crash kernel region size
Date: Fri, 17 Feb 2017 16:47:25 -0600	[thread overview]
Message-ID: <1487371645-8299-12-git-send-email-eric.devolder@oracle.com> (raw)
In-Reply-To: <1487371645-8299-1-git-send-email-eric.devolder@oracle.com>

From: Daniel Kiper <daniel.kiper@oracle.com>

Crash kernel region size is available via sysfs on Linux running on
bare metal. However, this does not work when Linux runs as Xen dom0.
In this case Xen crash kernel region size should be established using
__HYPERVISOR_kexec_op hypercall (Linux kernel kexec functionality does
not make a lot of sense in Xen dom0). Sadly hypercalls are not easily
accessible using shell scripts or something like that. Potentially we
can check "xl dmesg" output for crashkernel option but this is not nice.
So, let's add this functionality, for Linux running on bare metal and
as Xen dom0, to kexec-tools. This way kdump scripts may establish crash
kernel region size in one way regardless of platform. All burden of
platform detection lies on kexec-tools.

Figure (and unit) displayed by this new kexec-tools functionality is
the same as one taken from /sys/kernel/kexec_crash_size.

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
Signed-off-by: Eric DeVolder <eric.devolder@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
v5: Incorporated feedback:
    - Fixed indentation in print_crash_kernel_load_range()
    - changes for coding convention and formatting
v4: Incorporated feedback:
    - changes for coding convention and formatting
    - Changed commit description to make it clear that
      get_crash_kernel_load_range() is a stub on some archs
v3: Incorporated feedback:
    - changes for coding convention and formatting
    - restructured to introduce get_crash_kernel_load_range() for each
      architecture, and then a single function in kexec/kexec.c to call
      the per-architecture get_crash_kernel_load_range() and print the
      result.
v2: Incorporated feedback:
    - utilize the is_crashkernel_mem_reserved() function common in all archs
    - for ppc and ppc64, utilize device-tree values to print size
    - for unsupported architectures, print appropriate message
v1: Posted to kexec-tools mailing list
---
 kexec/kexec.8 |  3 +++
 kexec/kexec.c | 16 ++++++++++++++++
 kexec/kexec.h |  4 +++-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/kexec/kexec.8 b/kexec/kexec.8
index f4b39a6..e0131b4 100644
--- a/kexec/kexec.8
+++ b/kexec/kexec.8
@@ -179,6 +179,9 @@ Load a helper image to jump back to original kernel.
 .TP
 .BI \-\-reuseinitrd
 Reuse initrd from first boot.
+.TP
+.BI \-\-print-ckr-size
+Print crash kernel region size, if available.
 
 
 .SH SUPPORTED KERNEL FILE TYPES AND OPTIONS
diff --git a/kexec/kexec.c b/kexec/kexec.c
index a2ba79d..cfd837c 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -995,6 +995,7 @@ void usage(void)
 	       "     --mem-max=<addr> Specify the highest memory address to\n"
 	       "                      load code into.\n"
 	       "     --reuseinitrd    Reuse initrd from first boot.\n"
+	       "     --print-ckr-size Print crash kernel region size.\n"
 	       "     --load-preserve-context Load the new kernel and preserve\n"
 	       "                      context of current kernel during kexec.\n"
 	       "     --load-jump-back-helper Load a helper image to jump back\n"
@@ -1218,6 +1219,18 @@ static int do_kexec_file_load(int fileind, int argc, char **argv,
 	return ret;
 }
 
+static void print_crashkernel_region_size(void)
+{
+	uint64_t start = 0, end = 0;
+
+	if (is_crashkernel_mem_reserved() &&
+	    get_crash_kernel_load_range(&start, &end)) {
+		fprintf(stderr, "get_crash_kernel_load_range() failed.\n");
+		return;
+	}
+
+	printf("%lu\n", (start != end) ? (end - start + 1) : 0UL);
+}
 
 int main(int argc, char *argv[])
 {
@@ -1375,6 +1388,9 @@ int main(int argc, char *argv[])
 		case OPT_STATUS:
 			do_status = 1;
 			break;
+		case OPT_PRINT_CKR_SIZE:
+			print_crashkernel_region_size();
+			return 0;
 		default:
 			break;
 		}
diff --git a/kexec/kexec.h b/kexec/kexec.h
index 2b06f59..52bef9b 100644
--- a/kexec/kexec.h
+++ b/kexec/kexec.h
@@ -226,7 +226,8 @@ extern int file_types;
 #define OPT_LOAD_PRESERVE_CONTEXT 259
 #define OPT_LOAD_JUMP_BACK_HELPER 260
 #define OPT_ENTRY		261
-#define OPT_MAX			262
+#define OPT_PRINT_CKR_SIZE	262
+#define OPT_MAX			263
 #define KEXEC_OPTIONS \
 	{ "help",		0, 0, OPT_HELP }, \
 	{ "version",		0, 0, OPT_VERSION }, \
@@ -247,6 +248,7 @@ extern int file_types;
 	{ "kexec-file-syscall",	0, 0, OPT_KEXEC_FILE_SYSCALL }, \
 	{ "debug",		0, 0, OPT_DEBUG }, \
 	{ "status",		0, 0, OPT_STATUS }, \
+	{ "print-ckr-size",     0, 0, OPT_PRINT_CKR_SIZE }, \
 
 #define KEXEC_OPT_STR "h?vdfxyluet:psS"
 
-- 
2.7.4


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

  parent reply	other threads:[~2017-02-17 22:49 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-17 22:47 [PATCH v5 00/11] kexec: Add option to get crash kernel region size Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 01/11] crashdump/arm: Add get_crash_kernel_load_range() function Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 02/11] crashdump/arm64: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 03/11] crashdump/cris: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 04/11] crashdump/ia64: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 05/11] crashdump/m68k: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 06/11] crashdump/mips: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 07/11] crashdump/ppc: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 08/11] crashdump/ppc64: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 09/11] crashdump/s390: " Eric DeVolder
2017-02-17 22:47 ` [PATCH v5 10/11] crashdump/sh: " Eric DeVolder
2017-02-17 22:47 ` Eric DeVolder [this message]
2017-03-02  9:51 ` [PATCH v5 00/11] kexec: Add option to get crash kernel region size Simon Horman
2017-03-02 10:10   ` Daniel Kiper

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=1487371645-8299-12-git-send-email-eric.devolder@oracle.com \
    --to=eric.devolder@oracle.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=daniel.kiper@oracle.com \
    --cc=horms@verge.net.au \
    --cc=kexec@lists.infradead.org \
    --cc=konrad.wilk@oracle.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox