|
@@ -2727,6 +2727,8 @@ static int efx_pm_freeze(struct device *dev)
|
|
|
{
|
|
|
struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev));
|
|
|
|
|
|
+ rtnl_lock();
|
|
|
+
|
|
|
efx->state = STATE_UNINIT;
|
|
|
|
|
|
netif_device_detach(efx->net_dev);
|
|
@@ -2734,6 +2736,8 @@ static int efx_pm_freeze(struct device *dev)
|
|
|
efx_stop_all(efx);
|
|
|
efx_stop_interrupts(efx, false);
|
|
|
|
|
|
+ rtnl_unlock();
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2741,6 +2745,8 @@ static int efx_pm_thaw(struct device *dev)
|
|
|
{
|
|
|
struct efx_nic *efx = pci_get_drvdata(to_pci_dev(dev));
|
|
|
|
|
|
+ rtnl_lock();
|
|
|
+
|
|
|
efx_start_interrupts(efx, false);
|
|
|
|
|
|
mutex_lock(&efx->mac_lock);
|
|
@@ -2755,6 +2761,8 @@ static int efx_pm_thaw(struct device *dev)
|
|
|
|
|
|
efx->type->resume_wol(efx);
|
|
|
|
|
|
+ rtnl_unlock();
|
|
|
+
|
|
|
/* Reschedule any quenched resets scheduled during efx_pm_freeze() */
|
|
|
queue_work(reset_workqueue, &efx->reset_work);
|
|
|
|