From 0f61898acaeb2b34ee8156ebd40bb82fef28ff5f Mon Sep 17 00:00:00 2001
From: Simon Crowe <Simon.Crowe@xxxxxxxxxx>
Date: Fri, 28 Apr 2017 10:46:43 +0000
Subject: [PATCH] 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 <Simon.Crowe@xxxxxxxxxx>
---
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 2f93771..0842b3d 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 450b222..9473245 100644
--- a/docs/misc/xen-command-line.markdown
+++ b/docs/misc/xen-command-line.markdown
@@ -474,6 +474,7 @@ combination with the `low_crashinfo` command line option.
### crashkernel
> `= <ramsize-range>:<size>[,...][{@,<}<offset>]`
> `= <size>[{@,<}<offset>]`
+> `= <size>,below=offset`
Specify sizes and optionally placement of the crash kernel reservation
area. The `<ramsize-range>:<size>` pairs indicate how much memory to
@@ -485,6 +486,10 @@ A trailing `@<offset>` 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
> `= <integer>`
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index fbca8a6..a52c30b 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=<ramsize-range>:<size>[,...][{@,<}<address>]
+ * crashkernel=<ramsize-range>:<size>[,...][{@,<,below=}<address>]
*
* with <ramsize-range> 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=<size>[{@,<}<address>]
+ * crashkernel=<size>,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.7.4
|