On Tue, Mar 17, 2020 at 03:40:30PM +0200, Max Gurtovoy wrote: > In order to save resource allocation and utilize the completion > locality in a better way (compared to SRQ per device that exist > today), allocate Shared Receive Queues (SRQs) per completion vector. > Associate each created channel with an appropriate SRQ according to the > completion vector index. This association will reduce the lock > contention in the fast path (compared to SRQ per device solution) and > increase the locality in memory buffers. > > Signed-off-by: Max Gurtovoy <maxg@xxxxxxxxxxxx> > --- > drivers/infiniband/ulp/srpt/ib_srpt.c | 169 +++++++++++++++++++++++++--------- > drivers/infiniband/ulp/srpt/ib_srpt.h | 26 +++++- > 2 files changed, 148 insertions(+), 47 deletions(-) > > diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c > index 9855274..34869b7 100644 > --- a/drivers/infiniband/ulp/srpt/ib_srpt.c > +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c > @@ -811,6 +811,31 @@ static bool srpt_test_and_set_cmd_state(struct srpt_send_ioctx *ioctx, > } > > /** > + * srpt_srq_post_recv - post an initial IB receive request for SRQ > + * @srq: SRPT SRQ context. > + * @ioctx: Receive I/O context pointer. > + */ > +static int srpt_srq_post_recv(struct srpt_srq *srq, struct srpt_recv_ioctx *ioctx) > +{ > + struct srpt_device *sdev = srq->sdev; > + struct ib_sge list; > + struct ib_recv_wr wr; > + > + BUG_ON(!srq); And of course no BUG_ONs in the code. Thanks