kernel thinks it's in an interrupt

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From English to

Threaded View
I am building an MV linux 2.6 kernel for a xilinx mini-module evm and I get
the following crash:
Linux/PPC load: console=tty1 console=ttyS0,9600 ip=on root=/dev/ram rw
Uncompressing Linux...done.
Now booting the kernel
Linux version 2.6.10_mvl401-ml40x (Administrator@Rachel_d600) (gcc version
 (MontaVista 3.4.3- 2006-06-06)) #8 Wed Sep 20 20:01:03 EDT
Xilinx ML40x Reference System (Virtex-4 FX)
Port by MontaVista Software, Inc. (
Built 1 zonelists
Kernel command line: console=tty1 console=ttyS0,9600 ip=on root=/dev/ram rw
Xilinx INTC #0 at 0x41200000 mapped to 0xFDFFE000
PID hash table entries: 512 (order: 9, 8192 bytes)
hr_time_init: arch_to_nsec = 20971520, nsec_to_arch = 429496729
Console: colour dummy device 80x25
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 62848k available (1452k kernel code, 452k data, 116k init, 0k
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Badness in __schedule at kernel/sched.c:2842
Call trace:
 [c0003a64] check_bug_trap+0x98/0xdc
 [c0003c98] ProgramCheckException+0x1f0/0x2b4
 [c00032a4] ret_from_except_full+0x0/0x4c
 [c01674c4] __schedule+0x28/0x728
 [c0167c34] preempt_schedule+0x70/0xa4
 [c003e04c] buffered_rmqueue+0x2ec/0x2f8
 [c003e120] __alloc_pages+0xc8/0x3ac
 [c003e42c] __get_free_pages+0x28/0x68
 [c0042c80] cache_alloc_refill+0x32c/0x5d0
 [c00426dc] kmem_cache_alloc+0x68/0x6c
 [c006436c] sget+0xc4/0x3fc
 [c006558c] get_sb_single+0x34/0xcc
 [c009b700] sysfs_get_sb+0x1c/0x2c
 [c0065680] do_kern_mount+0x5c/0x118
 [c01d2e60] sysfs_init+0x48/0x80
kmem_cache_create: Early error in slab bdev_cache
kernel BUG in kmem_cache_create at mm/slab.c:1209!
Oops: Exception in kernel mode, sig: 5 [#1]
NIP: C0043C94 LR: C0043C94 SP: C01BFF60 REGS: c01bfeb0 TRAP: 0700    Not
MSR: 00029030 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11
TASK = c0198710[0] 'swapper' THREAD: c01be000
Last syscall: 0
GPR00: C0043C94 C01BFF60 C0198710 00000035 000006FE FFFFFFFF 00000001
GPR08: C01F0000 C01C0000 00000000 C01BE000 44000028 00003570 02001400
GPR16: 00000001 00000001 FFFFFFFF 007FFF00 01FFAA80 C0065E54 00000003
GPR24: 00000000 C0176A14 FF950040 6F743D2F 00062000 C01A0000 00000000
NIP [c0043c94] kmem_cache_create+0x5c/0x5e0
LR [c0043c94] kmem_cache_create+0x5c/0x5e0
Call trace:
 [c01d204c] bdev_cache_init+0x3c/0xb0
 [c01d23f8] vfs_caches_init+0xf0/0x108
 [c01c05dc] start_kernel+0x12c/0x170
 [c000225c] start_here+0x44/0xb0
Kernel panic - not syncing: Aiee, killing interrupt handler!
 <0>Rebooting in 180 seconds..<NULL>

Which I traced to the in_interrupt() function returning true while it is
trying to allocate the kernel cache memory. I assume my interrupt controller
is messed up but I don't know how to fix. Any ideas?


Re: kernel thinks it's in an interrupt
Quoted text here. Click to load it

There is a problem indeed in interrupt controller in 2.6.17 for ppc,
this is the patch...wonder if it'll work there or not...try this out
and lemme know if it works..

--- linux-2.6.16-rc1.orig/arch/powerpc/platforms/cell/spider-pic.c
+++ linux-2.6.16-rc1/arch/powerpc/platforms/cell/spider-pic.c
@@ -196,10 +196,11 @@  void spider_init_IRQ(void)

         if (strstr(compatible, "CBEA,platform-spider-pic"))
             spider_reg = *(long *)get_property(dn,"reg", NULL);
-        else {
+        else if (strstr(compatible, "sti,platform-spider-pic")) {
-        }
+           } else
+            continue;

         if (!spider_reg)
             printk("interrupt controller does not have reg property !\n");


Site Timeline