ACK: [SRU G][PATCH 1/1] net/mlx5e: Fix SWP offsets when vlan inserted by driver

Kleber Souza kleber.souza at canonical.com
Thu Feb 11 10:34:58 UTC 2021


On 08.02.21 14:42, Stefan Bader wrote:
> From: Moshe Shemesh <moshe at mellanox.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1914447
> 
> In case WQE includes inline header the vlan is inserted by driver even
> if vlan offload is set. On geneve over vlan interface where software
> parser is used the SWP offsets should be updated according to the added
> vlan.
> 
> Fixes: e3cfc7e6b7bd ("net/mlx5e: TX, Add geneve tunnel stateless offload support")
> Signed-off-by: Moshe Shemesh <moshe at mellanox.com>
> Reviewed-by: Tariq Toukan <tariqt at nvidia.com>
> Signed-off-by: Saeed Mahameed <saeedm at nvidia.com>
> 
> (backported from commit b544011f0e58ce43c40105468d6dc67f980a0c7a)
> [smb: adjust for missing mlx5e_accel_tx_eseg(), mlx5e_txwqe_build_eseg()
>        mlx5e_tx_tunnel_accel() called directly from mlx5e_sq_xmit()]
> Signed-off-by: Stefan Bader <stefan.bader at canonical.com>

The backport looks good, good test results.

Acked-by: Kleber Sacilotto de Souza <kleber.souza at canonical.com>

> ---
>   drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h        | 9 +++++++++
>   .../net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h  | 4 +++-
>   drivers/net/ethernet/mellanox/mlx5/core/en_tx.c          | 2 +-
>   3 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h b/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h
> index f0aa23d0665b..29e9aec2bc04 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h
> @@ -299,6 +299,15 @@ struct mlx5e_swp_spec {
>   	u8 tun_l4_proto;
>   };
>   
> +static inline void mlx5e_eseg_swp_offsets_add_vlan(struct mlx5_wqe_eth_seg *eseg)
> +{
> +	/* SWP offsets are in 2-bytes words */
> +	eseg->swp_outer_l3_offset += VLAN_HLEN / 2;
> +	eseg->swp_outer_l4_offset += VLAN_HLEN / 2;
> +	eseg->swp_inner_l3_offset += VLAN_HLEN / 2;
> +	eseg->swp_inner_l4_offset += VLAN_HLEN / 2;
> +}
> +
>   static inline void
>   mlx5e_set_eseg_swp(struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg,
>   		   struct mlx5e_swp_spec *swp_spec)
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h
> index 110476bdeffb..8f039c4a6194 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/en_accel.h
> @@ -51,7 +51,7 @@ static inline bool mlx5_geneve_tx_allowed(struct mlx5_core_dev *mdev)
>   }
>   
>   static inline void
> -mlx5e_tx_tunnel_accel(struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
> +mlx5e_tx_tunnel_accel(struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg, u16 ihs)
>   {
>   	struct mlx5e_swp_spec swp_spec = {};
>   	unsigned int offset = 0;
> @@ -85,6 +85,8 @@ mlx5e_tx_tunnel_accel(struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
>   	}
>   
>   	mlx5e_set_eseg_swp(skb, eseg, &swp_spec);
> +	if (skb_vlan_tag_present(skb) && ihs)
> +		mlx5e_eseg_swp_offsets_add_vlan(eseg);
>   }
>   
>   #else
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
> index da596de3abba..77bd986a8c27 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c
> @@ -341,7 +341,7 @@ void mlx5e_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
>   
>   #if IS_ENABLED(CONFIG_GENEVE)
>   	if (skb->encapsulation)
> -		mlx5e_tx_tunnel_accel(skb, eseg);
> +		mlx5e_tx_tunnel_accel(skb, eseg, ihs);
>   #endif
>   	mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
>   
> 




More information about the kernel-team mailing list