From 001d7d70c3edf4811696ff577ae6725b2cea305b Mon Sep 17 00:00:00 2001 From: Robin Getz Date: Thu, 14 Aug 2008 14:44:33 +0800 Subject: [PATCH] --- yaml --- r: 108602 b: refs/heads/master c: cd8fb8df1458df7f3b99fd112e722b05f42c64d9 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/blackfin/kernel/setup.c | 7 ++++++- trunk/arch/blackfin/mach-common/head.S | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index c5eb66bc437f..7718a5e4a301 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ee32664da9531329b87aa5109e41e7cc73a04121 +refs/heads/master: cd8fb8df1458df7f3b99fd112e722b05f42c64d9 diff --git a/trunk/arch/blackfin/kernel/setup.c b/trunk/arch/blackfin/kernel/setup.c index 2ae84fea89eb..eb300550e093 100644 --- a/trunk/arch/blackfin/kernel/setup.c +++ b/trunk/arch/blackfin/kernel/setup.c @@ -52,6 +52,7 @@ EXPORT_SYMBOL(mtd_size); #endif char __initdata command_line[COMMAND_LINE_SIZE]; +unsigned int __initdata *__retx; /* boot memmap, for parsing "memmap=" */ #define BFIN_MEMMAP_MAX 128 /* number of entries in bfin_memmap */ @@ -785,7 +786,11 @@ void __init setup_arch(char **cmdline_p) bfin_write_SWRST(DOUBLE_FAULT); if (_bfin_swrst & RESET_DOUBLE) - printk(KERN_INFO "Recovering from Double Fault event\n"); + /* + * don't decode the address, since you don't know if this + * kernel's symbol map is the same as the crashing kernel + */ + printk(KERN_INFO "Recovering from Double Fault event at %p\n", __retx); else if (_bfin_swrst & RESET_WDOG) printk(KERN_INFO "Recovering from Watchdog event\n"); else if (_bfin_swrst & RESET_SOFTWARE) diff --git a/trunk/arch/blackfin/mach-common/head.S b/trunk/arch/blackfin/mach-common/head.S index 2c69ad49894e..fb7e2d426999 100644 --- a/trunk/arch/blackfin/mach-common/head.S +++ b/trunk/arch/blackfin/mach-common/head.S @@ -90,6 +90,12 @@ ENTRY(__start) [p0] = R0; SSYNC; + /* Save RETX, in case of doublefault */ + p0.l = ___retx; + p0.h = ___retx; + R0 = RETX; + [P0] = R0; + /* Let each Blackfin family do its own thing */ call _mach_early_start;