/* disable receives */
                        u32 rctl = er32(RCTL);
                        ew32(RCTL, rctl & ~E1000_RCTL_EN);
-                       adapter->flags |= FLAG_RX_RESTART_NOW;
+                       adapter->flags |= FLAG_RESTART_NOW;
                }
                /* guard against interrupt when we're going down */
                if (!test_bit(__E1000_DOWN, &adapter->state))
                        /* disable receives */
                        rctl = er32(RCTL);
                        ew32(RCTL, rctl & ~E1000_RCTL_EN);
-                       adapter->flags |= FLAG_RX_RESTART_NOW;
+                       adapter->flags |= FLAG_RESTART_NOW;
                }
                /* guard against interrupt when we're going down */
                if (!test_bit(__E1000_DOWN, &adapter->state))
 
        ew32(RCTL, rctl);
        /* just started the receive unit, no need to restart */
-       adapter->flags &= ~FLAG_RX_RESTART_NOW;
+       adapter->flags &= ~FLAG_RESTART_NOW;
 }
 
 /**
 {
        /* make sure the receive unit is started */
        if ((adapter->flags & FLAG_RX_NEEDS_RESTART) &&
-           (adapter->flags & FLAG_RX_RESTART_NOW)) {
+           (adapter->flags & FLAG_RESTART_NOW)) {
                struct e1000_hw *hw = &adapter->hw;
                u32 rctl = er32(RCTL);
                ew32(RCTL, rctl | E1000_RCTL_EN);
-               adapter->flags &= ~FLAG_RX_RESTART_NOW;
+               adapter->flags &= ~FLAG_RESTART_NOW;
        }
 }
 
                                mod_timer(&adapter->phy_info_timer,
                                          round_jiffies(jiffies + 2 * HZ));
 
-                       if (adapter->flags & FLAG_RX_NEEDS_RESTART)
-                               schedule_work(&adapter->reset_task);
+                       /* The link is lost so the controller stops DMA.
+                        * If there is queued Tx work that cannot be done
+                        * or if on an 8000ES2LAN which requires a Rx packet
+                        * buffer work-around on link down event, reset the
+                        * controller to flush the Tx/Rx packet buffers.
+                        * (Do the reset outside of interrupt context).
+                        */
+                       if ((adapter->flags & FLAG_RX_NEEDS_RESTART) ||
+                           (e1000_desc_unused(tx_ring) + 1 < tx_ring->count))
+                               adapter->flags |= FLAG_RESTART_NOW;
                        else
                                pm_schedule_suspend(netdev->dev.parent,
                                                        LINK_TIMEOUT);
        adapter->gotc_old = adapter->stats.gotc;
        spin_unlock(&adapter->stats64_lock);
 
-       e1000e_update_adaptive(&adapter->hw);
-
-       if (!netif_carrier_ok(netdev) &&
-           (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) {
-               /* We've lost link, so the controller stops DMA,
-                * but we've got queued Tx work that's never going
-                * to get done, so reset controller to flush Tx.
-                * (Do the reset outside of interrupt context).
-                */
+       if (adapter->flags & FLAG_RESTART_NOW) {
                schedule_work(&adapter->reset_task);
                /* return immediately since reset is imminent */
                return;
        }
 
+       e1000e_update_adaptive(&adapter->hw);
+
        /* Simple mode for Interrupt Throttle Rate (ITR) */
        if (adapter->itr_setting == 4) {
                /* Symmetric Tx/Rx gets a reduced ITR=2000;
        if (test_bit(__E1000_DOWN, &adapter->state))
                return;
 
-       if (!((adapter->flags & FLAG_RX_NEEDS_RESTART) &&
-             (adapter->flags & FLAG_RX_RESTART_NOW))) {
+       if (!(adapter->flags & FLAG_RESTART_NOW)) {
                e1000e_dump(adapter);
-               e_err("Reset adapter\n");
+               e_err("Reset adapter unexpectedly\n");
        }
        e1000e_reinit_locked(adapter);
 }