net: ena: fix missing lock during device destruction
acquire the rtnl_lock during device destruction to avoid using partially destroyed device. ena_remove() shares almost the same logic as ena_destroy_device(), so use ena_destroy_device() and avoid duplications. Signed-off-by: Netanel Belgazal <netanel@amazon.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
fe870c77ef
Коммит
944b28aa29
|
@ -3421,24 +3421,18 @@ static void ena_remove(struct pci_dev *pdev)
|
|||
|
||||
unregister_netdev(netdev);
|
||||
|
||||
/* Reset the device only if the device is running. */
|
||||
/* If the device is running then we want to make sure the device will be
|
||||
* reset to make sure no more events will be issued by the device.
|
||||
*/
|
||||
if (test_bit(ENA_FLAG_DEVICE_RUNNING, &adapter->flags))
|
||||
ena_com_dev_reset(ena_dev, adapter->reset_reason);
|
||||
set_bit(ENA_FLAG_TRIGGER_RESET, &adapter->flags);
|
||||
|
||||
ena_free_mgmnt_irq(adapter);
|
||||
|
||||
ena_disable_msix(adapter);
|
||||
rtnl_lock();
|
||||
ena_destroy_device(adapter, true);
|
||||
rtnl_unlock();
|
||||
|
||||
free_netdev(netdev);
|
||||
|
||||
ena_com_mmio_reg_read_request_destroy(ena_dev);
|
||||
|
||||
ena_com_abort_admin_commands(ena_dev);
|
||||
|
||||
ena_com_wait_for_abort_completion(ena_dev);
|
||||
|
||||
ena_com_admin_destroy(ena_dev);
|
||||
|
||||
ena_com_rss_destroy(ena_dev);
|
||||
|
||||
ena_com_delete_debug_area(ena_dev);
|
||||
|
|
Загрузка…
Ссылка в новой задаче