Re: [PATCH 2/2] MIPS: KEXEC: Fixes Random crashes while loading crashkernel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 30/08/13 12:05, Prem Mallappa wrote:
MIPS: KEXEC: Fixes Random crashes while loading crashkernel

Rearranging code so that crashk_res gets updated.
- crashk_res is updated after mips_parse_crashkernel(),
    after resource_init(), which is after arch_mem_init().
- The reserved memory is actually treated as Usable memory,
    Unless we load the crash kernel, everything works.

Signed-off-by: Prem Mallappa<pmallappa@xxxxxxxxxxxxxxxxxx>
---
  arch/mips/kernel/setup.c | 99 +++++++++++++++++++++++-------------------------
  1 file changed, 48 insertions(+), 51 deletions(-)

diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index c7f9051..e98a256 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c

<snip>

+static void __init request_crashkernel(struct resource *res)
+{
+	int ret;
+
+	ret = request_resource(res,&crashk_res);
+	if (!ret)
+		pr_info("Reserving %ldMB of memory at %ldMB for crashkernel\n",
+			(unsigned long)((crashk_res.end -
+					 crashk_res.start + 1)>>  20),
+			(unsigned long)(crashk_res.start>>  20));
+}
+#else /* !defined(CONFIG_KEXEC)		*/
+static void __init mips_parse_crashkernel(void)
+{
+}
+

Hi,

the function is not used and causes the following error.

arch/mips/kernel/setup.c:592:20: error: 'mips_parse_crashkernel' defined but not used [-Werror=unused-function]
cc1: all warnings being treated as errors

make[2]: *** [arch/mips/kernel/setup.o] Error 1
make[1]: *** [arch/mips/kernel] Error 2

	John






+static void __init request_crashkernel(struct resource *res)
+{
+}
+#endif /* !defined(CONFIG_KEXEC)  */
+
  static void __init arch_mem_init(char **cmdline_p)
  {
  	extern void plat_mem_setup(void);
@@ -609,6 +655,8 @@ static void __init arch_mem_init(char **cmdline_p)
  	}
  #endif
  #ifdef CONFIG_KEXEC
+	mips_parse_crashkernel();
+
  	if (crashk_res.start != crashk_res.end)
  		reserve_bootmem(crashk_res.start,
  				crashk_res.end - crashk_res.start + 1,
@@ -620,52 +668,6 @@ static void __init arch_mem_init(char **cmdline_p)
  	paging_init();
  }

-#ifdef CONFIG_KEXEC
-static inline unsigned long long get_total_mem(void)
-{
-	unsigned long long total;
-
-	total = max_pfn - min_low_pfn;
-	return total<<  PAGE_SHIFT;
-}
-
-static void __init mips_parse_crashkernel(void)
-{
-	unsigned long long total_mem;
-	unsigned long long crash_size, crash_base;
-	int ret;
-
-	total_mem = get_total_mem();
-	ret = parse_crashkernel(boot_command_line, total_mem,
-				&crash_size,&crash_base);
-	if (ret != 0 || crash_size<= 0)
-		return;
-
-	crashk_res.start = crash_base;
-	crashk_res.end	 = crash_base + crash_size - 1;
-}
-
-static void __init request_crashkernel(struct resource *res)
-{
-	int ret;
-
-	ret = request_resource(res,&crashk_res);
-	if (!ret)
-		pr_info("Reserving %ldMB of memory at %ldMB for crashkernel\n",
-			(unsigned long)((crashk_res.end -
-				crashk_res.start + 1)>>  20),
-			(unsigned long)(crashk_res.start>>  20));
-}
-#else /* !defined(CONFIG_KEXEC)	 */
-static void __init mips_parse_crashkernel(void)
-{
-}
-
-static void __init request_crashkernel(struct resource *res)
-{
-}
-#endif /* !defined(CONFIG_KEXEC)  */
-
  static void __init resource_init(void)
  {
  	int i;
@@ -678,11 +680,6 @@ static void __init resource_init(void)
  	data_resource.start = __pa_symbol(&_etext);
  	data_resource.end = __pa_symbol(&_edata) - 1;

-	/*
-	 * Request address space for all standard RAM.
-	 */
-	mips_parse_crashkernel();
-
  	for (i = 0; i<  boot_mem_map.nr_map; i++) {
  		struct resource *res;
  		unsigned long start, end;



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux