sfc: Remove bogus call to efx_release_tx_buffers()
efx_unregister_netdev() should not call efx_release_tx_buffers() directly, as it is already done when closing the device: efx_net_stop() -> efx_stop_all() -> efx_stop_datapath() -> efx_fini_tx_queue() -> efx_release_tx_buffers(). (This was presumably a workaround for a race between efx_stop_all() and the data path that has since been properly fixed.) Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
d8aec745dd
commit
501a248cf6
@ -2156,22 +2156,11 @@ fail_locked:
|
||||
|
||||
static void efx_unregister_netdev(struct efx_nic *efx)
|
||||
{
|
||||
struct efx_channel *channel;
|
||||
struct efx_tx_queue *tx_queue;
|
||||
|
||||
if (!efx->net_dev)
|
||||
return;
|
||||
|
||||
BUG_ON(netdev_priv(efx->net_dev) != efx);
|
||||
|
||||
/* Free up any skbs still remaining. This has to happen before
|
||||
* we try to unregister the netdev as running their destructors
|
||||
* may be needed to get the device ref. count to 0. */
|
||||
efx_for_each_channel(channel, efx) {
|
||||
efx_for_each_channel_tx_queue(tx_queue, channel)
|
||||
efx_release_tx_buffers(tx_queue);
|
||||
}
|
||||
|
||||
strlcpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name));
|
||||
device_remove_file(&efx->pci_dev->dev, &dev_attr_phy_type);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user