IB/mlx5, ib_post_send(), IB_WR_REG_SIG_MR: Do not modify the 'wr' argument
authorBart Van Assche <bart.vanassche@wdc.com>
Wed, 18 Jul 2018 16:25:15 +0000 (09:25 -0700)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 31 Jul 2018 02:00:20 +0000 (20:00 -0600)
Since the next patch will constify the wr pointer, do not modify the data
that pointer points at.

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Cc: Saeed Mahameed <saeedm@mellanox.com>
Acked-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/qp.c

index 3cbd000..535f6ad 100644 (file)
@@ -4294,10 +4294,10 @@ static void dump_wqe(struct mlx5_ib_qp *qp, int idx, int size_16)
        }
 }
 
-static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
+static int __begin_wqe(struct mlx5_ib_qp *qp, void **seg,
                     struct mlx5_wqe_ctrl_seg **ctrl,
                     const struct ib_send_wr *wr, unsigned *idx,
-                    int *size, int nreq)
+                    int *size, int nreq, bool send_signaled, bool solicited)
 {
        if (unlikely(mlx5_wq_overflow(&qp->sq, nreq, qp->ibqp.send_cq)))
                return -ENOMEM;
@@ -4308,10 +4308,8 @@ static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
        *(uint32_t *)(*seg + 8) = 0;
        (*ctrl)->imm = send_ieth(wr);
        (*ctrl)->fm_ce_se = qp->sq_signal_bits |
-               (wr->send_flags & IB_SEND_SIGNALED ?
-                MLX5_WQE_CTRL_CQ_UPDATE : 0) |
-               (wr->send_flags & IB_SEND_SOLICITED ?
-                MLX5_WQE_CTRL_SOLICITED : 0);
+               (send_signaled ? MLX5_WQE_CTRL_CQ_UPDATE : 0) |
+               (solicited ? MLX5_WQE_CTRL_SOLICITED : 0);
 
        *seg += sizeof(**ctrl);
        *size = sizeof(**ctrl) / 16;
@@ -4319,6 +4317,16 @@ static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
        return 0;
 }
 
+static int begin_wqe(struct mlx5_ib_qp *qp, void **seg,
+                    struct mlx5_wqe_ctrl_seg **ctrl,
+                    const struct ib_send_wr *wr, unsigned *idx,
+                    int *size, int nreq)
+{
+       return __begin_wqe(qp, seg, ctrl, wr, idx, size, nreq,
+                          wr->send_flags & IB_SEND_SIGNALED,
+                          wr->send_flags & IB_SEND_SOLICITED);
+}
+
 static void finish_wqe(struct mlx5_ib_qp *qp,
                       struct mlx5_wqe_ctrl_seg *ctrl,
                       u8 size, unsigned idx, u64 wr_id,
@@ -4477,10 +4485,8 @@ static int _mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
                                 * SET_PSV WQEs are not signaled and solicited
                                 * on error
                                 */
-                               wr->send_flags &= ~IB_SEND_SIGNALED;
-                               wr->send_flags |= IB_SEND_SOLICITED;
-                               err = begin_wqe(qp, &seg, &ctrl, wr,
-                                               &idx, &size, nreq);
+                               err = __begin_wqe(qp, &seg, &ctrl, wr, &idx,
+                                                 &size, nreq, false, true);
                                if (err) {
                                        mlx5_ib_warn(dev, "\n");
                                        err = -ENOMEM;
@@ -4499,8 +4505,8 @@ static int _mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
 
                                finish_wqe(qp, ctrl, size, idx, wr->wr_id, nreq,
                                           fence, MLX5_OPCODE_SET_PSV);
-                               err = begin_wqe(qp, &seg, &ctrl, wr,
-                                               &idx, &size, nreq);
+                               err = __begin_wqe(qp, &seg, &ctrl, wr, &idx,
+                                                 &size, nreq, false, true);
                                if (err) {
                                        mlx5_ib_warn(dev, "\n");
                                        err = -ENOMEM;