summaryrefslogtreecommitdiffstats
path: root/sys/dev/bxe
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2014-09-18 15:56:14 +0000
committerglebius <glebius@FreeBSD.org>2014-09-18 15:56:14 +0000
commit39fefafe214033dc06483dd023c2485e05ad321c (patch)
tree7a00e00af29505116ade54217ea22b40ed752459 /sys/dev/bxe
parent7288f5d2fcfc7e772a285573fa4a96957b72f3e5 (diff)
downloadFreeBSD-src-39fefafe214033dc06483dd023c2485e05ad321c.zip
FreeBSD-src-39fefafe214033dc06483dd023c2485e05ad321c.tar.gz
- Use if_inc_counter() to increment various counters.
- Do not ever set a counter to a value. For those counters that we don't increment, but return directly from hardware create cases in if_get_counter() method. Sponsored by: Netflix Sponsored by: Nginx, Inc.
Diffstat (limited to 'sys/dev/bxe')
-rw-r--r--sys/dev/bxe/bxe.c5
-rw-r--r--sys/dev/bxe/bxe_stats.c100
-rw-r--r--sys/dev/bxe/bxe_stats.h1
3 files changed, 50 insertions, 56 deletions
diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c
index 50106bf..ac20d78 100644
--- a/sys/dev/bxe/bxe.c
+++ b/sys/dev/bxe/bxe.c
@@ -3222,7 +3222,7 @@ bxe_tpa_stop(struct bxe_softc *sc,
m->m_flags |= M_FLOWID;
#endif
- if_incipackets(ifp, 1);
+ if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
fp->eth_q_stats.rx_tpa_pkts++;
/* pass the frame to the stack */
@@ -3465,7 +3465,7 @@ next_rx:
/* pass the frame to the stack */
if (__predict_true(m != NULL)) {
- if_incipackets(ifp, 1);
+ if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
rx_pkts++;
if_input(ifp, m);
}
@@ -13279,6 +13279,7 @@ bxe_init_ifnet(struct bxe_softc *sc)
if_setflags(ifp, (IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST));
if_setioctlfn(ifp, bxe_ioctl);
if_setstartfn(ifp, bxe_tx_start);
+ if_setgetcounterfn(ifp, bxe_get_counter);
#if __FreeBSD_version >= 800000
if_settransmitfn(ifp, bxe_tx_mq_start);
if_setqflushfn(ifp, bxe_mq_flush);
diff --git a/sys/dev/bxe/bxe_stats.c b/sys/dev/bxe/bxe_stats.c
index f6b2397..3d33fb7 100644
--- a/sys/dev/bxe/bxe_stats.c
+++ b/sys/dev/bxe/bxe_stats.c
@@ -1164,50 +1164,54 @@ bxe_storm_stats_update(struct bxe_softc *sc)
static void
bxe_net_stats_update(struct bxe_softc *sc)
{
- struct bxe_eth_stats *estats = &sc->eth_stats;
- if_t ifnet = sc->ifp;
- int i;
-
- if_setipackets(ifnet,
- bxe_hilo(&estats->total_unicast_packets_received_hi) +
- bxe_hilo(&estats->total_multicast_packets_received_hi) +
- bxe_hilo(&estats->total_broadcast_packets_received_hi));
-
- if_setopackets(ifnet,
- bxe_hilo(&estats->total_unicast_packets_transmitted_hi) +
- bxe_hilo(&estats->total_multicast_packets_transmitted_hi) +
- bxe_hilo(&estats->total_broadcast_packets_transmitted_hi));
-
- if_setibytes(ifnet, bxe_hilo(&estats->total_bytes_received_hi));
-
- if_setobytes(ifnet, bxe_hilo(&estats->total_bytes_transmitted_hi));
- for (i = 0; i < sc->num_queues; i++) {
- struct tstorm_per_queue_stats *old_tclient =
- &sc->fp[i].old_tclient;
- if_inciqdrops(ifnet, le32toh(old_tclient->checksum_discard));
- }
+ for (int i = 0; i < sc->num_queues; i++)
+ if_inc_counter(sc->ifp, IFCOUNTER_IQDROPS,
+ le32toh(sc->fp[i].old_tclient.checksum_discard));
+}
- if_setierrors(ifnet,
- bxe_hilo(&estats->rx_stat_etherstatsundersizepkts_hi) +
- bxe_hilo(&estats->etherstatsoverrsizepkts_hi) +
- bxe_hilo(&estats->brb_drop_hi) +
- bxe_hilo(&estats->brb_truncate_hi) +
- bxe_hilo(&estats->rx_stat_dot3statsfcserrors_hi) +
- bxe_hilo(&estats->rx_stat_dot3statsalignmenterrors_hi) +
- bxe_hilo(&estats->no_buff_discard_hi));
-
- if_setoerrors(ifnet,
- bxe_hilo(&estats->rx_stat_dot3statscarriersenseerrors_hi) +
- bxe_hilo(&estats->tx_stat_dot3statsinternalmactransmiterrors_hi));
-
- if_setimcasts(ifnet,
- bxe_hilo(&estats->total_multicast_packets_received_hi));
-
- if_setcollisions(ifnet,
- bxe_hilo(&estats->tx_stat_etherstatscollisions_hi) +
- bxe_hilo(&estats->tx_stat_dot3statslatecollisions_hi) +
- bxe_hilo(&estats->tx_stat_dot3statsexcessivecollisions_hi));
+uint64_t
+bxe_get_counter(if_t ifp, ift_counter cnt)
+{
+ struct bxe_softc *sc;
+ struct bxe_eth_stats *estats;
+
+ sc = if_getsoftc(ifp);
+ estats = &sc->eth_stats;
+
+ switch (cnt) {
+ case IFCOUNTER_IPACKETS:
+ return (bxe_hilo(&estats->total_unicast_packets_received_hi) +
+ bxe_hilo(&estats->total_multicast_packets_received_hi) +
+ bxe_hilo(&estats->total_broadcast_packets_received_hi));
+ case IFCOUNTER_OPACKETS:
+ return (bxe_hilo(&estats->total_unicast_packets_transmitted_hi) +
+ bxe_hilo(&estats->total_multicast_packets_transmitted_hi) +
+ bxe_hilo(&estats->total_broadcast_packets_transmitted_hi));
+ case IFCOUNTER_IBYTES:
+ return (bxe_hilo(&estats->total_bytes_received_hi));
+ case IFCOUNTER_OBYTES:
+ return (bxe_hilo(&estats->total_bytes_transmitted_hi));
+ case IFCOUNTER_IERRORS:
+ return (bxe_hilo(&estats->rx_stat_etherstatsundersizepkts_hi) +
+ bxe_hilo(&estats->etherstatsoverrsizepkts_hi) +
+ bxe_hilo(&estats->brb_drop_hi) +
+ bxe_hilo(&estats->brb_truncate_hi) +
+ bxe_hilo(&estats->rx_stat_dot3statsfcserrors_hi) +
+ bxe_hilo(&estats->rx_stat_dot3statsalignmenterrors_hi) +
+ bxe_hilo(&estats->no_buff_discard_hi));
+ case IFCOUNTER_OERRORS:
+ return (bxe_hilo(&estats->rx_stat_dot3statscarriersenseerrors_hi) +
+ bxe_hilo(&estats->tx_stat_dot3statsinternalmactransmiterrors_hi));
+ case IFCOUNTER_IMCASTS:
+ return (bxe_hilo(&estats->total_multicast_packets_received_hi));
+ case IFCOUNTER_COLLISIONS:
+ return (bxe_hilo(&estats->tx_stat_etherstatscollisions_hi) +
+ bxe_hilo(&estats->tx_stat_dot3statslatecollisions_hi) +
+ bxe_hilo(&estats->tx_stat_dot3statsexcessivecollisions_hi));
+ default:
+ return (if_get_counter_default(ifp, cnt));
+ }
}
static void
@@ -1669,15 +1673,6 @@ bxe_stats_init(struct bxe_softc *sc)
/* prepare statistics ramrod data */
bxe_prep_fw_stats_req(sc);
- if_setipackets(sc->ifp, 0);
- if_setopackets(sc->ifp, 0);
- if_setibytes(sc->ifp, 0);
- if_setobytes(sc->ifp, 0);
- if_setierrors(sc->ifp, 0);
- if_setoerrors(sc->ifp, 0);
- if_setimcasts(sc->ifp, 0);
- if_setcollisions(sc->ifp, 0);
-
if (sc->stats_init) {
memset(&sc->net_stats_old, 0, sizeof(sc->net_stats_old));
memset(&sc->fw_stats_old, 0, sizeof(sc->fw_stats_old));
@@ -1731,9 +1726,6 @@ bxe_save_statistics(struct bxe_softc *sc)
UPDATE_QSTAT_OLD(total_tpa_bytes_lo);
}
- /* save net_device_stats statistics */
- sc->net_stats_old.rx_dropped = if_getiqdrops(sc->ifp);
-
/* store port firmware statistics */
if (sc->port.pmf) {
struct bxe_eth_stats *estats = &sc->eth_stats;
diff --git a/sys/dev/bxe/bxe_stats.h b/sys/dev/bxe/bxe_stats.h
index cb98201..ed37f55 100644
--- a/sys/dev/bxe/bxe_stats.h
+++ b/sys/dev/bxe/bxe_stats.h
@@ -675,6 +675,7 @@ void bxe_stats_init(struct bxe_softc *sc);
void bxe_stats_handle(struct bxe_softc *sc, enum bxe_stats_event event);
void bxe_save_statistics(struct bxe_softc *sc);
void bxe_afex_collect_stats(struct bxe_softc *sc, void *void_afex_stats, uint32_t stats_type);
+uint64_t bxe_get_counter(if_t, ift_counter);
#endif /* BXE_STATS_H */
OpenPOWER on IntegriCloud