Don't know. If you're using anticipatory scheduler in 2.5.63-mmfoo this
will happen. 64-mm1 is OK.
> Unable to handle kernel paging request at virtual address 2020202b
> printing eip:
> c010cbd7
> *pde = 5a5a5a5a
> Oops: 0002
> CPU: 0
> EIP: 0060:[<c010cbd7>] Not tainted
> EFLAGS: 00010283
> EIP is at show_interrupts+0x237/0x270
> eax: 20202020 ebx: e4f798a4 ecx: 00000000 edx: 0000000b
> esi: c02ba31b edi: 00000020 ebp: 00000000 esp: e424df00
> ds: 007b es: 007b ss: 0068
> Process sadc (pid: 1250, threadinfo=e424c000 task=e43780e0)
> Stack: 00000390 c03b40a0 000000e0 00000001 e4f799bc 00000001 e4f799bc c0178e68
> e4f799bc 00000001 e424df38 00000000 e424df48 00000001 00000000 00000000
> e41d1870 e457ae84 e4649ef0 e4649ee4 00000000 40014000 e3830b54 00000400
> Call Trace:
> [<c0178e68>] seq_read+0x108/0x2c0
> [<c01590d8>] vfs_read+0xa8/0x160
> [<c01593ca>] sys_read+0x2a/0x40
> [<c010ad9b>] syscall_call+0x7/0xb
>
> Code: c6 04 02 0a ff 43 0c a1 60 6a 3b c0 50 68 21 a3 2b c0 53 e8
>
> (gdb) list *show_interrupts+0x237
> 0xc010cbd7 is in show_interrupts (include/linux/seq_file.h:40).
> 35 int seq_escape(struct seq_file *, const char *, const char *);
> 36
> 37 static inline int seq_putc(struct seq_file *m, char c)
> 38 {
> 39 if (m->count < m->size) {
> 40 m->buf[m->count++] = c;
> 41 return 0;
> 42 }
> 43 return -1;
show_interrupts() is walking the per-irq action chain without locking it.
Any concurrent add/remove activity will explode.
Do you want to hunt down all the show_interrupts() instances and pop a
spin_lock_irq(desc->lock) around them?
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/