Commit 2ac20738 authored by Carolina Jubran's avatar Carolina Jubran Committed by Leon Romanovsky
Browse files

net/mlx5e: Prevent WQE metadata conflicts between timestamping and offloads



Update the WQE metadata assignment to avoid overriding existing
metadata when setting the sysport timestamp ID. Since timestamp IDs are
limited to 256 values, they use only the lower 8 bits of the metadata
field.

To avoid conflicts, move IPsec and MACsec metadata ID to bits 8 and 9,
and shift the MACsec fs_id accordingly. This ensures safe coexistence
of timestamping and offload features that use the same metadata field.

Signed-off-by: default avatarCarolina Jubran <cjubran@nvidia.com>
Reviewed-by: default avatarJianbo Liu <jianbol@nvidia.com>
Reviewed-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
Reviewed-by: default avatarDragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/1757574619-604874-4-git-send-email-tariqt@nvidia.com


Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent cce65f32
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -653,7 +653,7 @@ static void mlx5e_cqe_ts_id_eseg(struct mlx5e_ptpsq *ptpsq, struct sk_buff *skb,
				 struct mlx5_wqe_eth_seg *eseg)
{
	if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))
		eseg->flow_table_metadata =
		eseg->flow_table_metadata |=
			cpu_to_be32(mlx5e_ptp_metadata_fifo_peek(&ptpsq->metadata_freelist));
}

+1 −1
Original line number Diff line number Diff line
@@ -2219,7 +2219,7 @@ static int mlx5_macsec_fs_add_roce_rule_tx(struct mlx5_macsec_fs *macsec_fs, u32
		 mlx5_macsec_fs_set_tx_fs_id(fs_id));
	MLX5_SET(set_action_in, action, offset,
		 MLX5_ETH_WQE_FT_META_MACSEC_SHIFT);
	MLX5_SET(set_action_in, action, length, 32);
	MLX5_SET(set_action_in, action, length, 8);

	modify_hdr = mlx5_modify_header_alloc(mdev, MLX5_FLOW_NAMESPACE_RDMA_TX_MACSEC,
					      1, action);
+3 −2
Original line number Diff line number Diff line
@@ -251,8 +251,9 @@ enum {
	MLX5_ETH_WQE_SWP_OUTER_L4_UDP   = 1 << 5,
};

/* Base shift for metadata bits used by timestamping, IPsec, and MACsec */
#define MLX5_ETH_WQE_FT_META_SHIFT 0
/* Metadata bits 0-7 are used by timestamping */
/* Base shift for metadata bits used by IPsec and MACsec */
#define MLX5_ETH_WQE_FT_META_SHIFT 8

enum {
	MLX5_ETH_WQE_FT_META_IPSEC = BIT(0) << MLX5_ETH_WQE_FT_META_SHIFT,