mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
net/mlx5e: SHAMPO: Do not merge PSP packets
PSP packets are UDP-encapsulated, and enabling HW GRO (SHAMPO in mlx5)
makes it possible to merge those packets in a silly way:
IP|UDP|PSP1|payload1|PSP2|payload2|...
That happens because the HW GRO machinery doesn't know about PSP and
considers it part of the UDP payload.
Reject merging when the incoming CQE has PSP marker or the pending skb
has the PSP extension.
Fixes: 29d7f433fc ("net/mlx5e: Add Rx data path offload")
Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Daniel Zahka <daniel.zahka@gmail.com>
Link: https://patch.msgid.link/20261021062805.3466208-1-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
546daf3444
commit
46bd2bf65b
|
|
@ -218,6 +218,12 @@ static inline void mlx5e_accel_tx_finish(struct mlx5e_txqsq *sq,
|
|||
#endif
|
||||
}
|
||||
|
||||
static inline bool
|
||||
mlx5e_accel_shampo_can_merge(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe)
|
||||
{
|
||||
return mlx5e_psp_shampo_can_merge(rq->hw_gro_data->skb, cqe);
|
||||
}
|
||||
|
||||
static inline int mlx5e_accel_init_rx(struct mlx5e_priv *priv)
|
||||
{
|
||||
return mlx5e_ktls_init_rx(priv);
|
||||
|
|
|
|||
|
|
@ -85,6 +85,13 @@ static inline bool mlx5e_psp_is_rx_flow(struct mlx5_cqe64 *cqe)
|
|||
return MLX5_PSP_METADATA_MARKER(be32_to_cpu(cqe->ft_metadata));
|
||||
}
|
||||
|
||||
static inline bool
|
||||
mlx5e_psp_shampo_can_merge(struct sk_buff *skb, struct mlx5_cqe64 *cqe)
|
||||
{
|
||||
/* PSP packets cannot be merged. */
|
||||
return !skb_ext_exist(skb, SKB_EXT_PSP) && !mlx5e_psp_is_rx_flow(cqe);
|
||||
}
|
||||
|
||||
bool mlx5e_psp_offload_handle_rx_skb(struct net_device *netdev, struct sk_buff *skb,
|
||||
struct mlx5_cqe64 *cqe);
|
||||
#else
|
||||
|
|
@ -110,6 +117,12 @@ static inline bool mlx5e_psp_is_rx_flow(struct mlx5_cqe64 *cqe)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
mlx5e_psp_shampo_can_merge(struct sk_buff *skb, struct mlx5_cqe64 *cqe)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool mlx5e_psp_offload_handle_rx_skb(struct net_device *netdev,
|
||||
struct sk_buff *skb,
|
||||
struct mlx5_cqe64 *cqe)
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
#include "en_rep.h"
|
||||
#include "en/rep/tc.h"
|
||||
#include "ipoib/ipoib.h"
|
||||
#include "en_accel/en_accel.h"
|
||||
#include "en_accel/ipsec.h"
|
||||
#include "en_accel/macsec.h"
|
||||
#include "en_accel/psp_rxtx.h"
|
||||
|
|
@ -2268,8 +2269,9 @@ static void mlx5e_handle_rx_cqe_mpwrq_shampo(struct mlx5e_rq *rq, struct mlx5_cq
|
|||
}
|
||||
|
||||
if (*skb &&
|
||||
!(match && mlx5e_hw_gro_skb_has_enough_space(*skb, data_bcnt,
|
||||
page_size))) {
|
||||
!(match &&
|
||||
mlx5e_hw_gro_skb_has_enough_space(*skb, data_bcnt, page_size) &&
|
||||
mlx5e_accel_shampo_can_merge(rq, cqe))) {
|
||||
match = false;
|
||||
mlx5e_shampo_flush_skb(rq, cqe, match);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user