del_timer_sync(&hw->watchdog_timer);
        cancel_work_sync(&hw->restart_work);
 
+       rtnl_lock();
        for (i = 0; i < hw->ports; i++) {
                struct net_device *dev = hw->dev[i];
                struct sky2_port *sky2 = netdev_priv(dev);
        sky2_write32(hw, B0_IMSK, 0);
        napi_disable(&hw->napi);
        sky2_power_aux(hw);
+       rtnl_unlock();
 
        pci_save_state(pdev);
        pci_enable_wake(pdev, pci_choose_state(pdev, state), wol);
        if (!hw)
                return;
 
+       rtnl_lock();
        del_timer_sync(&hw->watchdog_timer);
 
        for (i = 0; i < hw->ports; i++) {
 
        if (wol)
                sky2_power_aux(hw);
+       rtnl_unlock();
 
        pci_enable_wake(pdev, PCI_D3hot, wol);
        pci_enable_wake(pdev, PCI_D3cold, wol);