net: Disable GRO_HW when generic XDP is installed on a device.
Hardware should not aggregate any packets when generic XDP is installed. Cc: Ariel Elior <Ariel.Elior@cavium.com> Cc: everest-linux-l2@cavium.com Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
fb1f5f79ae
Коммит
56f5aa77cd
|
@ -1542,6 +1542,23 @@ 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)
|
||||
{
|
||||
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");
|
||||
}
|
||||
|
||||
static int call_netdevice_notifier(struct notifier_block *nb, unsigned long val,
|
||||
struct net_device *dev)
|
||||
{
|
||||
|
@ -4564,6 +4581,7 @@ static int generic_xdp_install(struct net_device *dev, struct netdev_bpf *xdp)
|
|||
} else if (new && !old) {
|
||||
static_key_slow_inc(&generic_xdp_needed);
|
||||
dev_disable_lro(dev);
|
||||
dev_disable_gro_hw(dev);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче