2.2.12 Kernel Oops in parport_pc with plip and alsa

Greg Stark (gsstark@mit.edu)
03 Nov 1999 03:29:05 -0500


I've been grappling with a 2.2.12 kernel oops that looks like this:

>>EIP: 25242322 Before first symbol
Trace: d00540ff <parport_pc_release_resources+13/40>
Trace: c011178f <update_process_times+5b/64>
Trace: c0110892 <wake_up_process+3a/44>
Trace: c010abfd <handle_IRQ_event+35/60>
Trace: c010a94e <do_8259A_IRQ+6e/90>
Trace: c010ad10 <do_IRQ+24/40>
Trace: c010a988 <common_interrupt+18/20>
Trace: c0108549 <cpu_idle+59/68>

The only device using the parallel port is plip. Plip works great normally
though (well it's slow but seems to be working properly) the oops only happens
when I play sounds in Alsa. But there doesn't appear to be an IRQ conflict or
I/O port conflict according to /proc/*.

I was wondering about this excerpt from 2.2.13, it doesn't seem to be
described in Alan Cox's pre13 announcements, nor can I find any mention of a
bug this would fix anywhere in the mail archives. Is it relevant to my problem
perhaps? Does anyone have a reference to where this patch came from and what
purpose it serves?

-- v2.2.12/linux/arch/i386/kernel/irq.c Mon Aug 9 16:05:54 1999
+++ linux/arch/i386/kernel/irq.c Tue Oct 19 17:14:00 1999
@@ -449,6 +449,7 @@

atomic_t global_bh_count;
atomic_t global_bh_lock;
+spinlock_t i386_bh_lock = SPIN_LOCK_UNLOCKED;

/*
* "global_cli()" is a special case, in that it can hold the
@@ -726,10 +727,11 @@

status = 1; /* Force the "do bottom halves" bit */

- if (!(action->flags & SA_INTERRUPT))
- __sti();
-
do {
+ if (!(action->flags & SA_INTERRUPT))
+ __sti();
+ else
+ __cli();
status |= action->flags;
action->handler(irq, action->dev_id, regs);
action = action->next;

-- 
greg

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/