kernel thinks it's in an interrupt - Embedded
This is a discussion on kernel thinks it's in an interrupt - Embedded ; Hi,
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
3.4.3
...
-
kernel thinks it's in an interrupt
Hi,
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
3.4.3
(MontaVista 3.4.3-25.0.100.0600797 2006-06-06)) #8 Wed Sep 20 20:01:03 EDT
2006
Xilinx ML40x Reference System (Virtex-4 FX)
Port by MontaVista Software, Inc. (source@mvista.com)
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
highmem)
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]
PREEMPT
NIP: C0043C94 LR: C0043C94 SP: C01BFF60 REGS: c01bfeb0 TRAP: 0700 Not
tainted
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
00000720
GPR08: C01F0000 C01C0000 00000000 C01BE000 44000028 00003570 02001400
00000000
GPR16: 00000001 00000001 FFFFFFFF 007FFF00 01FFAA80 C0065E54 00000003
00000000
GPR24: 00000000 C0176A14 FF950040 6F743D2F 00062000 C01A0000 00000000
00000188
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..
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?
Thanks,
Clark
-
Re: kernel thinks it's in an interrupt
Anonymous wrote:
> Hi,
> 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
> 3.4.3
> (MontaVista 3.4.3-25.0.100.0600797 2006-06-06)) #8 Wed Sep 20 20:01:03 EDT
> 2006
> Xilinx ML40x Reference System (Virtex-4 FX)
> Port by MontaVista Software, Inc. (source@mvista.com)
> 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
> highmem)
> 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]
> PREEMPT
> NIP: C0043C94 LR: C0043C94 SP: C01BFF60 REGS: c01bfeb0 TRAP: 0700 Not
> tainted
> 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
> 00000720
> GPR08: C01F0000 C01C0000 00000000 C01BE000 44000028 00003570 02001400
> 00000000
> GPR16: 00000001 00000001 FFFFFFFF 007FFF00 01FFAA80 C0065E54 00000003
> 00000000
> GPR24: 00000000 C0176A14 FF950040 6F743D2F 00062000 C01A0000 00000000
> 00000188
> 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..
>
> 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?
>
> Thanks,
> Clark
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")) {
spider_init_IRQ_hardcoded();
return;
- }
+ } else
+ continue;
if (!spider_reg)
printk("interrupt controller does not have reg property !\n");
~Sudip