commit 7962d69f2673dc6d865c86f8e12faef81abc0a12
Author: Tom Walsh <tom.walsh@cybera.net>
Date:   Mon Jun 20 08:48:44 2016 -0500

    We have a problem with a rotting packet.  The problem
    shows itself as a race-condition during the 3-step
    SYN/ACK/SYN-ACK sequence. The problem shows up when
    the network has been quiet for some time and a device
    attempts to establish a TCP connection.

diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
index 464e910..80a9e61 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -810,21 +810,23 @@ static void pch_gbe_irq_disable(struct pch_gbe_adapter *adapter)
 }
 
 /**
  * pch_gbe_irq_enable - Enable default interrupt generation settings
  * @adapter:  Board private structure
  */
-static void pch_gbe_irq_enable(struct pch_gbe_adapter *adapter)
+static void pch_gbe_irq_enable(struct pch_gbe_adapter *adapter, bool resetStatus)
 {
 	struct pch_gbe_hw *hw = &adapter->hw;
 
-	if (likely(atomic_dec_and_test(&adapter->irq_sem)))
+	if (likely(atomic_dec_and_test(&adapter->irq_sem))) {
 		iowrite32(PCH_GBE_INT_ENABLE_MASK, &hw->reg->INT_EN);
-	ioread32(&hw->reg->INT_ST);
+		if (resetStatus)
+			ioread32(&hw->reg->INT_ST);
+	}
 	netdev_dbg(adapter->netdev, "INT_EN reg : 0x%08x\n",
-		   ioread32(&hw->reg->INT_EN));
+	   ioread32(&hw->reg->INT_EN));
 }
 
 
 
 /**
  * pch_gbe_setup_tctl - configure the Transmit control registers
@@ -1978,13 +1980,13 @@ int pch_gbe_up(struct pch_gbe_adapter *adapter)
 	pch_gbe_enable_dma_rx(&adapter->hw);
 	pch_gbe_enable_mac_rx(&adapter->hw);
 
 	mod_timer(&adapter->watchdog_timer, jiffies);
 
 	napi_enable(&adapter->napi);
-	pch_gbe_irq_enable(adapter);
+	pch_gbe_irq_enable(adapter, true);
 	netif_start_queue(adapter->netdev);
 
 	return 0;
 
 freeirq:
 	pch_gbe_free_irq(adapter);
@@ -2401,13 +2403,13 @@ static int pch_gbe_napi_poll(struct napi_struct *napi, int budget)
 	 */
 	if (work_done < budget)
 		poll_end_flag = true;
 
 	if (poll_end_flag) {
 		napi_complete(napi);
-		pch_gbe_irq_enable(adapter);
+		pch_gbe_irq_enable(adapter, false);
 	}
 
 	if (adapter->rx_stop_flag) {
 		adapter->rx_stop_flag = false;
 		pch_gbe_enable_dma_rx(&adapter->hw);
 	}
