aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/ehca/ehca_irq.c
diff options
context:
space:
mode:
authorHoang-Nam Nguyen <hnguyen@linux.vnet.ibm.com>2007-01-19 22:50:10 +0100
committerRoland Dreier <rolandd@cisco.com>2007-01-22 17:03:55 -0800
commitcea9ea67e9927da18af89b49bd949a8d65ba1b15 (patch)
tree26f84c14b22d81b41fb1d5add51115984b47e558 /drivers/infiniband/hw/ehca/ehca_irq.c
parentIB/ehca: Fix improper use of yield() with spinlock held (diff)
downloadlinux-dev-cea9ea67e9927da18af89b49bd949a8d65ba1b15.tar.xz
linux-dev-cea9ea67e9927da18af89b49bd949a8d65ba1b15.zip
IB/ehca: Fix mismatched spin_unlock in irq handler
The lock is taken with _irqsave and hence must be released with _irqrestore on all paths. Signed-off-by Hoang-Nam Nguyen <hnguyen@de.ibm.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ehca/ehca_irq.c')
-rw-r--r--drivers/infiniband/hw/ehca/ehca_irq.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/ehca/ehca_irq.c b/drivers/infiniband/hw/ehca/ehca_irq.c
index e7209afb4250..c069be8cbcb2 100644
--- a/drivers/infiniband/hw/ehca/ehca_irq.c
+++ b/drivers/infiniband/hw/ehca/ehca_irq.c
@@ -440,7 +440,8 @@ void ehca_tasklet_eq(unsigned long data)
cq = idr_find(&ehca_cq_idr, token);
if (cq == NULL) {
- spin_unlock(&ehca_cq_idr_lock);
+ spin_unlock_irqrestore(&ehca_cq_idr_lock,
+ flags);
break;
}