qlcnic: fix firmware based IDC participation
authorJitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Sat, 9 Feb 2013 09:29:49 +0000 (09:29 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 11 Feb 2013 07:04:13 +0000 (02:04 -0500)
Driver needs to stop participating in firmware based Inter Driver
Communication (IDC) while unloading driver

Signed-off-by: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c

index 714124abf69a3513c3ba4cfd343f67b0de976c3c..dcb990d3d559a4776deeaafea3306732b54b44a7 100644 (file)
@@ -2023,6 +2023,8 @@ static void qlcnic_remove(struct pci_dev *pdev)
                if (adapter->flags & QLCNIC_MSIX_ENABLED)
                        qlcnic_83xx_config_intrpt(adapter, 0);
                qlcnic_83xx_free_mbx_intr(adapter);
+               qlcnic_83xx_register_nic_idc_func(adapter, 0);
+               cancel_delayed_work_sync(&adapter->idc_aen_work);
        }
 
        qlcnic_detach(adapter);
@@ -2180,10 +2182,6 @@ static int qlcnic_close(struct net_device *netdev)
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
 
        __qlcnic_down(adapter, netdev);
-       if (qlcnic_83xx_check(adapter)) {
-               qlcnic_83xx_register_nic_idc_func(adapter, 0);
-               cancel_delayed_work_sync(&adapter->idc_aen_work);
-       }
 
        return 0;
 }
@@ -3117,6 +3115,8 @@ static pci_ers_result_t qlcnic_io_error_detected(struct pci_dev *pdev,
                if (adapter->flags & QLCNIC_MSIX_ENABLED)
                        qlcnic_83xx_config_intrpt(adapter, 0);
                qlcnic_83xx_free_mbx_intr(adapter);
+               qlcnic_83xx_register_nic_idc_func(adapter, 0);
+               cancel_delayed_work_sync(&adapter->idc_aen_work);
        }
 
        qlcnic_detach(adapter);