powerpc/fadump: reuse crashkernel parameter for fadump memory reservation
authorHari Bathini <[email protected]>
Mon, 8 May 2017 22:56:28 +0000 (15:56 -0700)
committerLinus Torvalds <[email protected]>
Tue, 9 May 2017 00:15:11 +0000 (17:15 -0700)
fadump supports specifying memory to reserve for fadump's crash kernel
with fadump_reserve_mem kernel parameter.  This parameter currently
supports passing a fixed memory size, like fadump_reserve_mem=<size>
only.  This patch aims to add support for other syntaxes like
range-based memory size
<range1>:<size1>[,<range2>:<size2>,<range3>:<size3>,...] which allows
using the same parameter to boot the kernel with different system RAM
sizes.

As crashkernel parameter already supports the above mentioned syntaxes,
this patch deprecates fadump_reserve_mem parameter and reuses
crashkernel parameter instead, to specify memory for fadump's crash
kernel memory reservation as well.  If any offset is provided in
crashkernel parameter, it will be ignored in case of fadump, as fadump
reserves memory at end of RAM.

Advantages using crashkernel parameter instead of fadump_reserve_mem
parameter are one less kernel parameter overall, code reuse and support
for multiple syntaxes to specify memory.

Suggested-by: Dave Young <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Hari Bathini <[email protected]>
Reviewed-by: Mahesh Salgaonkar <[email protected]>
Acked-by: Michael Ellerman <[email protected]>
Cc: Fenghua Yu <[email protected]>
Cc: Tony Luck <[email protected]>
Cc: Dave Young <[email protected]>
Cc: Eric Biederman <[email protected]>
Cc: Vivek Goyal <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
arch/powerpc/kernel/fadump.c

index d2e1476d98709e0d85b48ef8234092b4fb5c7583..466569e26278694c8ceea17509a99ec04c4ea68b 100644 (file)
@@ -209,14 +209,20 @@ static unsigned long init_fadump_mem_struct(struct fadump_mem_struct *fdm,
  */
 static inline unsigned long fadump_calculate_reserve_size(void)
 {
-       unsigned long size;
+       int ret;
+       unsigned long long base, size;
 
        /*
-        * Check if the size is specified through fadump_reserve_mem= cmdline
-        * option. If yes, then use that.
+        * Check if the size is specified through crashkernel= cmdline
+        * option. If yes, then use that but ignore base as fadump
+        * reserves memory at end of RAM.
         */
-       if (fw_dump.reserve_bootvar)
+       ret = parse_crashkernel(boot_command_line, memblock_phys_mem_size(),
+                               &size, &base);
+       if (ret == 0 && size > 0) {
+               fw_dump.reserve_bootvar = (unsigned long)size;
                return fw_dump.reserve_bootvar;
+       }
 
        /* divide by 20 to get 5% of value */
        size = memblock_end_of_DRAM() / 20;
@@ -371,15 +377,6 @@ static int __init early_fadump_param(char *p)
 }
 early_param("fadump", early_fadump_param);
 
-/* Look for fadump_reserve_mem= cmdline option */
-static int __init early_fadump_reserve_mem(char *p)
-{
-       if (p)
-               fw_dump.reserve_bootvar = memparse(p, &p);
-       return 0;
-}
-early_param("fadump_reserve_mem", early_fadump_reserve_mem);
-
 static void register_fw_dump(struct fadump_mem_struct *fdm)
 {
        int rc;