[PATCH v5 net-next 0/9] Add kernel tc-mqprio and tc-taprio support for preemptible traffic classes

From: Vladimir Oltean
Date: Tue Apr 11 2023 - 14:02:29 EST


The last RFC in August 2022 contained a proposal for the UAPI of both
TSN standards which together form Frame Preemption (802.1Q and 802.3):
https://lore.kernel.org/netdev/20220816222920.1952936-1-vladimir.oltean@xxxxxxx/

It wasn't clear at the time whether the 802.1Q portion of Frame Preemption
should be exposed via the tc qdisc (mqprio, taprio) or via some other
layer (perhaps also ethtool like the 802.3 portion, or dcbnl), even
though the options were discussed extensively, with pros and cons:
https://lore.kernel.org/netdev/20220816222920.1952936-3-vladimir.oltean@xxxxxxx/

So the 802.3 portion got submitted separately and finally was accepted:
https://lore.kernel.org/netdev/20230119122705.73054-1-vladimir.oltean@xxxxxxx/

leaving the only remaining question: how do we expose the 802.1Q bits?

This series proposes that we use the Qdisc layer, through separate
(albeit very similar) UAPI in mqprio and taprio, and that both these
Qdiscs pass the information down to the offloading device driver through
the common mqprio offload structure (which taprio also passes).

An implementation is provided for the NXP LS1028A on-board Ethernet
endpoint (enetc). Previous versions also contained support for its
embedded switch (felix), but this needs more work and will be submitted
separately.

Changes in v5:
- don't initialize tb twice, nla_parse_nested() does it
- use NL_REQ_ATTR_CHECK() and NL_SET_ERR_MSG_ATTR() for
TCA_MQPRIO_TC_ENTRY_INDEX

v4 at:
https://lore.kernel.org/netdev/20230403103440.2895683-1-vladimir.oltean@xxxxxxx/

Changes in v4:
- removed felix driver support

Changes in v3:
- fixed build error caused by "default" switch case with no code
- reordered patches: bug fix first, driver changes all at the end
- changed links from patchwork to lore
- passed extack down to ndo_setup_tc() for mqprio and taprio, and made
use of it in ocelot

v2 at:
https://lore.kernel.org/netdev/20230219135309.594188-1-vladimir.oltean@xxxxxxx/

Changes in v2:
- add missing EXPORT_SYMBOL_GPL(ethtool_dev_mm_supported)
- slightly reword some commit messages
- move #include <linux/ethtool_netlink.h> to the respective patch in
mqprio
- remove self-evident comment "only for dump and offloading" in mqprio

v1 at:
https://lore.kernel.org/netdev/20230216232126.3402975-1-vladimir.oltean@xxxxxxx/

Vladimir Oltean (9):
net: ethtool: create and export ethtool_dev_mm_supported()
net/sched: mqprio: simplify handling of nlattr portion of TCA_OPTIONS
net/sched: mqprio: add extack to mqprio_parse_nlattr()
net/sched: mqprio: add an extack message to mqprio_parse_opt()
net/sched: pass netlink extack to mqprio and taprio offload
net/sched: mqprio: allow per-TC user input of FP adminStatus
net/sched: taprio: allow per-TC user input of FP adminStatus
net: enetc: rename "mqprio" to "qopt"
net: enetc: add support for preemptible traffic classes

drivers/net/ethernet/freescale/enetc/enetc.c | 31 ++-
drivers/net/ethernet/freescale/enetc/enetc.h | 1 +
.../net/ethernet/freescale/enetc/enetc_hw.h | 4 +
include/linux/ethtool_netlink.h | 6 +
include/net/pkt_sched.h | 3 +
include/uapi/linux/pkt_sched.h | 17 ++
net/ethtool/mm.c | 23 +++
net/sched/sch_mqprio.c | 188 +++++++++++++++---
net/sched/sch_mqprio_lib.c | 14 ++
net/sched/sch_mqprio_lib.h | 2 +
net/sched/sch_taprio.c | 77 +++++--
11 files changed, 324 insertions(+), 42 deletions(-)

--
2.34.1