IB/mlx5: Initialize mlx5_ib_qp signature-related members
If user requested signature enable we initialize relevant mlx5_ib_qp members. We mark the qp as sig_enable and we increase the effective SQ size, but still limit the user max_send_wr to original size computed. We also allow the create_qp routine to accept sig_enable create flag. Signed-off-by: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
3121e3c441
commit
e1e66cc264
3 changed files with 13 additions and 3 deletions
|
@ -189,6 +189,9 @@ struct mlx5_ib_qp {
|
||||||
|
|
||||||
int create_type;
|
int create_type;
|
||||||
u32 pa_lkey;
|
u32 pa_lkey;
|
||||||
|
|
||||||
|
/* Store signature errors */
|
||||||
|
bool signature_en;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mlx5_ib_cq_buf {
|
struct mlx5_ib_cq_buf {
|
||||||
|
|
|
@ -256,8 +256,11 @@ static int calc_send_wqe(struct ib_qp_init_attr *attr)
|
||||||
}
|
}
|
||||||
|
|
||||||
size += attr->cap.max_send_sge * sizeof(struct mlx5_wqe_data_seg);
|
size += attr->cap.max_send_sge * sizeof(struct mlx5_wqe_data_seg);
|
||||||
|
if (attr->create_flags & IB_QP_CREATE_SIGNATURE_EN &&
|
||||||
return ALIGN(max_t(int, inl_size, size), MLX5_SEND_WQE_BB);
|
ALIGN(max_t(int, inl_size, size), MLX5_SEND_WQE_BB) < MLX5_SIG_WQE_SIZE)
|
||||||
|
return MLX5_SIG_WQE_SIZE;
|
||||||
|
else
|
||||||
|
return ALIGN(max_t(int, inl_size, size), MLX5_SEND_WQE_BB);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int calc_sq_size(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr,
|
static int calc_sq_size(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr,
|
||||||
|
@ -284,6 +287,9 @@ static int calc_sq_size(struct mlx5_ib_dev *dev, struct ib_qp_init_attr *attr,
|
||||||
sizeof(struct mlx5_wqe_inline_seg);
|
sizeof(struct mlx5_wqe_inline_seg);
|
||||||
attr->cap.max_inline_data = qp->max_inline_data;
|
attr->cap.max_inline_data = qp->max_inline_data;
|
||||||
|
|
||||||
|
if (attr->create_flags & IB_QP_CREATE_SIGNATURE_EN)
|
||||||
|
qp->signature_en = true;
|
||||||
|
|
||||||
wq_size = roundup_pow_of_two(attr->cap.max_send_wr * wqe_size);
|
wq_size = roundup_pow_of_two(attr->cap.max_send_wr * wqe_size);
|
||||||
qp->sq.wqe_cnt = wq_size / MLX5_SEND_WQE_BB;
|
qp->sq.wqe_cnt = wq_size / MLX5_SEND_WQE_BB;
|
||||||
if (qp->sq.wqe_cnt > dev->mdev.caps.max_wqes) {
|
if (qp->sq.wqe_cnt > dev->mdev.caps.max_wqes) {
|
||||||
|
@ -665,7 +671,7 @@ static int create_kernel_qp(struct mlx5_ib_dev *dev,
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
uuari = &dev->mdev.priv.uuari;
|
uuari = &dev->mdev.priv.uuari;
|
||||||
if (init_attr->create_flags)
|
if (init_attr->create_flags & ~IB_QP_CREATE_SIGNATURE_EN)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR)
|
if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR)
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <linux/mlx5/driver.h>
|
#include <linux/mlx5/driver.h>
|
||||||
|
|
||||||
#define MLX5_INVALID_LKEY 0x100
|
#define MLX5_INVALID_LKEY 0x100
|
||||||
|
#define MLX5_SIG_WQE_SIZE (MLX5_SEND_WQE_BB * 5)
|
||||||
|
|
||||||
enum mlx5_qp_optpar {
|
enum mlx5_qp_optpar {
|
||||||
MLX5_QP_OPTPAR_ALT_ADDR_PATH = 1 << 0,
|
MLX5_QP_OPTPAR_ALT_ADDR_PATH = 1 << 0,
|
||||||
|
|
Loading…
Add table
Reference in a new issue