From: Tal Alon Date: Mon, 8 Jul 2013 08:48:44 +0000 (+0300) Subject: ib/ipoib: fix illegal locking on ipoib_cm_rep_handler X-Git-Tag: v4.1.12-92~293^2~1^2~71 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ff23ef025d287dc8a4dc709e87c6d164ff6768bc;p=users%2Fjedix%2Flinux-maple.git 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 --- diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c index 316c58fb4a5ab..2801b8b5ce0db 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) {