Re: [PATCH for-next] RDMA/rxe: Cleanup init_send_wqe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Feb 6, 2021 at 8:25 AM Bob Pearson <rpearsonhpe@xxxxxxxxx> wrote:
>
> This patch changes the type of init_send_wqe in rxe_verbs.c to void
> since it always returns 0. It also separates out the code that copies
> inline data into the send wqe as copy_inline_data_to_wqe().
>
> Signed-off-by: Bob Pearson <rpearson@xxxxxxx>
> ---
>  drivers/infiniband/sw/rxe/rxe_verbs.c | 42 ++++++++++++---------------
>  1 file changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
> index 984909e03b35..dee5e0e919d2 100644
> --- a/drivers/infiniband/sw/rxe/rxe_verbs.c
> +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
> @@ -555,14 +555,24 @@ static void init_send_wr(struct rxe_qp *qp, struct rxe_send_wr *wr,
>         }
>  }
>
> -static int init_send_wqe(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
> +static void copy_inline_data_to_wqe(struct rxe_send_wqe *wqe,
> +                                   const struct ib_send_wr *ibwr)
> +{
> +       struct ib_sge *sge = ibwr->sg_list;
> +       u8 *p = wqe->dma.inline_data;
> +       int i;
> +
> +       for (i = 0; i < ibwr->num_sge; i++, sge++) {
> +               memcpy(p, (void *)(uintptr_t)sge->addr, sge->length);
> +               p += sge->length;
> +       }
> +}
> +
> +static void init_send_wqe(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
>                          unsigned int mask, unsigned int length,
>                          struct rxe_send_wqe *wqe)
>  {
>         int num_sge = ibwr->num_sge;
> -       struct ib_sge *sge;
> -       int i;
> -       u8 *p;
>
>         init_send_wr(qp, &wqe->wr, ibwr);
>
> @@ -570,7 +580,7 @@ static int init_send_wqe(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
>         if (unlikely(mask & WR_REG_MASK)) {
>                 wqe->mask = mask;
>                 wqe->state = wqe_state_posted;
> -               return 0;
> +               return;
>         }
>
>         if (qp_type(qp) == IB_QPT_UD ||
> @@ -578,20 +588,11 @@ static int init_send_wqe(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
>             qp_type(qp) == IB_QPT_GSI)
>                 memcpy(&wqe->av, &to_rah(ud_wr(ibwr)->ah)->av, sizeof(wqe->av));
>
> -       if (unlikely(ibwr->send_flags & IB_SEND_INLINE)) {
> -               p = wqe->dma.inline_data;
> -
> -               sge = ibwr->sg_list;
> -               for (i = 0; i < num_sge; i++, sge++) {
> -                       memcpy(p, (void *)(uintptr_t)sge->addr,
> -                                       sge->length);
> -
> -                       p += sge->length;
> -               }
> -       } else {
> +       if (unlikely(ibwr->send_flags & IB_SEND_INLINE))
> +               copy_inline_data_to_wqe(wqe, ibwr);
> +       else
>                 memcpy(wqe->dma.sge, ibwr->sg_list,
>                        num_sge * sizeof(struct ib_sge));
> -       }

I git clone  https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git,
But this commit can not be applied successfully.

Zhu Yanjun
>
>         wqe->iova = mask & WR_ATOMIC_MASK ? atomic_wr(ibwr)->remote_addr :
>                 mask & WR_READ_OR_WRITE_MASK ? rdma_wr(ibwr)->remote_addr : 0;
> @@ -603,8 +604,6 @@ static int init_send_wqe(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
>         wqe->dma.sge_offset     = 0;
>         wqe->state              = wqe_state_posted;
>         wqe->ssn                = atomic_add_return(1, &qp->ssn);
> -
> -       return 0;
>  }
>
>  static int post_one_send(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
> @@ -627,10 +626,7 @@ static int post_one_send(struct rxe_qp *qp, const struct ib_send_wr *ibwr,
>         }
>
>         send_wqe = producer_addr(sq->queue);
> -
> -       err = init_send_wqe(qp, ibwr, mask, length, send_wqe);
> -       if (unlikely(err))
> -               goto err1;
> +       init_send_wqe(qp, ibwr, mask, length, send_wqe);
>
>         advance_producer(sq->queue);
>         spin_unlock_irqrestore(&qp->sq.sq_lock, flags);
> --
> 2.27.0
>



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux