return status;
 }
 
-static int ql_adapter_down(struct ql_adapter *qdev)
+static void ql_cancel_all_work_sync(struct ql_adapter *qdev)
 {
-       int i, status = 0;
-
-       ql_link_off(qdev);
 
        /* Don't kill the reset worker thread if we
         * are in the process of recovery.
        cancel_delayed_work_sync(&qdev->mpi_idc_work);
        cancel_delayed_work_sync(&qdev->mpi_core_to_log);
        cancel_delayed_work_sync(&qdev->mpi_port_cfg_work);
+}
+
+static int ql_adapter_down(struct ql_adapter *qdev)
+{
+       int i, status = 0;
+
+       ql_link_off(qdev);
+
+       ql_cancel_all_work_sync(qdev);
 
        for (i = 0; i < qdev->rss_ring_count; i++)
                napi_disable(&qdev->rx_ring[i].napi);
        struct net_device *ndev = pci_get_drvdata(pdev);
        struct ql_adapter *qdev = netdev_priv(ndev);
        del_timer_sync(&qdev->timer);
+       ql_cancel_all_work_sync(qdev);
        unregister_netdev(ndev);
        ql_release_all(pdev);
        pci_disable_device(pdev);
 
        /* Disabling the timer */
        del_timer_sync(&qdev->timer);
-       if (test_bit(QL_ADAPTER_UP, &qdev->flags))
-               cancel_delayed_work_sync(&qdev->asic_reset_work);
-       cancel_delayed_work_sync(&qdev->mpi_reset_work);
-       cancel_delayed_work_sync(&qdev->mpi_work);
-       cancel_delayed_work_sync(&qdev->mpi_idc_work);
-       cancel_delayed_work_sync(&qdev->mpi_core_to_log);
-       cancel_delayed_work_sync(&qdev->mpi_port_cfg_work);
+       ql_cancel_all_work_sync(qdev);
 
        for (i = 0; i < qdev->rss_ring_count; i++)
                netif_napi_del(&qdev->rx_ring[i].napi);