Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1e66cc2 authored by Sagi Grimberg's avatar Sagi Grimberg Committed by Roland Dreier
Browse files

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: default avatarSagi Grimberg <sagig@mellanox.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 3121e3c4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -189,6 +189,9 @@ struct mlx5_ib_qp {

	int			create_type;
	u32			pa_lkey;

	/* Store signature errors */
	bool			signature_en;
};

struct mlx5_ib_cq_buf {
+9 −3
Original line number Diff line number Diff line
@@ -256,7 +256,10 @@ static int calc_send_wqe(struct ib_qp_init_attr *attr)
	}

	size += attr->cap.max_send_sge * sizeof(struct mlx5_wqe_data_seg);

	if (attr->create_flags & IB_QP_CREATE_SIGNATURE_EN &&
	    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);
}

@@ -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);
	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);
	qp->sq.wqe_cnt = wq_size / MLX5_SEND_WQE_BB;
	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;

	uuari = &dev->mdev.priv.uuari;
	if (init_attr->create_flags)
	if (init_attr->create_flags & ~IB_QP_CREATE_SIGNATURE_EN)
		return -EINVAL;

	if (init_attr->qp_type == MLX5_IB_QPT_REG_UMR)
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <linux/mlx5/driver.h>

#define MLX5_INVALID_LKEY	0x100
#define MLX5_SIG_WQE_SIZE	(MLX5_SEND_WQE_BB * 5)

enum mlx5_qp_optpar {
	MLX5_QP_OPTPAR_ALT_ADDR_PATH		= 1 << 0,