ncr810 disconnect fix?

David Mosberger-Tang (davidm@azstarnet.com)
Sat, 29 Jun 1996 21:08:35 -0700


Well, for those of you who don't want to switch to a whole new driver
because of the ncr810 DISCONNECT bug, here is something to try: just
delete the following lines in linux/arch/alpha/kernel/irq.c:device_interrupt:

if (action) {
/* quick interrupts get executed with no extra overhead */
if (action->flags & SA_INTERRUPT) {
while (action) {
action->handler(irq, action->dev_id, regs);
action = action->next;
}
ack_irq(ack);
return;
}
}

I have tried this on a Cabriolet with disconnect enabled and have not
been able to crash the machine anymore. Not proof positive, but it
looks good. Could other people try this and let me know whether it
works? In particular hearing from people with SCSI tape drives would
be interesting.

Linus found this bug while we were discussing how to best fix a bug in
_another_ driver (qlogicisp1020). Turns out that both the Alpha
version and the x86 version had seemingly sane interpretation of what
the SA_INTERRUPT flag meant. Problem is: the two interpretations were
different! Overall, this had the effect of leading to race conditions
in certain drivers (notably the qlogicisp). Now that everything is in
sync, it works much better. It also means that for the Alpha, the
setting of SA_INTERRUPT has no effect whatsoever.

--david

PS: I have some other (cleanup) patches for irq.c, so if you plan on
changing that code very soon, give a holler.