|
@@ -651,9 +651,10 @@ bnx2_napi_enable(struct bnx2 *bp)
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-bnx2_netif_stop(struct bnx2 *bp)
|
|
|
+bnx2_netif_stop(struct bnx2 *bp, bool stop_cnic)
|
|
|
{
|
|
|
- bnx2_cnic_stop(bp);
|
|
|
+ if (stop_cnic)
|
|
|
+ bnx2_cnic_stop(bp);
|
|
|
if (netif_running(bp->dev)) {
|
|
|
int i;
|
|
|
|
|
@@ -671,14 +672,15 @@ bnx2_netif_stop(struct bnx2 *bp)
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-bnx2_netif_start(struct bnx2 *bp)
|
|
|
+bnx2_netif_start(struct bnx2 *bp, bool start_cnic)
|
|
|
{
|
|
|
if (atomic_dec_and_test(&bp->intr_sem)) {
|
|
|
if (netif_running(bp->dev)) {
|
|
|
netif_tx_wake_all_queues(bp->dev);
|
|
|
bnx2_napi_enable(bp);
|
|
|
bnx2_enable_int(bp);
|
|
|
- bnx2_cnic_start(bp);
|
|
|
+ if (start_cnic)
|
|
|
+ bnx2_cnic_start(bp);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -6277,12 +6279,12 @@ bnx2_reset_task(struct work_struct *work)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, true);
|
|
|
|
|
|
bnx2_init_nic(bp, 1);
|
|
|
|
|
|
atomic_set(&bp->intr_sem, 1);
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, true);
|
|
|
rtnl_unlock();
|
|
|
}
|
|
|
|
|
@@ -6324,7 +6326,7 @@ bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp)
|
|
|
struct bnx2 *bp = netdev_priv(dev);
|
|
|
|
|
|
if (netif_running(dev))
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, false);
|
|
|
|
|
|
bp->vlgrp = vlgrp;
|
|
|
|
|
@@ -6335,7 +6337,7 @@ bnx2_vlan_rx_register(struct net_device *dev, struct vlan_group *vlgrp)
|
|
|
if (bp->flags & BNX2_FLAG_CAN_KEEP_VLAN)
|
|
|
bnx2_fw_sync(bp, BNX2_DRV_MSG_CODE_KEEP_VLAN_UPDATE, 0, 1);
|
|
|
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, false);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -7055,9 +7057,9 @@ bnx2_set_coalesce(struct net_device *dev, struct ethtool_coalesce *coal)
|
|
|
bp->stats_ticks &= BNX2_HC_STATS_TICKS_HC_STAT_TICKS;
|
|
|
|
|
|
if (netif_running(bp->dev)) {
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, true);
|
|
|
bnx2_init_nic(bp, 0);
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, true);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -7087,7 +7089,7 @@ bnx2_change_ring_size(struct bnx2 *bp, u32 rx, u32 tx)
|
|
|
/* Reset will erase chipset stats; save them */
|
|
|
bnx2_save_stats(bp);
|
|
|
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, true);
|
|
|
bnx2_reset_chip(bp, BNX2_DRV_MSG_CODE_RESET);
|
|
|
bnx2_free_skbs(bp);
|
|
|
bnx2_free_mem(bp);
|
|
@@ -7115,7 +7117,7 @@ bnx2_change_ring_size(struct bnx2 *bp, u32 rx, u32 tx)
|
|
|
bnx2_setup_cnic_irq_info(bp);
|
|
|
mutex_unlock(&bp->cnic_lock);
|
|
|
#endif
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, true);
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -7368,7 +7370,7 @@ bnx2_self_test(struct net_device *dev, struct ethtool_test *etest, u64 *buf)
|
|
|
if (etest->flags & ETH_TEST_FL_OFFLINE) {
|
|
|
int i;
|
|
|
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, true);
|
|
|
bnx2_reset_chip(bp, BNX2_DRV_MSG_CODE_DIAG);
|
|
|
bnx2_free_skbs(bp);
|
|
|
|
|
@@ -7387,7 +7389,7 @@ bnx2_self_test(struct net_device *dev, struct ethtool_test *etest, u64 *buf)
|
|
|
bnx2_shutdown_chip(bp);
|
|
|
else {
|
|
|
bnx2_init_nic(bp, 1);
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, true);
|
|
|
}
|
|
|
|
|
|
/* wait for link up */
|
|
@@ -8381,7 +8383,7 @@ bnx2_suspend(struct pci_dev *pdev, pm_message_t state)
|
|
|
return 0;
|
|
|
|
|
|
flush_scheduled_work();
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, true);
|
|
|
netif_device_detach(dev);
|
|
|
del_timer_sync(&bp->timer);
|
|
|
bnx2_shutdown_chip(bp);
|
|
@@ -8403,7 +8405,7 @@ bnx2_resume(struct pci_dev *pdev)
|
|
|
bnx2_set_power_state(bp, PCI_D0);
|
|
|
netif_device_attach(dev);
|
|
|
bnx2_init_nic(bp, 1);
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, true);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -8430,7 +8432,7 @@ static pci_ers_result_t bnx2_io_error_detected(struct pci_dev *pdev,
|
|
|
}
|
|
|
|
|
|
if (netif_running(dev)) {
|
|
|
- bnx2_netif_stop(bp);
|
|
|
+ bnx2_netif_stop(bp, true);
|
|
|
del_timer_sync(&bp->timer);
|
|
|
bnx2_reset_nic(bp, BNX2_DRV_MSG_CODE_RESET);
|
|
|
}
|
|
@@ -8487,7 +8489,7 @@ static void bnx2_io_resume(struct pci_dev *pdev)
|
|
|
|
|
|
rtnl_lock();
|
|
|
if (netif_running(dev))
|
|
|
- bnx2_netif_start(bp);
|
|
|
+ bnx2_netif_start(bp, true);
|
|
|
|
|
|
netif_device_attach(dev);
|
|
|
rtnl_unlock();
|