Messages in this thread | ![/](/images/icornerl.gif) | | Date | Thu, 9 Oct 2003 12:05:00 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: [RFC] disable_irq()/enable_irq() semantics and ide-probe.c |
| |
On Thu, 9 Oct 2003 viro@parcelfarce.linux.theplanet.co.uk wrote: > > The underlined bit is absent on alpha version of the same function. > > Note that this piece is bogus - if .action is NULL, we are already caught > by IRQ_INPROGRESS check. So it's not exactly a bug, but considering > your arguments about exact same check slightly earlier in handle_irq()...
Yes. I'm definitely not claiming the code is beautiful.
I think it happens to be working ;)
> It's from cset1.437.22.19 by mingo; the same changeset had done unconditional > removal of IRQ_INPROGRESS, so there it made sense. After the irq.c part > had been reverted (1.497.61.30 from you), i8259.c one should be killed > too, AFAICS...
Yeah, the IRQ_INPROGRESS removal in handle_irq() was buggy: it caused the bit to be spuriously cleared if an interrupt happened while the previous interrupt was active (which will _not_ happen in the i8259 case, but does happen in the edge-triggered case).
The problem, I think, is that all this code grew fairly organically, and nobody ever sat down and wrote down the rules.
Which is why I think it _works_, but it's clearly nonoptimal and sometimes confusing.
I suspect the 2.4.x situation is even worse.
Linus
- 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/
| ![\](/images/icornerr.gif) |