Skip to content

Commit

Permalink
mlx5: Provide reg C0 value for matching egress traffic
Browse files Browse the repository at this point in the history
When provided the value can be used to match egress traffic from the
local vport in the FDB.

Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Yishai Hadas <yishaih@nvidia.com>
  • Loading branch information
mark-bloch authored and Yishai Hadas committed Dec 14, 2023
1 parent 98dd40b commit c63abc0
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 0 deletions.
2 changes: 2 additions & 0 deletions providers/mlx5/man/mlx5dv_query_device.3
Expand Up @@ -64,6 +64,7 @@ size_t max_wr_memcpy_length; /* max length that is supported by the DMA memcpy W
struct mlx5dv_crypto_caps crypto_caps;
uint64_t max_dc_rd_atom; /* Maximum number of outstanding RDMA read/atomic per DC QP as a requester */
uint64_t max_dc_init_rd_atom; /* Maximum number of outstanding RDMA read/atomic per DC QP as a responder */
struct mlx5dv_reg reg_c0; /* value and mask to match local vport egress traffic in FDB */
.in -8
};

Expand Down Expand Up @@ -105,6 +106,7 @@ MLX5DV_CONTEXT_MASK_DCI_STREAMS = 1 << 11,
MLX5DV_CONTEXT_MASK_WR_MEMCPY_LENGTH = 1 << 12,
MLX5DV_CONTEXT_MASK_CRYPTO_OFFLOAD = 1 << 13,
MLX5DV_CONTEXT_MASK_MAX_DC_RD_ATOM = 1 << 14,
MLX5DV_CONTEXT_MASK_REG_C0 = 1 << 15,
.in -8
};

Expand Down
7 changes: 7 additions & 0 deletions providers/mlx5/mlx5.c
Expand Up @@ -971,6 +971,13 @@ static int _mlx5dv_query_device(struct ibv_context *ctx_in,
comp_mask_out |= MLX5DV_CONTEXT_MASK_MAX_DC_RD_ATOM;
}

if (attrs_out->comp_mask & MLX5DV_CONTEXT_MASK_REG_C0) {
if (mctx->reg_c0.mask) {
attrs_out->reg_c0 = mctx->reg_c0;
comp_mask_out |= MLX5DV_CONTEXT_MASK_REG_C0;
}
}

attrs_out->comp_mask = comp_mask_out;

return 0;
Expand Down
1 change: 1 addition & 0 deletions providers/mlx5/mlx5.h
Expand Up @@ -422,6 +422,7 @@ struct mlx5_context {
pthread_mutex_t crypto_login_mutex;
uint64_t max_dc_rd_atom;
uint64_t max_dc_init_rd_atom;
struct mlx5dv_reg reg_c0;
};

struct mlx5_hugetlb_mem {
Expand Down
2 changes: 2 additions & 0 deletions providers/mlx5/mlx5dv.h
Expand Up @@ -87,6 +87,7 @@ enum mlx5dv_context_comp_mask {
MLX5DV_CONTEXT_MASK_WR_MEMCPY_LENGTH = 1 << 12,
MLX5DV_CONTEXT_MASK_CRYPTO_OFFLOAD = 1 << 13,
MLX5DV_CONTEXT_MASK_MAX_DC_RD_ATOM = 1 << 14,
MLX5DV_CONTEXT_MASK_REG_C0 = 1 << 15,
};

struct mlx5dv_cqe_comp_caps {
Expand Down Expand Up @@ -235,6 +236,7 @@ struct mlx5dv_context {
struct mlx5dv_crypto_caps crypto_caps;
uint64_t max_dc_rd_atom;
uint64_t max_dc_init_rd_atom;
struct mlx5dv_reg reg_c0;
};

enum mlx5dv_context_flags {
Expand Down
1 change: 1 addition & 0 deletions providers/mlx5/verbs.c
Expand Up @@ -4091,6 +4091,7 @@ void mlx5_query_device_ctx(struct mlx5_context *mctx)
resp.dci_streams_caps.max_log_num_concurent;
mctx->dci_streams_caps.max_log_num_errored =
resp.dci_streams_caps.max_log_num_errored;
mctx->reg_c0 = resp.reg_c0;

if (resp.flags & MLX5_IB_QUERY_DEV_RESP_FLAGS_CQE_128B_COMP)
mctx->vendor_cap_flags |= MLX5_VENDOR_CAP_FLAGS_CQE_128B_COMP;
Expand Down

0 comments on commit c63abc0

Please sign in to comment.