diff mbox

kexec: Provide a user friendly option for memory address limit

Message ID 1501156850-14083-1-git-send-email-Simon.Crowe@citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Simon Crowe July 27, 2017, noon UTC
grub2 requires that the '<' character be escaped which is
inconvienet for users, provide a more natural specifier.

An example crashkernel argument may be

    crashkernel=256M,below=4G

Signed-off-by: Simon Crowe <Simon.Crowe@citrix.com>
---
 docs/misc/kexec_and_kdump.txt       |  8 +++++++-
 docs/misc/xen-command-line.markdown |  1 +
 xen/common/kexec.c                  | 12 ++++++++++--
 3 files changed, 18 insertions(+), 3 deletions(-)

Comments

Jan Beulich July 27, 2017, 3:46 p.m. UTC | #1
>>> Simon Crowe <Simon.Crowe@citrix.com> 07/27/17 2:01 PM >>>
>grub2 requires that the '<' character be escaped which is
>inconvienet for users, provide a more natural specifier.
>
>An example crashkernel argument may be
>
>crashkernel=256M,below=4G
>
>Signed-off-by: Simon Crowe <Simon.Crowe@citrix.com>

So why did you resend this? It has been committed more than a month
ago. And then in general please send patches _To_ the list, and only
_Cc_ relevant maintainers.

Jan
diff mbox

Patch

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 44d9985..d99cb63 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
diff --git a/xen/common/kexec.c b/xen/common/kexec.c
index fbca8a6..b59f5e9 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,10 @@  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);
     }