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. ( snipped-for-privacy@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! 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

Reply to
Anonymous
Loading thread data ...

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

Reply to
sudip05

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.