summaryrefslogtreecommitdiff
path: root/kexec/kexec.c
diff options
context:
space:
mode:
authorDaniel Kiper <daniel.kiper@oracle.com>2017-02-17 16:47:25 -0600
committerSimon Horman <horms@verge.net.au>2017-03-02 10:45:46 +0100
commit76b31203222a9833f424e98a134603c2f840c82b (patch)
tree07a35465e1d98ba243efe70ae5f197a8200ad6f1 /kexec/kexec.c
parente49623b0787d23f8f4f15d3ee3a1c81eb1f0da77 (diff)
downloadkexec-tools-76b31203222a9833f424e98a134603c2f840c82b.tar.gz
kexec: Add option to get crash kernel region size
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> Signed-off-by: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'kexec/kexec.c')
-rw-r--r--kexec/kexec.c16
1 files changed, 16 insertions, 0 deletions
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;
}