aboutsummaryrefslogtreecommitdiff
path: root/tools/perf/util/c++/clang-test.cpp
diff options
context:
space:
mode:
authorThomas Gleixner <[email protected]>2019-10-17 12:19:01 +0200
committerIngo Molnar <[email protected]>2019-10-24 12:09:21 +0200
commitdf4393424af3fbdcd5c404077176082a8ce459c4 (patch)
tree428c54731cb8408800013c54e75f3ae663b62f27 /tools/perf/util/c++/clang-test.cpp
parent3b7c59a1950c75f2c0152e5a9cd77675b09233d6 (diff)
x86/ioapic: Prevent inconsistent state when moving an interrupt
There is an issue with threaded interrupts which are marked ONESHOT and using the fasteoi handler: if (IS_ONESHOT()) mask_irq(); .... cond_unmask_eoi_irq() chip->irq_eoi(); if (setaffinity_pending) { mask_ioapic(); ... move_affinity(); unmask_ioapic(); } So if setaffinity is pending the interrupt will be moved and then unconditionally unmasked at the ioapic level, which is wrong in two aspects: 1) It should be kept masked up to the point where the threaded handler finished. 2) The physical chip state and the software masked state are inconsistent Guard both the mask and the unmask with a check for the software masked state. If the line is marked masked then the ioapic line is also masked, so both mask_ioapic() and unmask_ioapic() can be skipped safely. Signed-off-by: Thomas Gleixner <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Sebastian Siewior <[email protected]> Fixes: 3aa551c9b4c4 ("genirq: add threaded interrupt handler support") Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
Diffstat (limited to 'tools/perf/util/c++/clang-test.cpp')
0 files changed, 0 insertions, 0 deletions