linux/drivers/net/ethernet/mscc
Vladimir Oltean 25027c8409 net: dsa: felix: check the 32-bit PSFP stats against overflow
The Felix PSFP counters suffer from the same problem as the ocelot
ndo_get_stats64 ones - they are 32-bit, so they can easily overflow and
this can easily go undetected.

Add a custom hook in ocelot_check_stats_work() through which driver
specific actions can be taken, and update the stats for the existing
PSFP filters from that hook.

Previously, vsc9959_psfp_filter_add() and vsc9959_psfp_filter_del() were
serialized with respect to each other via rtnl_lock(). However, with the
new entry point into &psfp->sfi_list coming from the periodic worker, we
now need an explicit mutex to serialize access to these lists.

We used to keep a struct felix_stream_filter_counters on stack, through
which vsc9959_psfp_stats_get() - a FLOW_CLS_STATS callback - would
retrieve data from vsc9959_psfp_counters_get(). We need to become
smarter about that in 3 ways:

- we need to keep a persistent set of counters for each stream instead
  of keeping them on stack

- we need to promote those counters from u32 to u64, and create a
  procedure that properly keeps 64-bit counters. Since we clear the
  hardware counters anyway, and we poll every 2 seconds, a simple
  increment of a u64 counter with a u32 value will perfectly do the job.

- FLOW_CLS_STATS also expect incremental counters, so we also need to
  zeroize our u64 counters every time sch_flower calls us

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2022-09-09 10:59:12 +01:00
..
Kconfig
Makefile net: ocelot: add FDMA support 2021-12-10 20:56:58 -08:00
ocelot.c net: dsa: felix: check the 32-bit PSFP stats against overflow 2022-09-09 10:59:12 +01:00
ocelot.h net: mscc: ocelot: move ocelot_port_private :: chip_port to ocelot_port :: index 2022-05-12 16:39:18 -07:00
ocelot_devlink.c
ocelot_fdma.c net: ocelot: fix wrong time_after usage 2022-07-07 18:05:36 -07:00
ocelot_fdma.h net: ocelot: add FDMA support 2021-12-10 20:56:58 -08:00
ocelot_flower.c net: mscc: ocelot: offload tc action "ok" using an empty action vector 2022-05-22 22:15:19 +01:00
ocelot_io.c net: mscc: ocelot: add ability to perform bulk reads 2022-02-14 13:24:29 +00:00
ocelot_mrp.c net: mscc: ocelot: enforce FDB isolation when VLAN-unaware 2022-02-27 11:06:14 +00:00
ocelot_net.c net: mscc: ocelot: report ndo_get_stats64 from the wraparound-resistant ocelot->stats 2022-08-17 21:58:33 -07:00
ocelot_police.c net: mscc: ocelot: drop port argument from qos_policer_conf_set 2022-05-04 20:42:15 -07:00
ocelot_police.h net: mscc: ocelot: drop port argument from qos_policer_conf_set 2022-05-04 20:42:15 -07:00
ocelot_ptp.c net: dsa: felix: update base time of time-aware shaper when adjusting PTP time 2022-06-19 09:53:59 +01:00
ocelot_qs.h
ocelot_rew.h
ocelot_vcap.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-05-12 16:15:30 -07:00
ocelot_vcap.h
ocelot_vsc7514.c net: mscc: ocelot: keep ocelot_stat_layout by reg address, not offset 2022-08-17 21:58:32 -07:00
vsc7514_regs.c net: dsa: felix: add definitions for the stream filter counters 2022-09-09 10:59:11 +01:00