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);
|
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,
|
static int call_netdevice_notifier(struct notifier_block *nb, unsigned long val,
|
||||||
struct net_device *dev)
|
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) {
|
} else if (new && !old) {
|
||||||
static_key_slow_inc(&generic_xdp_needed);
|
static_key_slow_inc(&generic_xdp_needed);
|
||||||
dev_disable_lro(dev);
|
dev_disable_lro(dev);
|
||||||
|
dev_disable_gro_hw(dev);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче