Don't attempt to clear status updates if we did not do a link state

change.  As a side effect, this makes the excessive interrupts to
disappear which has been observed as a regression in recent stable/7.

Reported by:	many (on -stable@)
Reviewed by:	davidch
This commit is contained in:
Xin LI 2008-12-03 23:00:00 +00:00
parent 3cdf485f87
commit 2dd5c73163

View File

@ -7030,13 +7030,14 @@ bce_intr(void *xsc)
/* Was it a link change interrupt? */
if ((status_attn_bits & STATUS_ATTN_BITS_LINK_STATE) !=
(sc->status_block->status_attn_bits_ack & STATUS_ATTN_BITS_LINK_STATE))
(sc->status_block->status_attn_bits_ack & STATUS_ATTN_BITS_LINK_STATE)) {
bce_phy_intr(sc);
/* Clear any transient status updates during link state change. */
REG_WR(sc, BCE_HC_COMMAND,
sc->hc_command | BCE_HC_COMMAND_COAL_NOW_WO_INT);
REG_RD(sc, BCE_HC_COMMAND);
/* Clear any transient status updates during link state change. */
REG_WR(sc, BCE_HC_COMMAND,
sc->hc_command | BCE_HC_COMMAND_COAL_NOW_WO_INT);
REG_RD(sc, BCE_HC_COMMAND);
}
/* If any other attention is asserted then the chip is toast. */
if (((status_attn_bits & ~STATUS_ATTN_BITS_LINK_STATE) !=