Johnny Hughes
2019-02-04 c1f36c28393a7bb126cbf436cd6a4077a5b5c313
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
From d624fd6fd3b32311a6060d43e5af4e9328611805 Mon Sep 17 00:00:00 2001
From: Antoine Tenart <antoine.tenart@free-electrons.com>
Date: Tue, 28 Nov 2017 14:19:51 +0100
Subject: [PATCH 13/46] net: mvpp2: check ethtool sets the Tx ring size is to a
 valid min value
 
This patch fixes the Tx ring size checks when using ethtool, by adding
an extra check in the PPv2 check_ringparam_valid helper. The Tx ring
size cannot be set to a value smaller than the minimum number of
descriptors needed for TSO.
 
Fixes: 1d17db08c056 ("net: mvpp2: limit TSO segments and use stop/wake thresholds")
Suggested-by: Yan Markman <ymarkman@marvell.com>
Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 76e583c5f50ef539caea6935d37af3595034befb)
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 6 ++++++
 1 file changed, 6 insertions(+)
 
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 5be58b0..d83a78b 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -6842,6 +6842,12 @@ static int mvpp2_check_ringparam_valid(struct net_device *dev,
     else if (!IS_ALIGNED(ring->tx_pending, 32))
         new_tx_pending = ALIGN(ring->tx_pending, 32);
 
+    /* The Tx ring size cannot be smaller than the minimum number of
+     * descriptors needed for TSO.
+     */
+    if (new_tx_pending < MVPP2_MAX_SKB_DESCS)
+        new_tx_pending = ALIGN(MVPP2_MAX_SKB_DESCS, 32);
+
     if (ring->rx_pending != new_rx_pending) {
         netdev_info(dev, "illegal Rx ring size value %d, round to %d\n",
                 ring->rx_pending, new_rx_pending);
-- 
2.7.4