On Wed, 16 Feb 2011 14:50:02 +0200
Jack Morgenstein <ja...@dev.mellanox.co.il> wrote:

> You are correct!  Good catch.
> We will add this to OFED.

  Thanks,

> 
> (P.S., I would rather leave irqsave -- it is used everywhere else for this 
> spinlock).

  Right, but everywhere you know for sure you're in which context you are 
(process
or interrupt), there's no need to use the save/restore variant. Those are just 
to be
used in places where you don't know in which context you are.

  Also, one thing I noticed in that same function: why allocate ctx_entry before
knowing if it's going to be of any use? The allocation could be done right 
before
the first use.

  Sébastien.

> 
> -Jack
> 
> On Monday 14 February 2011 09:32, sebastien dugue wrote:
> > 
> >   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