Blackfin arch: Enable earlyprintk earlier - so any error after our interrupt tables are set up will print out
Also ensure that the traps_c code doesn't cause a double fault, by sending a signal to a faulting kernel before the memory subsystem is fully initialized, by printing out the error message before sending the signal. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Bryan Wu <bryan.wu@analog.com>
This commit is contained in:
parent
2ebcade590
commit
ce3afa1c04
|
@ -44,6 +44,7 @@
|
|||
#include <asm/blackfin.h>
|
||||
#include <asm/cplbinit.h>
|
||||
#include <asm/fixed_code.h>
|
||||
#include <asm/early_printk.h>
|
||||
|
||||
u16 _bfin_swrst;
|
||||
|
||||
|
@ -157,8 +158,10 @@ static __init void parse_cmdline_early(char *cmdline_p)
|
|||
1;
|
||||
}
|
||||
}
|
||||
} else if (!memcmp(to, "earlyprintk=", 12)) {
|
||||
to += 12;
|
||||
setup_early_printk(to);
|
||||
}
|
||||
|
||||
}
|
||||
c = *(to++);
|
||||
if (!c)
|
||||
|
@ -177,6 +180,23 @@ void __init setup_arch(char **cmdline_p)
|
|||
#ifdef CONFIG_DUMMY_CONSOLE
|
||||
conswitchp = &dummy_con;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CMDLINE_BOOL)
|
||||
strncpy(&command_line[0], CONFIG_CMDLINE, sizeof(command_line));
|
||||
command_line[sizeof(command_line) - 1] = 0;
|
||||
#endif
|
||||
|
||||
/* Keep a copy of command line */
|
||||
*cmdline_p = &command_line[0];
|
||||
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||
boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
|
||||
|
||||
/* setup memory defaults from the user config */
|
||||
physical_mem_end = 0;
|
||||
_ramend = CONFIG_MEM_SIZE * 1024 * 1024;
|
||||
|
||||
parse_cmdline_early(&command_line[0]);
|
||||
|
||||
cclk = get_cclk();
|
||||
sclk = get_sclk();
|
||||
|
||||
|
@ -210,22 +230,6 @@ void __init setup_arch(char **cmdline_p)
|
|||
flash_probe();
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CMDLINE_BOOL)
|
||||
strncpy(&command_line[0], CONFIG_CMDLINE, sizeof(command_line));
|
||||
command_line[sizeof(command_line) - 1] = 0;
|
||||
#endif
|
||||
|
||||
/* Keep a copy of command line */
|
||||
*cmdline_p = &command_line[0];
|
||||
memcpy(boot_command_line, command_line, COMMAND_LINE_SIZE);
|
||||
boot_command_line[COMMAND_LINE_SIZE - 1] = '\0';
|
||||
|
||||
/* setup memory defaults from the user config */
|
||||
physical_mem_end = 0;
|
||||
_ramend = CONFIG_MEM_SIZE * 1024 * 1024;
|
||||
|
||||
parse_cmdline_early(&command_line[0]);
|
||||
|
||||
if (physical_mem_end == 0)
|
||||
physical_mem_end = _ramend;
|
||||
|
||||
|
|
|
@ -402,10 +402,6 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
|||
break;
|
||||
}
|
||||
|
||||
info.si_signo = sig;
|
||||
info.si_errno = 0;
|
||||
info.si_addr = (void *)fp->pc;
|
||||
force_sig_info(sig, &info, current);
|
||||
if (sig != 0 && sig != SIGTRAP) {
|
||||
unsigned long stack;
|
||||
dump_bfin_regs(fp, (void *)fp->retx);
|
||||
|
@ -414,6 +410,10 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
|||
if (current->mm == NULL)
|
||||
panic("Kernel exception");
|
||||
}
|
||||
info.si_signo = sig;
|
||||
info.si_errno = 0;
|
||||
info.si_addr = (void *)fp->pc;
|
||||
force_sig_info(sig, &info, current);
|
||||
|
||||
/* if the address that we are about to return to is not valid, set it
|
||||
* to a valid address, if we have a current application or panic
|
||||
|
|
Loading…
Reference in New Issue