cxgb - fix stats
Fix MAC stats accounting. Fix get_stats. Signed-off-by: Divy Le Ray <divy@chelsio.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
@ -374,7 +374,9 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
|
||||
"TxInternalMACXmitError",
|
||||
"TxFramesWithExcessiveDeferral",
|
||||
"TxFCSErrors",
|
||||
|
||||
"TxJumboFramesOk",
|
||||
"TxJumboOctetsOk",
|
||||
|
||||
"RxOctetsOK",
|
||||
"RxOctetsBad",
|
||||
"RxUnicastFramesOK",
|
||||
@ -392,11 +394,11 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
|
||||
"RxInRangeLengthErrors",
|
||||
"RxOutOfRangeLengthField",
|
||||
"RxFrameTooLongErrors",
|
||||
"RxJumboFramesOk",
|
||||
"RxJumboOctetsOk",
|
||||
|
||||
/* Port stats */
|
||||
"RxPackets",
|
||||
"RxCsumGood",
|
||||
"TxPackets",
|
||||
"TxCsumOffload",
|
||||
"TxTso",
|
||||
"RxVlan",
|
||||
@ -464,23 +466,56 @@ static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
|
||||
const struct cmac_statistics *s;
|
||||
const struct sge_intr_counts *t;
|
||||
struct sge_port_stats ss;
|
||||
unsigned int len;
|
||||
|
||||
s = mac->ops->statistics_update(mac, MAC_STATS_UPDATE_FULL);
|
||||
|
||||
len = sizeof(u64)*(&s->TxFCSErrors + 1 - &s->TxOctetsOK);
|
||||
memcpy(data, &s->TxOctetsOK, len);
|
||||
data += len;
|
||||
|
||||
len = sizeof(u64)*(&s->RxFrameTooLongErrors + 1 - &s->RxOctetsOK);
|
||||
memcpy(data, &s->RxOctetsOK, len);
|
||||
data += len;
|
||||
|
||||
t1_sge_get_port_stats(adapter->sge, dev->if_port, &ss);
|
||||
memcpy(data, &ss, sizeof(ss));
|
||||
data += sizeof(ss);
|
||||
|
||||
t = t1_sge_get_intr_counts(adapter->sge);
|
||||
t1_sge_get_port_stats(adapter->sge, dev->if_port, &ss);
|
||||
|
||||
*data++ = s->TxOctetsOK;
|
||||
*data++ = s->TxOctetsBad;
|
||||
*data++ = s->TxUnicastFramesOK;
|
||||
*data++ = s->TxMulticastFramesOK;
|
||||
*data++ = s->TxBroadcastFramesOK;
|
||||
*data++ = s->TxPauseFrames;
|
||||
*data++ = s->TxFramesWithDeferredXmissions;
|
||||
*data++ = s->TxLateCollisions;
|
||||
*data++ = s->TxTotalCollisions;
|
||||
*data++ = s->TxFramesAbortedDueToXSCollisions;
|
||||
*data++ = s->TxUnderrun;
|
||||
*data++ = s->TxLengthErrors;
|
||||
*data++ = s->TxInternalMACXmitError;
|
||||
*data++ = s->TxFramesWithExcessiveDeferral;
|
||||
*data++ = s->TxFCSErrors;
|
||||
*data++ = s->TxJumboFramesOK;
|
||||
*data++ = s->TxJumboOctetsOK;
|
||||
|
||||
*data++ = s->RxOctetsOK;
|
||||
*data++ = s->RxOctetsBad;
|
||||
*data++ = s->RxUnicastFramesOK;
|
||||
*data++ = s->RxMulticastFramesOK;
|
||||
*data++ = s->RxBroadcastFramesOK;
|
||||
*data++ = s->RxPauseFrames;
|
||||
*data++ = s->RxFCSErrors;
|
||||
*data++ = s->RxAlignErrors;
|
||||
*data++ = s->RxSymbolErrors;
|
||||
*data++ = s->RxDataErrors;
|
||||
*data++ = s->RxSequenceErrors;
|
||||
*data++ = s->RxRuntErrors;
|
||||
*data++ = s->RxJabberErrors;
|
||||
*data++ = s->RxInternalMACRcvError;
|
||||
*data++ = s->RxInRangeLengthErrors;
|
||||
*data++ = s->RxOutOfRangeLengthField;
|
||||
*data++ = s->RxFrameTooLongErrors;
|
||||
*data++ = s->RxJumboFramesOK;
|
||||
*data++ = s->RxJumboOctetsOK;
|
||||
|
||||
*data++ = ss.rx_cso_good;
|
||||
*data++ = ss.tx_cso;
|
||||
*data++ = ss.tx_tso;
|
||||
*data++ = ss.vlan_xtract;
|
||||
*data++ = ss.vlan_insert;
|
||||
*data++ = ss.tx_need_hdrroom;
|
||||
|
||||
*data++ = t->rx_drops;
|
||||
*data++ = t->pure_rsps;
|
||||
*data++ = t->unhandled_irqs;
|
||||
|
Reference in New Issue
Block a user