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@mips.com>
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@mips.com>
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
|