summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornp <np@FreeBSD.org>2014-03-20 01:58:04 +0000
committernp <np@FreeBSD.org>2014-03-20 01:58:04 +0000
commit9ce120962b5c6c27e553bba28ae61a54b2bc7cd0 (patch)
tree649cea7d9af8f61677414a2dc3bb2de4a6bba04c
parent3e18e20a3185a5213486d0337759098b0ed561cc (diff)
downloadFreeBSD-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.c16
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)
OpenPOWER on IntegriCloud