]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/5.0.10/net-mlx5e-xdp-avoid-checksum-complete-when-xdp-prog-is-loaded.patch
Fixes for 4.19
[thirdparty/kernel/stable-queue.git] / releases / 5.0.10 / net-mlx5e-xdp-avoid-checksum-complete-when-xdp-prog-is-loaded.patch
CommitLineData
0ee3da53
GKH
1From foo@baz Sat Apr 20 16:43:09 CEST 2019
2From: Saeed Mahameed <saeedm@mellanox.com>
3Date: Thu, 21 Mar 2019 19:07:20 -0700
4Subject: net/mlx5e: XDP, Avoid checksum complete when XDP prog is loaded
5
6From: Saeed Mahameed <saeedm@mellanox.com>
7
8[ Upstream commit 5d0bb3bac4b9f6c22280b04545626fdfd99edc6b ]
9
10XDP programs might change packets data contents which will make the
11reported skb checksum (checksum complete) invalid.
12
13When XDP programs are loaded/unloaded set/clear rx RQs
14MLX5E_RQ_STATE_NO_CSUM_COMPLETE flag.
15
16Fixes: 86994156c736 ("net/mlx5e: XDP fast RX drop bpf programs support")
17Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
18Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
19Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
20---
21 drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c | 3 ++-
22 drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 6 +++++-
23 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 3 ++-
24 3 files changed, 9 insertions(+), 3 deletions(-)
25
26--- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
27+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
28@@ -1665,7 +1665,8 @@ static int set_pflag_rx_no_csum_complete
29 struct mlx5e_channel *c;
30 int i;
31
32- if (!test_bit(MLX5E_STATE_OPENED, &priv->state))
33+ if (!test_bit(MLX5E_STATE_OPENED, &priv->state) ||
34+ priv->channels.params.xdp_prog)
35 return 0;
36
37 for (i = 0; i < channels->num; i++) {
38--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
39+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
40@@ -950,7 +950,11 @@ static int mlx5e_open_rq(struct mlx5e_ch
41 if (params->rx_dim_enabled)
42 __set_bit(MLX5E_RQ_STATE_AM, &c->rq.state);
43
44- if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE))
45+ /* We disable csum_complete when XDP is enabled since
46+ * XDP programs might manipulate packets which will render
47+ * skb->checksum incorrect.
48+ */
49+ if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE) || c->xdp)
50 __set_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &c->rq.state);
51
52 return 0;
53--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
54+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
55@@ -753,7 +753,8 @@ static inline void mlx5e_handle_csum(str
56 return;
57 }
58
59- if (unlikely(test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state)))
60+ /* True when explicitly set via priv flag, or XDP prog is loaded */
61+ if (test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state))
62 goto csum_unnecessary;
63
64 /* CQE csum doesn't cover padding octets in short ethernet