Print this page
6394 ::mac_flow -s segfaults
Reviewed by: Jason King <jason.brian.king@gmail.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
*** 326,351 ****
}
case MAC_FLOW_STATS: {
uint64_t totibytes = 0;
uint64_t totobytes = 0;
mac_soft_ring_set_t *mac_srs;
! mac_rx_stats_t *mac_rx_stat;
! mac_tx_stats_t *mac_tx_stat;
int i;
for (i = 0; i < fe.fe_rx_srs_cnt; i++) {
mac_srs = (mac_soft_ring_set_t *)(fe.fe_rx_srs[i]);
! mac_rx_stat = &mac_srs->srs_rx.sr_stat;
! totibytes += mac_rx_stat->mrs_intrbytes +
! mac_rx_stat->mrs_pollbytes +
! mac_rx_stat->mrs_lclbytes;
}
mac_srs = (mac_soft_ring_set_t *)(fe.fe_tx_srs);
if (mac_srs != NULL) {
! mac_tx_stat = &mac_srs->srs_tx.st_stat;
! totobytes = mac_tx_stat->mts_obytes;
}
mdb_printf("%?p %-32s %16llu %16llu\n",
addr, fe.fe_flow_name, totibytes, totobytes);
break;
}
--- 326,371 ----
}
case MAC_FLOW_STATS: {
uint64_t totibytes = 0;
uint64_t totobytes = 0;
mac_soft_ring_set_t *mac_srs;
! mac_rx_stats_t mac_rx_stat;
! mac_tx_stats_t mac_tx_stat;
int i;
+ /*
+ * Sum bytes for all Rx SRS.
+ */
for (i = 0; i < fe.fe_rx_srs_cnt; i++) {
mac_srs = (mac_soft_ring_set_t *)(fe.fe_rx_srs[i]);
! if (mdb_vread(&mac_rx_stat, sizeof (mac_rx_stats_t),
! (uintptr_t)&mac_srs->srs_rx.sr_stat) == -1) {
! mdb_warn("failed to read mac_rx_stats_t at %p",
! &mac_srs->srs_rx.sr_stat);
! return (DCMD_ERR);
}
+
+ totibytes += mac_rx_stat.mrs_intrbytes +
+ mac_rx_stat.mrs_pollbytes +
+ mac_rx_stat.mrs_lclbytes;
+ }
+
+ /*
+ * Sum bytes for Tx SRS.
+ */
mac_srs = (mac_soft_ring_set_t *)(fe.fe_tx_srs);
if (mac_srs != NULL) {
! if (mdb_vread(&mac_tx_stat, sizeof (mac_tx_stats_t),
! (uintptr_t)&mac_srs->srs_tx.st_stat) == -1) {
! mdb_warn("failed to read max_tx_stats_t at %p",
! &mac_srs->srs_tx.st_stat);
! return (DCMD_ERR);
}
+
+ totobytes = mac_tx_stat.mts_obytes;
+ }
+
mdb_printf("%?p %-32s %16llu %16llu\n",
addr, fe.fe_flow_name, totibytes, totobytes);
break;
}