|
|
@@ -2876,24 +2876,24 @@ static void cxgb4vf_pci_shutdown(struct pci_dev *pdev)
|
|
|
if (!adapter)
|
|
|
return;
|
|
|
|
|
|
- /*
|
|
|
- * Disable all Virtual Interfaces. This will shut down the
|
|
|
+ /* Disable all Virtual Interfaces. This will shut down the
|
|
|
* delivery of all ingress packets into the chip for these
|
|
|
* Virtual Interfaces.
|
|
|
*/
|
|
|
- for_each_port(adapter, pidx) {
|
|
|
- struct net_device *netdev;
|
|
|
- struct port_info *pi;
|
|
|
-
|
|
|
- if (!test_bit(pidx, &adapter->registered_device_map))
|
|
|
- continue;
|
|
|
-
|
|
|
- netdev = adapter->port[pidx];
|
|
|
- if (!netdev)
|
|
|
- continue;
|
|
|
+ for_each_port(adapter, pidx)
|
|
|
+ if (test_bit(pidx, &adapter->registered_device_map))
|
|
|
+ unregister_netdev(adapter->port[pidx]);
|
|
|
|
|
|
- pi = netdev_priv(netdev);
|
|
|
- t4vf_enable_vi(adapter, pi->viid, false, false);
|
|
|
+ /* Free up all Queues which will prevent further DMA and
|
|
|
+ * Interrupts allowing various internal pathways to drain.
|
|
|
+ */
|
|
|
+ t4vf_sge_stop(adapter);
|
|
|
+ if (adapter->flags & USING_MSIX) {
|
|
|
+ pci_disable_msix(adapter->pdev);
|
|
|
+ adapter->flags &= ~USING_MSIX;
|
|
|
+ } else if (adapter->flags & USING_MSI) {
|
|
|
+ pci_disable_msi(adapter->pdev);
|
|
|
+ adapter->flags &= ~USING_MSI;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
@@ -2901,6 +2901,7 @@ static void cxgb4vf_pci_shutdown(struct pci_dev *pdev)
|
|
|
* Interrupts allowing various internal pathways to drain.
|
|
|
*/
|
|
|
t4vf_free_sge_resources(adapter);
|
|
|
+ pci_set_drvdata(pdev, NULL);
|
|
|
}
|
|
|
|
|
|
/*
|