From ff23ef025d287dc8a4dc709e87c6d164ff6768bc Mon Sep 17 00:00:00 2001 From: Tal Alon Date: Mon, 8 Jul 2013 11:48:44 +0300 Subject: [PATCH] ib/ipoib: fix illegal locking on ipoib_cm_rep_handler Signed-off-by: Tal Alon (Ported from Mellanox OFED 2.4) Signed-off-by: Mukesh Kacker --- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 316c58fb4a5a..2801b8b5ce0d 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c @@ -966,6 +966,7 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even struct ib_qp_attr qp_attr; int qp_attr_mask, ret; struct sk_buff *skb; + unsigned long flags; p->mtu = be32_to_cpu(data->mtu); @@ -1003,7 +1004,7 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even skb_queue_head_init(&skqueue); - spin_lock_irq(&priv->lock); + spin_lock_irqsave(&priv->lock, flags); set_bit(IPOIB_FLAG_OPER_UP, &p->flags); if (p->neigh) while ((skb = __skb_dequeue(&p->neigh->queue))) @@ -1017,7 +1018,7 @@ static int ipoib_cm_rep_handler(struct ib_cm_id *cm_id, struct ib_cm_event *even " packet, ret:%d\n", __func__, ret); } - spin_unlock_irq(&priv->lock); + spin_unlock_irqrestore(&priv->lock, flags); ret = ib_send_cm_rtu(cm_id, NULL, 0); if (ret) { -- 2.50.1