|
@@ -2771,6 +2771,9 @@ void t4_fatal_err(struct adapter *adap)
|
|
{
|
|
{
|
|
int port;
|
|
int port;
|
|
|
|
|
|
|
|
+ if (pci_channel_offline(adap->pdev))
|
|
|
|
+ return;
|
|
|
|
+
|
|
/* Disable the SGE since ULDs are going to free resources that
|
|
/* Disable the SGE since ULDs are going to free resources that
|
|
* could be exposed to the adapter. RDMA MWs for example...
|
|
* could be exposed to the adapter. RDMA MWs for example...
|
|
*/
|
|
*/
|
|
@@ -3882,9 +3885,10 @@ static pci_ers_result_t eeh_err_detected(struct pci_dev *pdev,
|
|
spin_lock(&adap->stats_lock);
|
|
spin_lock(&adap->stats_lock);
|
|
for_each_port(adap, i) {
|
|
for_each_port(adap, i) {
|
|
struct net_device *dev = adap->port[i];
|
|
struct net_device *dev = adap->port[i];
|
|
-
|
|
|
|
- netif_device_detach(dev);
|
|
|
|
- netif_carrier_off(dev);
|
|
|
|
|
|
+ if (dev) {
|
|
|
|
+ netif_device_detach(dev);
|
|
|
|
+ netif_carrier_off(dev);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
spin_unlock(&adap->stats_lock);
|
|
spin_unlock(&adap->stats_lock);
|
|
disable_interrupts(adap);
|
|
disable_interrupts(adap);
|
|
@@ -3963,12 +3967,13 @@ static void eeh_resume(struct pci_dev *pdev)
|
|
rtnl_lock();
|
|
rtnl_lock();
|
|
for_each_port(adap, i) {
|
|
for_each_port(adap, i) {
|
|
struct net_device *dev = adap->port[i];
|
|
struct net_device *dev = adap->port[i];
|
|
-
|
|
|
|
- if (netif_running(dev)) {
|
|
|
|
- link_start(dev);
|
|
|
|
- cxgb_set_rxmode(dev);
|
|
|
|
|
|
+ if (dev) {
|
|
|
|
+ if (netif_running(dev)) {
|
|
|
|
+ link_start(dev);
|
|
|
|
+ cxgb_set_rxmode(dev);
|
|
|
|
+ }
|
|
|
|
+ netif_device_attach(dev);
|
|
}
|
|
}
|
|
- netif_device_attach(dev);
|
|
|
|
}
|
|
}
|
|
rtnl_unlock();
|
|
rtnl_unlock();
|
|
}
|
|
}
|