summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Nelson <robertcnelson@gmail.com>2011-09-29 11:50:42 -0500
committerJerome Glisse <jglisse@redhat.com>2013-07-28 14:05:23 -0400
commit8c2933d2c77ae8d5b21e739d53ed4d9f5d7101d3 (patch)
tree2c61a7a3c3fb7aee55771b46ceb61da1f36ebbeb
parentd8cece7f74b53558fcfcdea289393c7e095e5ca8 (diff)
ksz8851 turn off hardware interrupt druing receive process
Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
-rw-r--r--drivers/net/ethernet/micrel/ks8851.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c
index f771fd869f39..347f38ff84fa 100644
--- a/drivers/net/ethernet/micrel/ks8851.c
+++ b/drivers/net/ethernet/micrel/ks8851.c
@@ -586,6 +586,13 @@ static void ks8851_irq_work(struct work_struct *work)
mutex_lock(&ks->lock);
+ /*
+ * Turn off hardware interrupt during receive processing. This fixes
+ * the receive problem under heavy TCP traffic while transmit done
+ * is enabled.
+ */
+ ks8851_wrreg16(ks, KS_IER, 0);
+
status = ks8851_rdreg16(ks, KS_ISR);
netif_dbg(ks, intr, ks->netdev,
@@ -655,6 +662,9 @@ static void ks8851_irq_work(struct work_struct *work)
ks8851_wrreg16(ks, KS_RXCR1, rxc->rxcr1);
}
+ /* Re-enable hardware interrupt. */
+ ks8851_wrreg16(ks, KS_IER, ks->rc_ier);
+
mutex_unlock(&ks->lock);
if (status & IRQ_TXI)