summaryrefslogtreecommitdiffstats
path: root/sys/dev/msk
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2010-04-07 17:12:57 +0000
committeryongari <yongari@FreeBSD.org>2010-04-07 17:12:57 +0000
commitfb61fa2765f6a5279b2beb1b469333e18103249b (patch)
treef15b2437d712b7e72d9a06ef3ba1abb0942c072c /sys/dev/msk
parent6f6df068298364f82e51c2ac00754b54c4eeacb4 (diff)
downloadFreeBSD-src-fb61fa2765f6a5279b2beb1b469333e18103249b.zip
FreeBSD-src-fb61fa2765f6a5279b2beb1b469333e18103249b.tar.gz
Partial revert r204545.
Just relying on status LE ownership of status block seems to cause poor performance. Always read current status index register first and then check status ownership as we had before. Accessing status index register seems to trigger immediate status update if controller have pending status updates. MFC after: 1 week Reported by: Andre Albsmeier <Andre.Albsmeier <> siemens dot com> Tested by: Andre Albsmeier <Andre.Albsmeier <> siemens dot com>
Diffstat (limited to 'sys/dev/msk')
-rw-r--r--sys/dev/msk/if_msk.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/dev/msk/if_msk.c b/sys/dev/msk/if_msk.c
index 63a11ab..61b131b 100644
--- a/sys/dev/msk/if_msk.c
+++ b/sys/dev/msk/if_msk.c
@@ -3473,6 +3473,9 @@ msk_handle_events(struct msk_softc *sc)
uint32_t control, status;
int cons, len, port, rxprog;
+ if (sc->msk_stat_cons == CSR_READ_2(sc, STAT_PUT_IDX))
+ return (0);
+
/* Sync status LEs. */
bus_dmamap_sync(sc->msk_stat_tag, sc->msk_stat_map,
BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
@@ -3556,7 +3559,7 @@ msk_handle_events(struct msk_softc *sc)
if (rxput[MSK_PORT_B] > 0)
msk_rxput(sc->msk_if[MSK_PORT_B]);
- return (rxprog > sc->msk_process_limit ? EAGAIN : 0);
+ return (sc->msk_stat_cons != CSR_READ_2(sc, STAT_PUT_IDX));
}
static void
OpenPOWER on IntegriCloud