Thread (17 messages) 17 messages, 2 authors, 2017-12-11

Re: [PATCH net-next v3 2/5] net: Disable GRO_HW when generic XDP is installed on a device.

flat view

From: Michael Chan <michael.chan@broadcom.com>
Date: 2017-12-09 21:40:32

On Sat, Dec 9, 2017 at 10:56 AM, Alexander Duyck
[off-list ref] wrote:
On Fri, Dec 8, 2017 at 10:27 PM, Michael Chan [off-list ref] wrote:
quoted
Hardware should not aggregate any packets when generic XDP is installed.

Cc: Ariel Elior <redacted>
Cc: everest-linux-l2@cavium.com
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
---
 net/core/dev.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
diff --git a/net/core/dev.c b/net/core/dev.c
index 6ebd0e7..ec08ace 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1542,6 +1542,29 @@ void dev_disable_lro(struct net_device *dev)
 }
 EXPORT_SYMBOL(dev_disable_lro);

+/**
+ *     dev_disable_gro_hw - disable HW Generic Receive Offload on a device
+ *     @dev: device
+ *
+ *     Disable HW Generic Receive Offload (GRO_HW) on a net device.  Must be
+ *     called under RTNL.  This is needed if Generic XDP is installed on
+ *     the device.
+ */
+static void dev_disable_gro_hw(struct net_device *dev)
+{
+       struct net_device *lower_dev;
+       struct list_head *iter;
+
+       dev->wanted_features &= ~NETIF_F_GRO_HW;
+       netdev_update_features(dev);
+
+       if (unlikely(dev->features & NETIF_F_GRO_HW))
+               netdev_WARN(dev, "failed to disable GRO_HW!\n");
+
+       netdev_for_each_lower_dev(dev, lower_dev, iter)
+               dev_disable_gro_hw(lower_dev);
I think these two lines are redundant in dev_disable_lro, since
netdev_update_features should propagate the disable to all of the
lower devices.
Right.  But for GRO_HW, there is no automatic propagation.
Also this doesn't prevent the lower devices from
re-enabling gro_hw.
Right.  You can re-enable LRO on the upper device as well.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help