]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
RDMA/mlx5: Update all DRIVER QP places to use QP subtype
authorLeon Romanovsky <leonro@mellanox.com>
Mon, 27 Apr 2020 15:46:09 +0000 (18:46 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 28 Apr 2020 23:42:22 +0000 (20:42 -0300)
Instead of overwriting QP init attributes with driver QP subtype,
use that subtype directly. This change will allow us to remove
logic which cached QP init attributes.

Link: https://lore.kernel.org/r/20200427154636.381474-10-leon@kernel.org
Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/qp.c

index d0e8d27305e992ba529a019dc69677b6101de470..0b2090bcb8e8e2dffae0c07126c0c3b2b0b22f24 100644 (file)
@@ -1232,7 +1232,7 @@ static void destroy_qp_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp)
 static u32 get_rx_type(struct mlx5_ib_qp *qp, struct ib_qp_init_attr *attr)
 {
        if (attr->srq || (attr->qp_type == IB_QPT_XRC_TGT) ||
-           (attr->qp_type == MLX5_IB_QPT_DCI) ||
+           (qp->qp_sub_type == MLX5_IB_QPT_DCI) ||
            (attr->qp_type == IB_QPT_XRC_INI))
                return MLX5_SRQ_RQ;
        else if (!qp->has_rq)
@@ -1241,15 +1241,6 @@ static u32 get_rx_type(struct mlx5_ib_qp *qp, struct ib_qp_init_attr *attr)
                return MLX5_NON_ZERO_RQ;
 }
 
-static int is_connected(enum ib_qp_type qp_type)
-{
-       if (qp_type == IB_QPT_RC || qp_type == IB_QPT_UC ||
-           qp_type == MLX5_IB_QPT_DCI)
-               return 1;
-
-       return 0;
-}
-
 static int create_raw_packet_qp_tis(struct mlx5_ib_dev *dev,
                                    struct mlx5_ib_qp *qp,
                                    struct mlx5_ib_sq *sq, u32 tdn,
@@ -1897,33 +1888,14 @@ err:
        return err;
 }
 
-static void configure_responder_scat_cqe(struct ib_qp_init_attr *init_attr,
-                                        void *qpc)
-{
-       int rcqe_sz;
-
-       if (init_attr->qp_type == MLX5_IB_QPT_DCI)
-               return;
-
-       rcqe_sz = mlx5_ib_get_cqe_size(init_attr->recv_cq);
-
-       MLX5_SET(qpc, qpc, cs_res,
-                rcqe_sz == 128 ? MLX5_RES_SCAT_DATA64_CQE :
-                                 MLX5_RES_SCAT_DATA32_CQE);
-}
-
 static void configure_requester_scat_cqe(struct mlx5_ib_dev *dev,
                                         struct ib_qp_init_attr *init_attr,
                                         struct mlx5_ib_create_qp *ucmd,
                                         void *qpc)
 {
-       enum ib_qp_type qpt = init_attr->qp_type;
        int scqe_sz;
        bool allow_scat_cqe = false;
 
-       if (qpt == IB_QPT_UC || qpt == IB_QPT_UD)
-               return;
-
        if (ucmd)
                allow_scat_cqe = ucmd->flags & MLX5_QP_FLAG_ALLOW_SCATTER_CQE;
 
@@ -2018,7 +1990,9 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
        spin_lock_init(&qp->sq.lock);
        spin_lock_init(&qp->rq.lock);
 
-       mlx5_st = to_mlx5_st(init_attr->qp_type);
+       mlx5_st = to_mlx5_st((init_attr->qp_type != IB_QPT_DRIVER) ?
+                                    init_attr->qp_type :
+                                    qp->qp_sub_type);
        if (mlx5_st < 0)
                return -EINVAL;
 
@@ -2240,12 +2214,20 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
                MLX5_SET(qpc, qpc, cd_slave_receive, 1);
        if (qp->flags & MLX5_IB_QP_PACKET_BASED_CREDIT)
                MLX5_SET(qpc, qpc, req_e2e_credit_mode, 1);
-       if (qp->scat_cqe && is_connected(init_attr->qp_type)) {
-               configure_responder_scat_cqe(init_attr, qpc);
+       if (qp->scat_cqe && (init_attr->qp_type == IB_QPT_RC ||
+                            init_attr->qp_type == IB_QPT_UC)) {
+               int rcqe_sz = rcqe_sz =
+                       mlx5_ib_get_cqe_size(init_attr->recv_cq);
+
+               MLX5_SET(qpc, qpc, cs_res,
+                        rcqe_sz == 128 ? MLX5_RES_SCAT_DATA64_CQE :
+                                         MLX5_RES_SCAT_DATA32_CQE);
+       }
+       if (qp->scat_cqe && (qp->qp_sub_type == MLX5_IB_QPT_DCI ||
+                            init_attr->qp_type == IB_QPT_RC))
                configure_requester_scat_cqe(dev, init_attr,
                                             udata ? &ucmd : NULL,
                                             qpc);
-       }
 
        if (qp->rq.wqe_cnt) {
                MLX5_SET(qpc, qpc, log_rq_stride, qp->rq.wqe_shift - 4);