]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-5.0/net-mlx5e-xdp-avoid-checksum-complete-when-xdp-prog-is-loaded.patch
5.0-stable patches
[thirdparty/kernel/stable-queue.git] / queue-5.0 / net-mlx5e-xdp-avoid-checksum-complete-when-xdp-prog-is-loaded.patch
1 From foo@baz Sat Apr 20 16:43:09 CEST 2019
2 From: Saeed Mahameed <saeedm@mellanox.com>
3 Date: Thu, 21 Mar 2019 19:07:20 -0700
4 Subject: net/mlx5e: XDP, Avoid checksum complete when XDP prog is loaded
5
6 From: Saeed Mahameed <saeedm@mellanox.com>
7
8 [ Upstream commit 5d0bb3bac4b9f6c22280b04545626fdfd99edc6b ]
9
10 XDP programs might change packets data contents which will make the
11 reported skb checksum (checksum complete) invalid.
12
13 When XDP programs are loaded/unloaded set/clear rx RQs
14 MLX5E_RQ_STATE_NO_CSUM_COMPLETE flag.
15
16 Fixes: 86994156c736 ("net/mlx5e: XDP fast RX drop bpf programs support")
17 Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
18 Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
19 Signed-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