* [PATCH 1/2] MIPS: KDUMP: skip walking indirection page for crashkernels @ 2013-08-30 10:05 Prem Mallappa 2013-08-30 10:05 ` [PATCH 2/2] MIPS: KEXEC: Fixes Random crashes while loading crashkernel Prem Mallappa 0 siblings, 1 reply; 3+ messages in thread From: Prem Mallappa @ 2013-08-30 10:05 UTC (permalink / raw) To: linux-mips; +Cc: Prem Mallappa KDUMP: skip indirection page, as crashkernel has already copied to destination Signed-off-by: Prem Mallappa <pmallappa@caviumnetworks.com> --- arch/mips/kernel/relocate_kernel.S | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/mips/kernel/relocate_kernel.S b/arch/mips/kernel/relocate_kernel.S index 43d2d78..2778a41 100644 --- a/arch/mips/kernel/relocate_kernel.S +++ b/arch/mips/kernel/relocate_kernel.S @@ -26,6 +26,11 @@ process_entry: PTR_L s2, (s0) PTR_ADD s0, s0, SZREG + /* In case of kdump/crash kernel, indirection page is not populated + * as the kernel is directly copied to reserved location + */ + beq s2, zero, done + /* destination page */ and s3, s2, 0x1 beq s3, zero, 1f -- 1.8.4 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] MIPS: KEXEC: Fixes Random crashes while loading crashkernel 2013-08-30 10:05 [PATCH 1/2] MIPS: KDUMP: skip walking indirection page for crashkernels Prem Mallappa @ 2013-08-30 10:05 ` Prem Mallappa 2013-09-01 16:31 ` John Crispin 0 siblings, 1 reply; 3+ messages in thread From: Prem Mallappa @ 2013-08-30 10:05 UTC (permalink / raw) To: linux-mips; +Cc: Prem Mallappa 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@caviumnetworks.com> --- 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 @@ -552,6 +552,52 @@ static void __init arch_mem_addpart(phys_t mem, phys_t end, int type) add_memory_region(mem, size, type); } +#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 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; -- 1.8.4 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] MIPS: KEXEC: Fixes Random crashes while loading crashkernel 2013-08-30 10:05 ` [PATCH 2/2] MIPS: KEXEC: Fixes Random crashes while loading crashkernel Prem Mallappa @ 2013-09-01 16:31 ` John Crispin 0 siblings, 0 replies; 3+ messages in thread From: John Crispin @ 2013-09-01 16:31 UTC (permalink / raw) To: Prem Mallappa; +Cc: linux-mips, Prem Mallappa 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@caviumnetworks.com> > --- > 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; ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-09-01 16:31 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-08-30 10:05 [PATCH 1/2] MIPS: KDUMP: skip walking indirection page for crashkernels Prem Mallappa 2013-08-30 10:05 ` [PATCH 2/2] MIPS: KEXEC: Fixes Random crashes while loading crashkernel Prem Mallappa 2013-09-01 16:31 ` John Crispin
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.