And I said in a previous mail, that magically covering stuff with
inconsistent status information is the wrong way to fix it.
The IRQ_MASKED state is inconsistent in the current code and that
needs to be fixed first.
And your patch does solve nothing at all. It merily violates the
semantics of non reentrant interrupt handlers.
No, it is _NOT_ harmless. interrupt handlers are guaranteed _NOT_ to
be reentered. That's why we check the INPROGRESS flag.
And you totally miss the case which caused the disussion in the first
place: When the thread finishes _before_ the hard irq handler on the
other CPU has set IRQ_MASKED. So this patch solves nothing at all, it
just makes stuff worse than it was.
Here is the solution which solves the inconsistent lock state _AND_
the reentrancy race.
http://git.kernel.org/?p=linux/kernel/git/tip/linux-2.6-tip.git;a=commit;h=0b1adaa031a...
The change log has a full explanation of the scenarios.
Thanks,
tglx
--