> Subject: [PATCH 1/1] RDMA/irdma: optimize rx path by removing unnecessary > copy > > From: Zhu Yanjun <yanjun.zhu@xxxxxxxxx> > > In the function irdma_post_recv, the function irdma_copy_sg_list is not needed > since the struct irdma_sge and ib_sge have the similar member variables. The > struct irdma_sge can be replaced with the struct ib_sge totally. > > This can increase the rx performance of irdma. > > Signed-off-by: Zhu Yanjun <yanjun.zhu@xxxxxxxxx> > --- > drivers/infiniband/hw/irdma/uk.c | 38 +++++++++++++------------- > drivers/infiniband/hw/irdma/user.h | 23 ++++++---------- > drivers/infiniband/hw/irdma/verbs.c | 41 +++++++++-------------------- > 3 files changed, 39 insertions(+), 63 deletions(-) Thanks much for the patch! Minor comment... [....] > a/drivers/infiniband/hw/irdma/verbs.c b/drivers/infiniband/hw/irdma/verbs.c > index 02ca1f80968e..7ab9645d6f18 100644 > --- a/drivers/infiniband/hw/irdma/verbs.c > +++ b/drivers/infiniband/hw/irdma/verbs.c > @@ -3039,24 +3039,6 @@ static int irdma_dereg_mr(struct ib_mr *ib_mr, struct > ib_udata *udata) > return 0; > } > > -/** > - * irdma_copy_sg_list - copy sg list for qp > - * @sg_list: copied into sg_list > - * @sgl: copy from sgl > - * @num_sges: count of sg entries > - */ > -static void irdma_copy_sg_list(struct irdma_sge *sg_list, struct ib_sge *sgl, > - int num_sges) > -{ > - unsigned int i; > - > - for (i = 0; (i < num_sges) && (i < IRDMA_MAX_WQ_FRAGMENT_COUNT); > i++) { > - sg_list[i].tag_off = sgl[i].addr; > - sg_list[i].len = sgl[i].length; > - sg_list[i].stag = sgl[i].lkey; > - } > -} > - > /** > * irdma_post_send - kernel application wr > * @ibqp: qp ptr for wr > @@ -3133,7 +3115,7 @@ static int irdma_post_send(struct ib_qp *ibqp, > ret = irdma_uk_inline_send(ukqp, &info, false); > } else { > info.op.send.num_sges = ib_wr->num_sge; > - info.op.send.sg_list = (struct irdma_sge *) > + info.op.send.sg_list = (struct ib_sge *) > ib_wr->sg_list; Don't think we need the typecast. Shiraz