diff options
author | Robert Nelson <robertcnelson@gmail.com> | 2011-09-29 11:50:42 -0500 |
---|---|---|
committer | Jerome Glisse <jglisse@redhat.com> | 2013-07-28 14:05:23 -0400 |
commit | 8c2933d2c77ae8d5b21e739d53ed4d9f5d7101d3 (patch) | |
tree | 2c61a7a3c3fb7aee55771b46ceb61da1f36ebbeb | |
parent | d8cece7f74b53558fcfcdea289393c7e095e5ca8 (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.c | 10 |
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) |