Yes.
So if you want to fix synchronize_irq(), maybe the proper change would
have been just something really simple like
/* Disabled? Nothing to synchronize.. */
if (irq->status & IRQ_DISABLED)
return;
if (irq->status & IRQ_INPROGRESS)
wait_for_irq_to_finish()
instead of messing with the IRQ_INPROGRESS logic that is used by the IRQ
probing logic.
Did you even notice and/or verify that your changes may have broken IRQ
probing, which depends on the INPROGRESS behaviour?
> >And "disable_irq()" will synchronously wait for the irq handler to have
> >exited (it has to - otherwise you'd see the case where somebody calls
>
> No. That's my whole point and the cause of the race.
Right. I believe you. I can see your _first_ patch making sense.
I cannot see the second patch being all that worthwhile, while possibly
breaking autodetection and certainly modifying behaviour without any real
reason to.
Notice how my answer was to your _second_ patch, which I think is just
completely broken.
Linus
-
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/