diff options
author | np <np@FreeBSD.org> | 2014-03-20 01:58:04 +0000 |
---|---|---|
committer | np <np@FreeBSD.org> | 2014-03-20 01:58:04 +0000 |
commit | 9ce120962b5c6c27e553bba28ae61a54b2bc7cd0 (patch) | |
tree | 649cea7d9af8f61677414a2dc3bb2de4a6bba04c | |
parent | 3e18e20a3185a5213486d0337759098b0ed561cc (diff) | |
download | FreeBSD-src-9ce120962b5c6c27e553bba28ae61a54b2bc7cd0.zip FreeBSD-src-9ce120962b5c6c27e553bba28ae61a54b2bc7cd0.tar.gz |
cxgbe(4): if_iqdrops statistic should include tunnel congestion drops.
MFC after: 1 week
-rw-r--r-- | sys/dev/cxgbe/t4_main.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index d399742..8641ad8 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -4085,6 +4085,7 @@ static void cxgbe_tick(void *arg) { struct port_info *pi = arg; + struct adapter *sc = pi->adapter; struct ifnet *ifp = pi->ifp; struct sge_txq *txq; int i, drops; @@ -4096,7 +4097,7 @@ cxgbe_tick(void *arg) return; /* without scheduling another callout */ } - t4_get_port_stats(pi->adapter, pi->tx_chan, s); + t4_get_port_stats(sc, pi->tx_chan, s); ifp->if_opackets = s->tx_frames - s->tx_pause; ifp->if_ipackets = s->rx_frames - s->rx_pause; @@ -4107,6 +4108,19 @@ cxgbe_tick(void *arg) ifp->if_iqdrops = s->rx_ovflow0 + s->rx_ovflow1 + s->rx_ovflow2 + s->rx_ovflow3 + s->rx_trunc0 + s->rx_trunc1 + s->rx_trunc2 + s->rx_trunc3; + for (i = 0; i < 4; i++) { + if (pi->rx_chan_map & (1 << i)) { + uint32_t v; + + /* + * XXX: indirect reads from the same ADDR/DATA pair can + * race with each other. + */ + t4_read_indirect(sc, A_TP_MIB_INDEX, A_TP_MIB_DATA, &v, + 1, A_TP_MIB_TNL_CNG_DROP_0 + i); + ifp->if_iqdrops += v; + } + } drops = s->tx_drop; for_each_txq(pi, i, txq) |