]> git.itanic.dy.fi Git - linux-stable/commit
net/sched: taprio: add netlink reporting for offload statistics counters
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 30 May 2023 09:19:46 +0000 (12:19 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 May 2023 09:00:30 +0000 (10:00 +0100)
commit6c1adb650c8d85c6cb471dbc900c2468f462995a
tree074dafe068991f5d4b173c9f110d10a81f674472
parent2d800bc500fb3fb07a0fb42e2d0a1356fb9e1e8f
net/sched: taprio: add netlink reporting for offload statistics counters

Offloading drivers may report some additional statistics counters, some
of them even suggested by 802.1Q, like TransmissionOverrun.

In my opinion we don't have to limit ourselves to reporting counters
only globally to the Qdisc/interface, especially if the device has more
detailed reporting (per traffic class), since the more detailed info is
valuable for debugging and can help identifying who is exceeding its
time slot.

But on the other hand, some devices may not be able to report both per
TC and global stats.

So we end up reporting both ways, and use the good old ethtool_put_stat()
strategy to determine which statistics are supported by this NIC.
Statistics which aren't set are simply not reported to netlink. For this
reason, we need something dynamic (a nlattr nest) to be reported through
TCA_STATS_APP, and not something daft like the fixed-size and
inextensible struct tc_codel_xstats. A good model for xstats which are a
nlattr nest rather than a fixed struct seems to be cake.

 # Global stats
 $ tc -s qdisc show dev eth0 root
 # Per-tc stats
 $ tc -s class show dev eth0

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/pkt_sched.h
include/uapi/linux/pkt_sched.h
net/sched/sch_taprio.c