On 06/25/2012 04:47 PM, Suzuki K. Poulose wrote: > Simon, > Ping. Suzuki > Please let me know your response. > > Thanks > Suzuki > > On 06/18/2012 11:57 AM, Suzuki K. Poulose wrote: >> On 05/24/2012 11:39 AM, Suzuki K. Poulose wrote: >>> As of now, the kexec reserves the spin-table for all the CPUs >>> on an SMP machine. The spin-table is pointed to by the >>> cpu-release-addr property in the device-tree. Reserving the >>> spin-table in the crash kernel will cause a BUG(), if the table >>> lies outside the memory reserved for the crashkernel. >>> >>> Disable reserving the spin-table regions and use maxcpus=1 to >>> use only the crashing CPU to boot the crash kernel. >>> >>> Signed-off-by: Suzuki K. Poulose<suzuki at in.ibm.com> >> >> Simon, >> >> Any response on this one ? >> >> I have tested this on a Currituck board (476, SMP) with a UP kernel. >> Without this patch, the secondary kernel hits 'PANIC' in boot while >> trying to reserve a memory(the spin table), outside the memory >> range(crash reserve). >> >> >> Thanks >> Suzuki >> >>> --- >>> >>> kexec/arch/ppc/crashdump-powerpc.c | 19 +++++++++++++------ >>> kexec/arch/ppc/fixup_dtb.c | 4 ++++ >>> 2 files changed, 17 insertions(+), 6 deletions(-) >>> >>> diff --git a/kexec/arch/ppc/crashdump-powerpc.c >>> b/kexec/arch/ppc/crashdump-powerpc.c >>> index 1bef69b..4c8c75d 100644 >>> --- a/kexec/arch/ppc/crashdump-powerpc.c >>> +++ b/kexec/arch/ppc/crashdump-powerpc.c >>> @@ -262,10 +262,19 @@ static void ulltoa(unsigned long long i, char >>> *str) >>> } >>> } >>> >>> +/* Append str to cmdline */ >>> +static void add_cmdline(char *cmdline, char *str) >>> +{ >>> + int cmdlen = strlen(cmdline) + strlen(str); >>> + if (cmdlen> (COMMAND_LINE_SIZE - 1)) >>> + die("Command line overflow\n"); >>> + strcat(cmdline, str); >>> +} >>> + >>> static int add_cmdline_param(char *cmdline, unsigned long long addr, >>> char *cmdstr, char *byte) >>> { >>> - int cmdlen, len, align = 1024; >>> + int align = 1024; >>> char str[COMMAND_LINE_SIZE], *ptr; >>> >>> /* Passing in =xxxK / =xxxM format. Saves space required in cmdline.*/ >>> @@ -284,11 +293,8 @@ static int add_cmdline_param(char *cmdline, >>> unsigned long long addr, >>> ptr += strlen(str); >>> ulltoa(addr, ptr); >>> strcat(str, byte); >>> - len = strlen(str); >>> - cmdlen = strlen(cmdline) + len; >>> - if (cmdlen> (COMMAND_LINE_SIZE - 1)) >>> - die("Command line overflow\n"); >>> - strcat(cmdline, str); >>> + >>> + add_cmdline(cmdline, str); >>> >>> dbgprintf("Command line after adding elfcorehdr: %s\n", cmdline); >>> >>> @@ -365,6 +371,7 @@ int load_crashdump_segments(struct kexec_info >>> *info, char *mod_cmdline, >>> */ >>> add_cmdline_param(mod_cmdline, elfcorehdr, " elfcorehdr=", "K"); >>> add_cmdline_param(mod_cmdline, saved_max_mem, " savemaxmem=", "M"); >>> + add_cmdline(mod_cmdline, " maxcpus=1"); >>> return 0; >>> } >>> >>> diff --git a/kexec/arch/ppc/fixup_dtb.c b/kexec/arch/ppc/fixup_dtb.c >>> index e9890a4..f832026 100644 >>> --- a/kexec/arch/ppc/fixup_dtb.c >>> +++ b/kexec/arch/ppc/fixup_dtb.c >>> @@ -172,6 +172,9 @@ static void fixup_reserve_regions(struct >>> kexec_info *info, char *blob_buf) >>> } >>> } >>> >>> +#if 0 >>> + /* XXX: Do not reserve spin-table for CPUs. */ >>> + >>> /* Add reserve regions for cpu-release-addr */ >>> nodeoffset = fdt_node_offset_by_prop_value(blob_buf, -1, >>> "device_type", "cpu", 4); >>> while (nodeoffset != -FDT_ERR_NOTFOUND) { >>> @@ -201,6 +204,7 @@ static void fixup_reserve_regions(struct >>> kexec_info *info, char *blob_buf) >>> nodeoffset = fdt_node_offset_by_prop_value(blob_buf, nodeoffset, >>> "device_type", "cpu", 4); >>> } >>> +#endif >>> >>> out: >>> print_fdt_reserve_regions(blob_buf); >>> >>> >>> _______________________________________________ >>> kexec mailing list >>> kexec at lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/kexec >>> >> >> >> _______________________________________________ >> kexec mailing list >> kexec at lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/kexec >> > > > _______________________________________________ > kexec mailing list > kexec at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec >