On Wed, Jul 08, 2020 at 10:55:26PM +0300, Yuval Basson wrote: > QP's with the same SRQ, working on different CQs and running in parallel > on different CPUs could lead to a race when maintaining the SRQ consumer > count, and leads to FW running out of SRQs. Update the consumer atomically. > Make sure the wqe_prod is updated after the sge_prod due to FW > requirements. > > Fixes: 3491c9e799fb9 ("RDMA/qedr: Add support for kernel mode SRQ's") > Signed-off-by: Michal Kalderon <mkalderon@xxxxxxxxxxx> > Signed-off-by: Yuval Basson <ybason@xxxxxxxxxxx> > --- > Change in v3: > *Replace changelog > > Changes in v2: > * Change barrier() to dma_wmb() > * Remove redundant dma_wmb() > > drivers/infiniband/hw/qedr/qedr.h | 4 ++-- > drivers/infiniband/hw/qedr/verbs.c | 23 +++++++++++------------ > 2 files changed, 13 insertions(+), 14 deletions(-) Applied to for-next, thanks > diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c > index 9b9e802..444537b 100644 > --- a/drivers/infiniband/hw/qedr/verbs.c > +++ b/drivers/infiniband/hw/qedr/verbs.c > @@ -1510,6 +1510,7 @@ int qedr_create_srq(struct ib_srq *ibsrq, struct ib_srq_init_attr *init_attr, > srq->dev = dev; > hw_srq = &srq->hw_srq; > spin_lock_init(&srq->lock); > + atomic_set(&hw_srq->wr_cons_cnt, 0); I deleted this though, it is redundant the memory is pre-zero'd by the core code. Jason