Pārlūkot izejas kodu

Blackfin arch: Print out doublefault addresses, so debug can occur

Signed-off-by: Robin Getz <rgetz@blackfin.uclinux.org>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Robin Getz 17 gadi atpakaļ
vecāks
revīzija
cd8fb8df14
2 mainītis faili ar 12 papildinājumiem un 1 dzēšanām
  1. 6 1
      arch/blackfin/kernel/setup.c
  2. 6 0
      arch/blackfin/mach-common/head.S

+ 6 - 1
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)

+ 6 - 0
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;