From 90288044a67a29a5e34bf5b7e4e89a6bff5a97c3 Mon Sep 17 00:00:00 2001 From: Simon Crowe Date: Fri, 9 Jun 2017 14:11:37 +0200 Subject: [PATCH] kexec: provide user friendly option for memory limit kexec: Provide user friendly option for memory limit grub2 requires that the '<' character be escaped which is inconvienet for users, provide a more natural specifier. Signed-off-by: Simon Crowe Reviewed-by: Jan Beulich Acked-by: Andrew Cooper --- docs/misc/kexec_and_kdump.txt | 8 +++++++- docs/misc/xen-command-line.markdown | 5 +++++ xen/common/kexec.c | 10 ++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/docs/misc/kexec_and_kdump.txt b/docs/misc/kexec_and_kdump.txt index 2f937718a3..0842b3d58f 100644 --- a/docs/misc/kexec_and_kdump.txt +++ b/docs/misc/kexec_and_kdump.txt @@ -136,7 +136,13 @@ command line parameter to the Xen hypervisor. It has two forms: e.g. crashkernel=128M@256M - Regardless of which of the two forms of the crashkernel command line you + iii) crashkernel=size,below=offset + + This allows us to place the crash kernel within the usuable address + space without having to worry about a specific phyiscal address. + The '<' and 'below' options are synonymous + + Regardless of which of the forms of the crashkernel command line you use, the crash kernel region should appear in /proc/iomem on x86. If it doesn't then either the crashkernel parameter is missing, or for some reason the region couldn't be placed - for instance because it is too large. diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index 8c939c4e36..6eb5cfc2c0 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -512,6 +512,7 @@ combination with the `low_crashinfo` command line option. ### crashkernel > `= :[,...][{@,<}]` > `= [{@,<}]` +> `= ,below=offset` Specify sizes and optionally placement of the crash kernel reservation area. The `:` pairs indicate how much memory to @@ -523,6 +524,10 @@ A trailing `@` specifies the exact address this area should be placed at, whereas `<` in place of `@` just specifies an upper bound of the address range the area should fall into. +< and below are synonyomous, the latter being useful for grub2 systems +which would otherwise require escaping of the < option + + ### credit2\_balance\_over > `= ` diff --git a/xen/common/kexec.c b/xen/common/kexec.c index fbca8a6499..a52c30ba1e 100644 --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -88,7 +88,7 @@ static void *crash_heap_current = NULL, *crash_heap_end = NULL; /* * Parse command lines in the format * - * crashkernel=:[,...][{@,<}
] + * crashkernel=:[,...][{@,<,below=}
] * * with being of form * @@ -97,6 +97,10 @@ static void *crash_heap_current = NULL, *crash_heap_end = NULL; * as well as the legacy ones in the format * * crashkernel=[{@,<}
] + * crashkernel=,below=address + * + * < and below are synonyomous, the latter being useful for grub2 systems + * which would otherwise require escaping of the < option */ static void __init parse_crashkernel(const char *str) { @@ -111,7 +115,7 @@ static void __init parse_crashkernel(const char *str) { printk(XENLOG_WARNING "crashkernel: too many ranges\n"); cur = NULL; - str = strpbrk(str, "@<"); + str = strpbrk(str, "@,<"); break; } @@ -162,6 +166,8 @@ static void __init parse_crashkernel(const char *str) kexec_crash_area.start = parse_size_and_unit(cur = str + 1, &str); else if ( *str == '<' ) kexec_crash_area_limit = parse_size_and_unit(cur = str + 1, &str); + else if ( !strncmp(str, ",below=", 7) ) + kexec_crash_area_limit = parse_size_and_unit(cur = str + 7, &str); else printk(XENLOG_WARNING "crashkernel: '%s' ignored\n", str); } -- 2.39.5