[PATCH v2 01/12] crashdump/x86: Add print_crashkernel_region_size() function

Eric DeVolder eric.devolder at oracle.com
Mon Feb 6 11:42:13 PST 2017

From: Daniel Kiper <daniel.kiper at 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.

This patch just adds print_crashkernel_region_size() function, which
prints crash kernel region size, for x86 arch. Next patches will add
same named function for other archs supported by kexec-tools. Last patch
of this series will export this functionality to the userspace via
separate kexec utility option.

Signed-off-by: Daniel Kiper <daniel.kiper at oracle.com>
Signed-off-by: Eric DeVolder <eric.devolder at oracle.com>
v0: Interal version.
v1: Posted to kexec-tools mailing list
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
 kexec/arch/i386/crashdump-x86.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
index 88aeee3..ae46dcf 100644
--- a/kexec/arch/i386/crashdump-x86.c
+++ b/kexec/arch/i386/crashdump-x86.c
@@ -1094,3 +1094,15 @@ int is_crashkernel_mem_reserved(void)
 	return !!crash_reserved_mem_nr;
+void print_crashkernel_region_size(void)
+	uint64_t start = 0, end = 0;
+	if (is_crashkernel_mem_reserved()) {
+		get_crash_kernel_load_range(&start, &end);
+		printf("%lu\n", end - start + 1);
+	} else
+		printf("0\n");

More information about the kexec mailing list