Re: [patch] SMP race fix [was Re: SMP lockup & 3c509 on 2.2.x [aka. the Deadly 'ping -f']]

Linus Torvalds (torvalds@transmeta.com)
Wed, 5 May 1999 14:14:17 -0700 (PDT)


On Wed, 5 May 1999, Andrea Arcangeli wrote:
>
> So far so good. But my argument is that the kenrel set the inprogress bit
> also if IRQ_DISABLED _was_ set.

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/