Resending to the proper ML (sorry).

  In mlx4_ib_reg_xrc_rcv_qp(), we need to take the xrc_reg_list_lock spinlock
when walking the xrc_reg_list.

  We've been hit by this on 2 customer sites.

  Also, I guess spin_lock_irqsave() could be replaced by spin_lock_irq() in
that function as we know for sure we're in process context.

Signed-off-by: Sébastien Dugué <sebastien.du...@bull.net>

--

 qp.c |    3 +++
 1 file changed, 3 insertions(+)

dIndex: kernel-ib/drivers/infiniband/hw/mlx4/qp.c
===================================================================
--- kernel-ib.orig/drivers/infiniband/hw/mlx4/qp.c      2011-01-31 
16:52:11.000000000 +0100
+++ kernel-ib/drivers/infiniband/hw/mlx4/qp.c   2011-02-11 15:24:27.000000000 
+0100
@@ -2549,13 +2549,16 @@
        }
 
        mutex_lock(&mibqp->mutex);
+       spin_lock_irqsave(&mibqp->xrc_reg_list_lock, flags);
        list_for_each_entry(tmp, &mibqp->xrc_reg_list, list)
                if (tmp->context == context) {
+                       spin_unlock_irqrestore(&mibqp->xrc_reg_list_lock, 
flags);
                        mutex_unlock(&mibqp->mutex);
                        kfree(ctx_entry);
                        mutex_unlock(&to_mdev(xrcd->device)->xrc_reg_mutex);
                        return 0;
                }
+       spin_unlock_irqrestore(&mibqp->xrc_reg_list_lock, flags);
 
        ctx_entry->context = context;
        spin_lock_irqsave(&mibqp->xrc_reg_list_lock, flags);
_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to