Skip to content

Commit b336e6b

Browse files
Tariq Toukankuba-moo
authored andcommitted
net/mlx5e: kTLS, Enforce HW TX csum offload with kTLS
Checksum calculation cannot be done in SW for TX kTLS HW offloaded packets. Offload it to the device, disregard the declared state of the TX csum offload feature. Fixes: d2ead1f ("net/mlx5e: Add kTLS TX HW offload support") Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Reviewed-by: Maxim Mikityanskiy <maximmi@mellanox.com> Reviewed-by: Boris Pismenny <borisp@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 8a78a44 commit b336e6b

1 file changed

Lines changed: 15 additions & 7 deletions

File tree

  • drivers/net/ethernet/mellanox/mlx5/core

drivers/net/ethernet/mellanox/mlx5/core/en_tx.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,9 @@ ipsec_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb,
161161
}
162162

163163
static inline void
164-
mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
164+
mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb,
165+
struct mlx5e_accel_tx_state *accel,
166+
struct mlx5_wqe_eth_seg *eseg)
165167
{
166168
if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
167169
eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM;
@@ -173,6 +175,11 @@ mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct
173175
eseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;
174176
sq->stats->csum_partial++;
175177
}
178+
#ifdef CONFIG_MLX5_EN_TLS
179+
} else if (unlikely(accel && accel->tls.tls_tisn)) {
180+
eseg->cs_flags = MLX5_ETH_WQE_L3_CSUM | MLX5_ETH_WQE_L4_CSUM;
181+
sq->stats->csum_partial++;
182+
#endif
176183
} else if (unlikely(eseg->flow_table_metadata & cpu_to_be32(MLX5_ETH_WQE_FT_META_IPSEC))) {
177184
ipsec_txwqe_build_eseg_csum(sq, skb, eseg);
178185

@@ -607,12 +614,13 @@ void mlx5e_tx_mpwqe_ensure_complete(struct mlx5e_txqsq *sq)
607614
}
608615

609616
static bool mlx5e_txwqe_build_eseg(struct mlx5e_priv *priv, struct mlx5e_txqsq *sq,
610-
struct sk_buff *skb, struct mlx5_wqe_eth_seg *eseg)
617+
struct sk_buff *skb, struct mlx5e_accel_tx_state *accel,
618+
struct mlx5_wqe_eth_seg *eseg)
611619
{
612620
if (unlikely(!mlx5e_accel_tx_eseg(priv, skb, eseg)))
613621
return false;
614622

615-
mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
623+
mlx5e_txwqe_build_eseg_csum(sq, skb, accel, eseg);
616624

617625
return true;
618626
}
@@ -639,7 +647,7 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)
639647
if (mlx5e_tx_skb_supports_mpwqe(skb, &attr)) {
640648
struct mlx5_wqe_eth_seg eseg = {};
641649

642-
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &eseg)))
650+
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &accel, &eseg)))
643651
return NETDEV_TX_OK;
644652

645653
mlx5e_sq_xmit_mpwqe(sq, skb, &eseg, netdev_xmit_more());
@@ -656,7 +664,7 @@ netdev_tx_t mlx5e_xmit(struct sk_buff *skb, struct net_device *dev)
656664
/* May update the WQE, but may not post other WQEs. */
657665
mlx5e_accel_tx_finish(sq, wqe, &accel,
658666
(struct mlx5_wqe_inline_seg *)(wqe->data + wqe_attr.ds_cnt_inl));
659-
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &wqe->eth)))
667+
if (unlikely(!mlx5e_txwqe_build_eseg(priv, sq, skb, &accel, &wqe->eth)))
660668
return NETDEV_TX_OK;
661669

662670
mlx5e_sq_xmit_wqe(sq, skb, &attr, &wqe_attr, wqe, pi, netdev_xmit_more());
@@ -675,7 +683,7 @@ void mlx5e_sq_xmit_simple(struct mlx5e_txqsq *sq, struct sk_buff *skb, bool xmit
675683
mlx5e_sq_calc_wqe_attr(skb, &attr, &wqe_attr);
676684
pi = mlx5e_txqsq_get_next_pi(sq, wqe_attr.num_wqebbs);
677685
wqe = MLX5E_TX_FETCH_WQE(sq, pi);
678-
mlx5e_txwqe_build_eseg_csum(sq, skb, &wqe->eth);
686+
mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, &wqe->eth);
679687
mlx5e_sq_xmit_wqe(sq, skb, &attr, &wqe_attr, wqe, pi, xmit_more);
680688
}
681689

@@ -944,7 +952,7 @@ void mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
944952

945953
mlx5i_txwqe_build_datagram(av, dqpn, dqkey, datagram);
946954

947-
mlx5e_txwqe_build_eseg_csum(sq, skb, eseg);
955+
mlx5e_txwqe_build_eseg_csum(sq, skb, NULL, eseg);
948956

949957
eseg->mss = attr.mss;
950958

0 commit comments

Comments
 (0)