• Sean Anderson's avatar
    net: xilinx: axienet: Add statistics support · 76abb5d6
    Sean Anderson authored
    Add support for reading the statistics counters, if they are enabled.
    The counters may be 64-bit, but we can't detect this statically as
    there's no ability bit for it and the counters are read-only. Therefore,
    we assume the counters are 32-bits by default. To ensure we don't miss
    an overflow, we read all counters at 13-second intervals. This should be
    often enough to ensure the bytes counters don't wrap at 2.5 Gbit/s.
    
    Another complication is that the counters may be reset when the device
    is reset (depending on configuration). To ensure the counters persist
    across link up/down (including suspend/resume), we maintain our own
    versions along with the last counter value we saw. Because we might wait
    up to 100 ms for the reset to complete, we use a mutex to protect
    writing hw_stats. We can't sleep in ndo_get_stats64, so we use a seqlock
    to protect readers.
    
    We don't bother disabling the refresh work when we detect 64-bit
    counters. This is because the reset issue requires us to read
    hw_stat_base and reset_in_progress anyway, which would still require the
    seqcount. And I don't think skipping the task is worth the extra
    bookkeeping.
    
    We can't use the byte counters for either get_stats64 or
    get_eth_mac_stats. This is because the byte counters include everything
    in the frame (destination address to FCS, inclusive). But
    rtnl_link_stats64 wants bytes excluding the FCS, and
    ethtool_eth_mac_stats wants to exclude the L2 overhead (addresses and
    length/type). It might be possible to calculate the byte values Linux
    expects based on the frame counters, but I think it is simpler to use
    the existing software counters.
    
    get_ethtool_stats is implemented for nonstandard statistics. This
    includes the aforementioned byte counters, VLAN and PFC frame
    counters, and user-defined (e.g. with custom RTL) counters.
    Signed-off-by: default avatarSean Anderson <sean.anderson@linux.dev>
    Link: https://patch.msgid.link/20240820175343.760389-3-sean.anderson@linux.devSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    76abb5d6
xilinx_axienet.h 27.5 KB