forked from luck/tmp_suning_uos_patched
RDMA/mlx5: Allow providing extra scatter CQE QP flag
Scatter CQE feature relies on two flags MLX5_QP_FLAG_SCATTER_CQE and MLX5_QP_FLAG_ALLOW_SCATTER_CQE, both of them can be provided without relation to device capability. Relax global validity check to allow MLX5_QP_FLAG_ALLOW_SCATTER_CQE QP flag. Existing user applications are failing on this new validity check. Fixes:90ecb37a75
("RDMA/mlx5: Change scatter CQE flag to be set like other vendor flags") Fixes:37518fa49f
("RDMA/mlx5: Process all vendor flags in one place") Link: https://lore.kernel.org/r/20200728120255.805733-1-leon@kernel.org Reviewed-by: Artemy Kovalyov <artemyko@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
5351a56b1a
commit
81530ab08e
|
@ -1766,15 +1766,14 @@ static int create_rss_raw_qp_tir(struct mlx5_ib_dev *dev, struct ib_pd *pd,
|
|||
}
|
||||
|
||||
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;
|
||||
|
@ -2012,7 +2011,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);
|
||||
|
@ -2543,13 +2542,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 +2593,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) ||
|
||||
|
|
Loading…
Reference in New Issue
Block a user