Bug 818220
| Summary: | qla2xxx does a spinlock with interrupts disabled | ||
|---|---|---|---|
| Product: | Red Hat Enterprise MRG | Reporter: | David Sommerseth <davids> |
| Component: | realtime-kernel | Assignee: | John Kacur <jkacur> |
| Status: | CLOSED ERRATA | QA Contact: | David Sommerseth <davids> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 2.1 | CC: | bhu, lgoncalv, ovasik, williams |
| Target Milestone: | 2.1.8 | ||
| Target Release: | --- | ||
| Hardware: | x86_64 | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: |
Previously, the qla2x00_poll() function did the local_irq_save() call before calling qla24xx_intr_handler(), which had a spinlock. Since spinlocks are sleepable in the real-time kernel, it is not allowed to call them with interrupts disabled. This scenario produced error messages and could cause a system deadlock. With this update, the local_irq_save_nort(flags) function is used to save flags without disabling interrupts, which prevents potential deadlocks and removes the error messages.
|
Story Points: | --- |
| Clone Of: | Environment: | ||
| Last Closed: | 2012-05-15 23:09:56 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
|
Description
David Sommerseth
2012-05-02 13:45:34 UTC
Verified by booting kernel-rt-debug kernels on a box with a qla2xxx adapter. Double checked that 3.0.25-rt44.57.el6rt.x86_64.debug provides the backtrace, which still was the issue. Upgraded to 3.0.30-rt50.62.el6rt.x86_64.debug and this issue is solved. -> VERIFIED
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: Function qla2x00_poll does local_irq_save() before calling qla24xx_intr_hand which has a spinlock. Since spinlocks are sleepable on rt, it is not allowed to call them with interrupts disabled.
Consequence: BUG: sleeping function called from invalid context at kernel/rtmutex.c:646 reported multiple times.
Fix: Use local_irq_save_nort(flags) to save flags without disabling interrupts.
Result: Potential deadlock is avoided, and the error message goes away.
Technical note updated. If any revisions are required, please edit the "Technical Notes" field
accordingly. All revisions will be proofread by the Engineering Content Services team.
Diffed Contents:
@@ -1,4 +1,4 @@
-Cause: Function qla2x00_poll does local_irq_save() before calling qla24xx_intr_hand which has a spinlock. Since spinlocks are sleepable on rt, it is not allowed to call them with interrupts disabled.
+Cause: Function qla2x00_poll does local_irq_save() before calling qla24xx_intr_handler which has a spinlock. Since spinlocks are sleepable on rt, it is not allowed to call them with interrupts disabled.
Consequence: BUG: sleeping function called from invalid context at kernel/rtmutex.c:646 reported multiple times.
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-0670.html
Technical note updated. If any revisions are required, please edit the "Technical Notes" field
accordingly. All revisions will be proofread by the Engineering Content Services team.
Diffed Contents:
@@ -1,7 +1 @@
-Cause: Function qla2x00_poll does local_irq_save() before calling qla24xx_intr_handler which has a spinlock. Since spinlocks are sleepable on rt, it is not allowed to call them with interrupts disabled.
+Previously, the qla2x00_poll() function did the local_irq_save() call before calling qla24xx_intr_handler(), which had a spinlock. Since spinlocks are sleepable in the real-time kernel, it is not allowed to call them with interrupts disabled. This scenario produced error messages and could cause a system deadlock. With this update, the local_irq_save_nort(flags) function is used to save flags without disabling interrupts, which prevents potential deadlocks and removes the error messages.-
-Consequence: BUG: sleeping function called from invalid context at kernel/rtmutex.c:646 reported multiple times.
-
-Fix: Use local_irq_save_nort(flags) to save flags without disabling interrupts.
-
-Result: Potential deadlock is avoided, and the error message goes away.
|