On Thu, May 01, 2008 at 06:33:14PM +0200, Thomas Bogendoerfer wrote: > it would be nice, if people started thinking before supplying such > crappy^Winteresting code: > > arch/mips/kernel/traps.c: > > #define IS_KVA01(a) ((((unsigned int)a) & 0xc0000000) == 0x80000000) > > Kills every 64bit kernel build... > > Why is this needed at all ? It came as part of 39b8d5254246ac56342b72f812255c8f7a74dca9 which is a patch amalgated from several other patches. Below is the original patch it came with. I think the idea of the patch is valid but the idea needs a bit of mending. From: Chris Dearman <chris@xxxxxxxx> Date: Wed, 3 Oct 2007 10:19:18 +0100 Subject: [PATCH] Skip raw backtrace for non KSEG stack addresses This is to avoid recursive stackdumps as the kernel kernel falls off of the user stack. Signed-off-by: Chris Dearman <chris@xxxxxxxx> diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 2948b86..3d56171 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -79,19 +79,22 @@ void (*board_bind_eic_interrupt)(int irq, int regset); static void show_raw_backtrace(unsigned long reg29) { - unsigned long *sp = (unsigned long *)reg29; + unsigned long *sp = (unsigned long *)(reg29 & ~3); unsigned long addr; printk("Call Trace:"); #ifdef CONFIG_KALLSYMS printk("\n"); #endif - while (!kstack_end(sp)) { - addr = *sp++; - if (__kernel_text_address(addr)) - print_ip_sym(addr); +#define IS_KVA01(a) ((((unsigned int)a) & 0xc0000000) == 0x80000000) + if (IS_KVA01(sp)) { + while (!kstack_end(sp)) { + addr = *sp++; + if (__kernel_text_address(addr)) + print_ip_sym(addr); + } + printk("\n"); } - printk("\n"); } #ifdef CONFIG_KALLSYMS