diff options
| author | Dave Airlie <airlied@redhat.com> | 2020-08-11 11:58:31 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2020-08-11 11:58:31 +1000 | 
| commit | c44264f9f729fd63bd6a81a6ac5cd6cd49af09e5 (patch) | |
| tree | ad77b18ffeafb50b3eb9ba6472670dc1d96f5558 /drivers/infiniband/hw/mlx5/qp.c | |
| parent | ca457ab5908603b36be903e73977afde1ba03c84 (diff) | |
| parent | bcf876870b95592b52519ed4aafcf9d95999bc9c (diff) | |
Merge tag 'v5.8' into drm-next
I need to backmerge 5.8 as I've got a bunch of fixes sitting
on an rc7 base that I want to land.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/infiniband/hw/mlx5/qp.c')
| -rw-r--r-- | drivers/infiniband/hw/mlx5/qp.c | 29 | 
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c index e050eade97a1..1225b8d77510 100644 --- a/drivers/infiniband/hw/mlx5/qp.c +++ b/drivers/infiniband/hw/mlx5/qp.c @@ -1766,15 +1766,14 @@ err:  }  static void configure_requester_scat_cqe(struct mlx5_ib_dev *dev, +					 struct mlx5_ib_qp *qp,  					 struct ib_qp_init_attr *init_attr, -					 struct mlx5_ib_create_qp *ucmd,  					 void *qpc)  {  	int scqe_sz;  	bool allow_scat_cqe = false; -	if (ucmd) -		allow_scat_cqe = ucmd->flags & MLX5_QP_FLAG_ALLOW_SCATTER_CQE; +	allow_scat_cqe = qp->flags_en & MLX5_QP_FLAG_ALLOW_SCATTER_CQE;  	if (!allow_scat_cqe && init_attr->sq_sig_type != IB_SIGNAL_ALL_WR)  		return; @@ -1853,8 +1852,6 @@ static int create_xrc_tgt_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,  	u32 *in;  	int err; -	mutex_init(&qp->mutex); -  	if (attr->sq_sig_type == IB_SIGNAL_ALL_WR)  		qp->sq_signal_bits = MLX5_WQE_CTRL_CQ_UPDATE; @@ -1938,7 +1935,6 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd,  	u32 *in;  	int err; -	mutex_init(&qp->mutex);  	spin_lock_init(&qp->sq.lock);  	spin_lock_init(&qp->rq.lock); @@ -2012,7 +2008,7 @@ static int create_user_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd,  	}  	if ((qp->flags_en & MLX5_QP_FLAG_SCATTER_CQE) &&  	    (qp->type == MLX5_IB_QPT_DCI || qp->type == IB_QPT_RC)) -		configure_requester_scat_cqe(dev, init_attr, ucmd, qpc); +		configure_requester_scat_cqe(dev, qp, init_attr, qpc);  	if (qp->rq.wqe_cnt) {  		MLX5_SET(qpc, qpc, log_rq_stride, qp->rq.wqe_shift - 4); @@ -2129,7 +2125,6 @@ static int create_kernel_qp(struct mlx5_ib_dev *dev, struct ib_pd *pd,  	u32 *in;  	int err; -	mutex_init(&qp->mutex);  	spin_lock_init(&qp->sq.lock);  	spin_lock_init(&qp->rq.lock); @@ -2543,13 +2538,18 @@ static void process_vendor_flag(struct mlx5_ib_dev *dev, int *flags, int flag,  		return;  	} -	if (flag == MLX5_QP_FLAG_SCATTER_CQE) { +	switch (flag) { +	case MLX5_QP_FLAG_SCATTER_CQE: +	case MLX5_QP_FLAG_ALLOW_SCATTER_CQE:  		/* -		 * We don't return error if this flag was provided, -		 * and mlx5 doesn't have right capability. -		 */ -		*flags &= ~MLX5_QP_FLAG_SCATTER_CQE; +			 * We don't return error if these flags were provided, +			 * and mlx5 doesn't have right capability. +			 */ +		*flags &= ~(MLX5_QP_FLAG_SCATTER_CQE | +			    MLX5_QP_FLAG_ALLOW_SCATTER_CQE);  		return; +	default: +		break;  	}  	mlx5_ib_dbg(dev, "Vendor create QP flag 0x%X is not supported\n", flag);  } @@ -2589,6 +2589,8 @@ static int process_vendor_flags(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,  	process_vendor_flag(dev, &flags, MLX5_QP_FLAG_SIGNATURE, true, qp);  	process_vendor_flag(dev, &flags, MLX5_QP_FLAG_SCATTER_CQE,  			    MLX5_CAP_GEN(mdev, sctr_data_cqe), qp); +	process_vendor_flag(dev, &flags, MLX5_QP_FLAG_ALLOW_SCATTER_CQE, +			    MLX5_CAP_GEN(mdev, sctr_data_cqe), qp);  	if (qp->type == IB_QPT_RAW_PACKET) {  		cond = MLX5_CAP_ETH(mdev, tunnel_stateless_vxlan) || @@ -2963,6 +2965,7 @@ struct ib_qp *mlx5_ib_create_qp(struct ib_pd *pd, struct ib_qp_init_attr *attr,  		goto free_ucmd;  	} +	mutex_init(&qp->mutex);  	qp->type = type;  	if (udata) {  		err = process_vendor_flags(dev, qp, params.ucmd, attr);  | 
