Skip to content
  • Vladimir Oltean's avatar
    039b167d
    net: dsa: sja1105: don't use burst SPI reads for port statistics · 039b167d
    Vladimir Oltean authored
    
    
    The current internal sja1105 driver API is optimized for retrieving many
    statistics counters at once. But the switch does not do atomic snapshotting
    for them anyway.
    
    In case we start reporting the hardware port counters through
    ndo_get_stats64 as well, not just ethtool, it would be good to be able
    to read individual port counters and not all of them.
    
    Additionally, since Arnd Bergmann's commit ae1804de ("dsa: sja1105:
    dynamically allocate stats structure"), sja1105_get_ethtool_stats
    allocates memory dynamically, since struct sja1105_port_status was
    deemed to consume too much stack memory. That is not ideal.
    The large structure is only needed because of the burst read.
    If we read statistics one by one, we can consume less memory, and
    we can avoid dynamic allocation.
    
    Additionally, latency-sensitive interfaces such as PTP operations (for
    phc2sys) might suffer if the SPI mutex is being held for too long, which
    happens in the case of SPI burst reads. By reading counters one by one,
    we give a chance for higher priority processes to preempt and take the
    SPI bus mutex for accessing the PTP clock.
    
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    039b167d
    net: dsa: sja1105: don't use burst SPI reads for port statistics
    Vladimir Oltean authored
    
    
    The current internal sja1105 driver API is optimized for retrieving many
    statistics counters at once. But the switch does not do atomic snapshotting
    for them anyway.
    
    In case we start reporting the hardware port counters through
    ndo_get_stats64 as well, not just ethtool, it would be good to be able
    to read individual port counters and not all of them.
    
    Additionally, since Arnd Bergmann's commit ae1804de ("dsa: sja1105:
    dynamically allocate stats structure"), sja1105_get_ethtool_stats
    allocates memory dynamically, since struct sja1105_port_status was
    deemed to consume too much stack memory. That is not ideal.
    The large structure is only needed because of the burst read.
    If we read statistics one by one, we can consume less memory, and
    we can avoid dynamic allocation.
    
    Additionally, latency-sensitive interfaces such as PTP operations (for
    phc2sys) might suffer if the SPI mutex is being held for too long, which
    happens in the case of SPI burst reads. By reading counters one by one,
    we give a chance for higher priority processes to preempt and take the
    SPI bus mutex for accessing the PTP clock.
    
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Loading