summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2008-12-03 23:00:00 +0000
committerdelphij <delphij@FreeBSD.org>2008-12-03 23:00:00 +0000
commitfe1ef47ea0b7a242dcb804e8f3a6bff035879f3b (patch)
tree4d48e957fd5889cf8b5c8a90821494fd12c09ec3 /sys
parentd5575b642e366039bd6fdbcf59d9accdf3d776d1 (diff)
downloadFreeBSD-src-fe1ef47ea0b7a242dcb804e8f3a6bff035879f3b.zip
FreeBSD-src-fe1ef47ea0b7a242dcb804e8f3a6bff035879f3b.tar.gz
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
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/bce/if_bce.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c
index 491c56c..15dc633 100644
--- a/sys/dev/bce/if_bce.c
+++ b/sys/dev/bce/if_bce.c
@@ -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) !=
OpenPOWER on IntegriCloud