Skip to content

Commit cce65f3

Browse files
cjubranrleon
authored andcommitted
net/mlx5: Refactor MACsec WQE metadata shifts
Introduce MLX5_ETH_WQE_FT_META_SHIFT as a shared base offset for features that use the lower 8 bits of the WQE flow_table_metadata field, currently used for timestamping, IPsec, and MACsec. Define MLX5_ETH_WQE_FT_META_MACSEC_FS_ID_MASK so that fs_id occupies bits 2–5, making it clear that fs_id occupies bits in the metadata. Set MLX5_ETH_WQE_FT_META_MACSEC_MASK as the OR of the MACsec flag and MLX5_ETH_WQE_FT_META_MACSEC_FS_ID_MASK, corresponding to the original 0x3E mask. Update the fs_id macro to right-shift the MACsec flag by MLX5_ETH_WQE_FT_META_SHIFT and update the RoCE modify-header action to use it. Introduce the helper macro MLX5_MACSEC_TX_METADATA(fs_id) to compose the full shifted MACsec metadata value. These changes make it explicit exactly which metadata bits carry MACsec information, simplifying future feature exclusions when multiple features share the WQE flowtable metadata. In addition, drop the incorrect “RX flow steering” comment, since this applies to TX flow steering. Signed-off-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Jianbo Liu <jianbol@nvidia.com> Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/1757574619-604874-3-git-send-email-tariqt@nvidia.com Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent de2be98 commit cce65f3

4 files changed

Lines changed: 28 additions & 10 deletions

File tree

drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,7 @@ void mlx5e_macsec_tx_build_eseg(struct mlx5e_macsec *macsec,
16761676
if (!fs_id)
16771677
return;
16781678

1679-
eseg->flow_table_metadata = cpu_to_be32(MLX5_ETH_WQE_FT_META_MACSEC | fs_id << 2);
1679+
eseg->flow_table_metadata = cpu_to_be32(MLX5_MACSEC_TX_METADATA(fs_id));
16801680
}
16811681

16821682
void mlx5e_macsec_offload_handle_rx_skb(struct net_device *netdev,

drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,7 @@
4545
#define MLX5_SECTAG_HEADER_SIZE_WITHOUT_SCI 0x8
4646
#define MLX5_SECTAG_HEADER_SIZE_WITH_SCI (MLX5_SECTAG_HEADER_SIZE_WITHOUT_SCI + MACSEC_SCI_LEN)
4747

48-
/* MACsec RX flow steering */
49-
#define MLX5_ETH_WQE_FT_META_MACSEC_MASK 0x3E
50-
5148
/* MACsec fs_id handling for steering */
52-
#define macsec_fs_set_tx_fs_id(fs_id) (MLX5_ETH_WQE_FT_META_MACSEC | (fs_id) << 2)
5349
#define macsec_fs_set_rx_fs_id(fs_id) ((fs_id) | BIT(30))
5450

5551
struct mlx5_sectag_header {
@@ -597,7 +593,7 @@ static int macsec_fs_tx_setup_fte(struct mlx5_macsec_fs *macsec_fs,
597593
MLX5_SET(fte_match_param, spec->match_criteria, misc_parameters_2.metadata_reg_a,
598594
MLX5_ETH_WQE_FT_META_MACSEC_MASK);
599595
MLX5_SET(fte_match_param, spec->match_value, misc_parameters_2.metadata_reg_a,
600-
macsec_fs_set_tx_fs_id(id));
596+
MLX5_MACSEC_TX_METADATA(id));
601597

602598
*fs_id = id;
603599
flow_act->crypto.type = MLX5_FLOW_CONTEXT_ENCRYPT_DECRYPT_TYPE_MACSEC;
@@ -2219,8 +2215,10 @@ static int mlx5_macsec_fs_add_roce_rule_tx(struct mlx5_macsec_fs *macsec_fs, u32
22192215

22202216
MLX5_SET(set_action_in, action, action_type, MLX5_ACTION_TYPE_SET);
22212217
MLX5_SET(set_action_in, action, field, MLX5_ACTION_IN_FIELD_METADATA_REG_A);
2222-
MLX5_SET(set_action_in, action, data, macsec_fs_set_tx_fs_id(fs_id));
2223-
MLX5_SET(set_action_in, action, offset, 0);
2218+
MLX5_SET(set_action_in, action, data,
2219+
mlx5_macsec_fs_set_tx_fs_id(fs_id));
2220+
MLX5_SET(set_action_in, action, offset,
2221+
MLX5_ETH_WQE_FT_META_MACSEC_SHIFT);
22242222
MLX5_SET(set_action_in, action, length, 32);
22252223

22262224
modify_hdr = mlx5_modify_header_alloc(mdev, MLX5_FLOW_NAMESPACE_RDMA_TX_MACSEC,

drivers/net/ethernet/mellanox/mlx5/core/lib/macsec_fs.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,21 @@
1212
#define MLX5_MACSEC_METADATA_MARKER(metadata) ((((metadata) >> 30) & 0x3) == 0x1)
1313
#define MLX5_MACSEC_RX_METADAT_HANDLE(metadata) ((metadata) & MLX5_MACSEC_RX_FS_ID_MASK)
1414

15+
/* MACsec TX flow steering */
16+
#define MLX5_ETH_WQE_FT_META_MACSEC_MASK \
17+
(MLX5_ETH_WQE_FT_META_MACSEC | MLX5_ETH_WQE_FT_META_MACSEC_FS_ID_MASK)
18+
#define MLX5_ETH_WQE_FT_META_MACSEC_SHIFT MLX5_ETH_WQE_FT_META_SHIFT
19+
20+
/* MACsec fs_id handling for steering */
21+
#define mlx5_macsec_fs_set_tx_fs_id(fs_id) \
22+
(((MLX5_ETH_WQE_FT_META_MACSEC) >> MLX5_ETH_WQE_FT_META_MACSEC_SHIFT) \
23+
| ((fs_id) << 2))
24+
25+
#define MLX5_MACSEC_TX_METADATA(fs_id) \
26+
(mlx5_macsec_fs_set_tx_fs_id(fs_id) << \
27+
MLX5_ETH_WQE_FT_META_MACSEC_SHIFT)
28+
29+
/* MACsec fs_id uses 4 bits, supports up to 16 interfaces */
1530
#define MLX5_MACSEC_NUM_OF_SUPPORTED_INTERFACES 16
1631

1732
struct mlx5_macsec_fs;

include/linux/mlx5/qp.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,14 @@ enum {
251251
MLX5_ETH_WQE_SWP_OUTER_L4_UDP = 1 << 5,
252252
};
253253

254+
/* Base shift for metadata bits used by timestamping, IPsec, and MACsec */
255+
#define MLX5_ETH_WQE_FT_META_SHIFT 0
256+
254257
enum {
255-
MLX5_ETH_WQE_FT_META_IPSEC = BIT(0),
256-
MLX5_ETH_WQE_FT_META_MACSEC = BIT(1),
258+
MLX5_ETH_WQE_FT_META_IPSEC = BIT(0) << MLX5_ETH_WQE_FT_META_SHIFT,
259+
MLX5_ETH_WQE_FT_META_MACSEC = BIT(1) << MLX5_ETH_WQE_FT_META_SHIFT,
260+
MLX5_ETH_WQE_FT_META_MACSEC_FS_ID_MASK =
261+
GENMASK(5, 2) << MLX5_ETH_WQE_FT_META_SHIFT,
257262
};
258263

259264
struct mlx5_wqe_eth_seg {

0 commit comments

Comments
 (0)