Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -9648,9 +9648,15 @@ static netdev_features_t netdev_fix_features(struct net_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
if ((features & NETIF_F_HW_TLS_TX) && !(features & NETIF_F_HW_CSUM)) {
|
||||
netdev_dbg(dev, "Dropping TLS TX HW offload feature since no CSUM feature.\n");
|
||||
features &= ~NETIF_F_HW_TLS_TX;
|
||||
if (features & NETIF_F_HW_TLS_TX) {
|
||||
bool ip_csum = (features & (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)) ==
|
||||
(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM);
|
||||
bool hw_csum = features & NETIF_F_HW_CSUM;
|
||||
|
||||
if (!ip_csum && !hw_csum) {
|
||||
netdev_dbg(dev, "Dropping TLS TX HW offload feature since no CSUM feature.\n");
|
||||
features &= ~NETIF_F_HW_TLS_TX;
|
||||
}
|
||||
}
|
||||
|
||||
return features;
|
||||
@@ -10064,17 +10070,11 @@ int register_netdevice(struct net_device *dev)
|
||||
ret = call_netdevice_notifiers(NETDEV_REGISTER, dev);
|
||||
ret = notifier_to_errno(ret);
|
||||
if (ret) {
|
||||
/* Expect explicit free_netdev() on failure */
|
||||
dev->needs_free_netdev = false;
|
||||
rollback_registered(dev);
|
||||
rcu_barrier();
|
||||
|
||||
dev->reg_state = NETREG_UNREGISTERED;
|
||||
/* We should put the kobject that hold in
|
||||
* netdev_unregister_kobject(), otherwise
|
||||
* the net device cannot be freed when
|
||||
* driver calls free_netdev(), because the
|
||||
* kobject is being hold.
|
||||
*/
|
||||
kobject_put(&dev->dev.kobj);
|
||||
net_set_todo(dev);
|
||||
goto out;
|
||||
}
|
||||
/*
|
||||
* Prevent userspace races by waiting until the network
|
||||
@@ -10618,6 +10618,17 @@ void free_netdev(struct net_device *dev)
|
||||
struct napi_struct *p, *n;
|
||||
|
||||
might_sleep();
|
||||
|
||||
/* When called immediately after register_netdevice() failed the unwind
|
||||
* handling may still be dismantling the device. Handle that case by
|
||||
* deferring the free.
|
||||
*/
|
||||
if (dev->reg_state == NETREG_UNREGISTERING) {
|
||||
ASSERT_RTNL();
|
||||
dev->needs_free_netdev = true;
|
||||
return;
|
||||
}
|
||||
|
||||
netif_free_tx_queues(dev);
|
||||
netif_free_rx_queues(dev);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user