The futex proxy handler grabs the task's pi_lock without disabling interrupts. If an interrupt were to come in while the lock was held, and that interrupt took the same pi_lock, it would cause a deadlock.
Created attachment 567095 [details] Disable interrupts when taking pi_lock() Use raw_spin_lock_irq() instead of raw_spin_lock() when taking pi_lock in the futex proxy handler.
The fix here is equivalent to 9358ad7 git describe --contains 9358ad7 v3.2.14-rt24~10 Modifying kernel-rt.spec to document this.
Technical note added. If any revisions are required, please edit the "Technical Notes" field accordingly. All revisions will be proofread by the Engineering Content Services team. New Contents: Cause: Interrupts can take the same pi_lock as the task Consequence: Deadlock from an interrupt taking the pi_lock Fix: Disable interrupts when taking pi_lock Result: Deadlock is prevented.
The patch was added to 3.2.14-rt24 (upstream stable-rt).
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHSA-2012-1282.html