]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: sja1105: don't use burst SPI reads for port statistics
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 21 May 2021 13:16:08 +0000 (16:16 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 May 2021 21:01:41 +0000 (14:01 -0700)
commitca844c9436c606ea2935588a31637d3c1c1ed3c3
tree65a369ef6683f874331efa1bf8f45c7c97dfca5c
parentc484f8d28f800256f328084f7899ae2e060b8f12
net: dsa: sja1105: don't use burst SPI reads for port statistics

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 b4c89dd43b1d ("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: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/sja1105/sja1105.h
drivers/net/dsa/sja1105/sja1105_ethtool.c
drivers/net/dsa/sja1105/sja1105_spi.c