From c63abc09fe0f0d2c94d01e6bffa493d71fa86a0c Mon Sep 17 00:00:00 2001 From: Mark Bloch Date: Tue, 24 Oct 2023 12:18:32 +0300 Subject: [PATCH] mlx5: Provide reg C0 value for matching egress traffic When provided the value can be used to match egress traffic from the local vport in the FDB. Signed-off-by: Mark Bloch Signed-off-by: Yishai Hadas --- providers/mlx5/man/mlx5dv_query_device.3 | 2 ++ providers/mlx5/mlx5.c | 7 +++++++ providers/mlx5/mlx5.h | 1 + providers/mlx5/mlx5dv.h | 2 ++ providers/mlx5/verbs.c | 1 + 5 files changed, 13 insertions(+) diff --git a/providers/mlx5/man/mlx5dv_query_device.3 b/providers/mlx5/man/mlx5dv_query_device.3 index 2fefb8fd1..966744ad8 100644 --- a/providers/mlx5/man/mlx5dv_query_device.3 +++ b/providers/mlx5/man/mlx5dv_query_device.3 @@ -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 }; @@ -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 }; diff --git a/providers/mlx5/mlx5.c b/providers/mlx5/mlx5.c index eaec93c8e..7eabad533 100644 --- a/providers/mlx5/mlx5.c +++ b/providers/mlx5/mlx5.c @@ -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; diff --git a/providers/mlx5/mlx5.h b/providers/mlx5/mlx5.h index 5bef2e6df..199c4ab60 100644 --- a/providers/mlx5/mlx5.h +++ b/providers/mlx5/mlx5.h @@ -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 { diff --git a/providers/mlx5/mlx5dv.h b/providers/mlx5/mlx5dv.h index c638fc823..a9d466832 100644 --- a/providers/mlx5/mlx5dv.h +++ b/providers/mlx5/mlx5dv.h @@ -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 { @@ -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 { diff --git a/providers/mlx5/verbs.c b/providers/mlx5/verbs.c index 22583d13e..2e3203ab8 100644 --- a/providers/mlx5/verbs.c +++ b/providers/mlx5/verbs.c @@ -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;