Messages in this thread | | | Date | Tue, 6 Dec 2022 19:08:01 +0200 | From | Vladimir Oltean <> | Subject | Re: [PATCH net-next v1 1/1] net: dsa: microchip: add stats64 support for ksz8 series of switches |
| |
On Mon, Dec 05, 2022 at 06:29:04AM +0100, Oleksij Rempel wrote: > +void ksz88xx_r_mib_stats64(struct ksz_device *dev, int port) > +{ > + struct ethtool_pause_stats *pstats; > + struct rtnl_link_stats64 *stats; > + struct ksz88xx_stats_raw *raw; > + struct ksz_port_mib *mib; > + > + mib = &dev->ports[port].mib; > + stats = &mib->stats64; > + pstats = &mib->pause_stats; > + raw = (struct ksz88xx_stats_raw *)mib->counters; > + > + spin_lock(&mib->stats64_lock); > + > + stats->rx_packets = raw->rx_bcast + raw->rx_mcast + raw->rx_ucast + > + raw->rx_pause; > + stats->tx_packets = raw->tx_bcast + raw->tx_mcast + raw->tx_ucast + > + raw->tx_pause; > + > + /* HW counters are counting bytes + FCS which is not acceptable > + * for rtnl_link_stats64 interface > + */ > + stats->rx_bytes = raw->rx + raw->rx_hi - stats->rx_packets * ETH_FCS_LEN; > + stats->tx_bytes = raw->tx + raw->tx_hi - stats->tx_packets * ETH_FCS_LEN;
What are rx_hi, tx_hi compared to rx, tx?
> + > + stats->rx_length_errors = raw->rx_undersize + raw->rx_fragments + > + raw->rx_oversize; > + > + stats->rx_crc_errors = raw->rx_crc_err; > + stats->rx_frame_errors = raw->rx_align_err; > + stats->rx_dropped = raw->rx_discards; > + stats->rx_errors = stats->rx_length_errors + stats->rx_crc_errors + > + stats->rx_frame_errors + stats->rx_dropped; > + > + stats->tx_window_errors = raw->tx_late_col; > + stats->tx_fifo_errors = raw->tx_discards; > + stats->tx_aborted_errors = raw->tx_exc_col; > + stats->tx_errors = stats->tx_window_errors + stats->tx_fifo_errors + > + stats->tx_aborted_errors; > + > + stats->multicast = raw->rx_mcast; > + stats->collisions = raw->tx_total_col; > + > + pstats->tx_pause_frames = raw->tx_pause; > + pstats->rx_pause_frames = raw->rx_pause;
FWIW, ksz_get_pause_stats() can sleep, just ksz_get_stats64() can't. So the pause stats don't need to be periodically read (unless you want to do that to prevent 32-bit overflows).
> + > + spin_unlock(&mib->stats64_lock); > +}
| |