IB/mlx5: Collect signature error completion
This commit takes care of the generated signature error CQE generated by the HW (if happened). The underlying mlx5 driver will handle signature error completions and will mark the relevant memory region as dirty. Once the consumer gets the completion for the transaction, it must check for signature errors on signature memory region using a new lightweight verb ib_check_mr_status(). In case the user doesn't check for signature error (i.e. doesn't call ib_check_mr_status() with status check IB_MR_CHECK_SIG_STATUS), the memory region cannot be used for another signature operation (REG_SIG_MR work request will fail). Signed-off-by: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:

committed by
Roland Dreier

parent
e6631814fb
commit
d5436ba010
@@ -80,6 +80,7 @@ enum {
|
||||
MLX5_CQE_RESP_SEND_IMM = 3,
|
||||
MLX5_CQE_RESP_SEND_INV = 4,
|
||||
MLX5_CQE_RESIZE_CQ = 5,
|
||||
MLX5_CQE_SIG_ERR = 12,
|
||||
MLX5_CQE_REQ_ERR = 13,
|
||||
MLX5_CQE_RESP_ERR = 14,
|
||||
MLX5_CQE_INVALID = 15,
|
||||
|
@@ -118,6 +118,7 @@ enum {
|
||||
MLX5_MKEY_MASK_START_ADDR = 1ull << 6,
|
||||
MLX5_MKEY_MASK_PD = 1ull << 7,
|
||||
MLX5_MKEY_MASK_EN_RINVAL = 1ull << 8,
|
||||
MLX5_MKEY_MASK_EN_SIGERR = 1ull << 9,
|
||||
MLX5_MKEY_MASK_BSF_EN = 1ull << 12,
|
||||
MLX5_MKEY_MASK_KEY = 1ull << 13,
|
||||
MLX5_MKEY_MASK_QPN = 1ull << 14,
|
||||
@@ -557,6 +558,23 @@ struct mlx5_cqe64 {
|
||||
u8 op_own;
|
||||
};
|
||||
|
||||
struct mlx5_sig_err_cqe {
|
||||
u8 rsvd0[16];
|
||||
__be32 expected_trans_sig;
|
||||
__be32 actual_trans_sig;
|
||||
__be32 expected_reftag;
|
||||
__be32 actual_reftag;
|
||||
__be16 syndrome;
|
||||
u8 rsvd22[2];
|
||||
__be32 mkey;
|
||||
__be64 err_offset;
|
||||
u8 rsvd30[8];
|
||||
__be32 qpn;
|
||||
u8 rsvd38[2];
|
||||
u8 signature;
|
||||
u8 op_own;
|
||||
};
|
||||
|
||||
struct mlx5_wqe_srq_next_seg {
|
||||
u8 rsvd0[2];
|
||||
__be16 next_wqe_index;
|
||||
|
@@ -416,6 +416,10 @@ struct mlx5_core_psv {
|
||||
struct mlx5_core_sig_ctx {
|
||||
struct mlx5_core_psv psv_memory;
|
||||
struct mlx5_core_psv psv_wire;
|
||||
struct ib_sig_err err_item;
|
||||
bool sig_status_checked;
|
||||
bool sig_err_exists;
|
||||
u32 sigerr_count;
|
||||
};
|
||||
|
||||
struct mlx5_core_mr {
|
||||
|
@@ -506,6 +506,11 @@ static inline struct mlx5_core_qp *__mlx5_qp_lookup(struct mlx5_core_dev *dev, u
|
||||
return radix_tree_lookup(&dev->priv.qp_table.tree, qpn);
|
||||
}
|
||||
|
||||
static inline struct mlx5_core_mr *__mlx5_mr_lookup(struct mlx5_core_dev *dev, u32 key)
|
||||
{
|
||||
return radix_tree_lookup(&dev->priv.mr_table.tree, key);
|
||||
}
|
||||
|
||||
int mlx5_core_create_qp(struct mlx5_core_dev *dev,
|
||||
struct mlx5_core_qp *qp,
|
||||
struct mlx5_create_qp_mbox_in *in,
|
||||
|
Reference in New Issue
Block a user