Commit f5c830f6 authored by Andrew Morton's avatar Andrew Morton Committed by Jeff Garzik

[PATCH] ixgb: fix ixgb_intr looping checks

This patch undoes a change that we believe will impact performance
adversely, by creating possibly too long a delay between servicing
completions.  The comment pretty much explains it.  We need to call both
cleanup routines each pass through the loop, this time we have a comment
explaining why.
Signed-off-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent d993b31a
...@@ -1613,13 +1613,14 @@ static irqreturn_t ixgb_intr(int irq, void *data, struct pt_regs *regs) ...@@ -1613,13 +1613,14 @@ static irqreturn_t ixgb_intr(int irq, void *data, struct pt_regs *regs)
__netif_rx_schedule(netdev); __netif_rx_schedule(netdev);
} }
#else #else
for (i = 0; i < IXGB_MAX_INTR; i++) /* yes, that is actually a & and it is meant to make sure that
if (ixgb_clean_rx_irq(adapter) == FALSE) * every pass through this for loop checks both receive and
* transmit queues for completed descriptors, intended to
* avoid starvation issues and assist tx/rx fairness. */
for(i = 0; i < IXGB_MAX_INTR; i++)
if(!ixgb_clean_rx_irq(adapter) &
!ixgb_clean_tx_irq(adapter))
break; break;
for (i = 0; i < IXGB_MAX_INTR; i++)
if (ixgb_clean_tx_irq(adapter) == FALSE)
break;
/* if RAIDC:EN == 1 and ICR:RXDMT0 == 1, we need to /* if RAIDC:EN == 1 and ICR:RXDMT0 == 1, we need to
* set IMS:RXDMT0 to 1 to restart the RBD timer (POLL) * set IMS:RXDMT0 to 1 to restart the RBD timer (POLL)
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment