Hi! This series adds support for GRED offload in the nfp driver. So far we have only supported the RED Qdisc offload, but we need a way to differentiate traffic types e.g. based on DSCP marking.
It may seem like PRIO+RED is a good match for this job, however, (a) we don't need strict priority behaviour of PRIO, and (b) PRIO uses the legacy way of mapping ToS fields to bands, which is quite awkward and limitting. The less commonly used GRED Qdisc is a better much for the scenario, it allows multiple sets of RED parameters and queue lengths to be maintained with a single FIFO queue. This is exactly how nfp offload behaves. We use a trivial u32 classifier to assign packets to virtual queues. There is also the minor advantage that GRED can't have its child changed, therefore limitting ways in which the configuration of SW path can diverge from HW offload. Last patch of the series adds support for (G)RED in non-ECN mode, where packets are dropped instead of marked. Jakub Kicinski (14): nfp: abm: map per-band symbols nfp: abm: pass band parameter to functions nfp: abm: size threshold table to account for bands nfp: abm: switch to extended stats for reading packet/byte counts nfp: abm: add up bands for sto/non-sto stats net: sched: gred: add basic Qdisc offload net: sched: gred: support reporting stats from offloads nfp: abm: wrap RED parameters in bands nfp: abm: add GRED offload net: sched: cls_u32: add res to offload information nfp: abm: calculate PRIO map len and check mailbox size nfp: abm: add functions to update DSCP -> virtual queue map nfp: abm: add cls_u32 offload for simple band classification nfp: abm: add support for more threshold actions drivers/net/ethernet/netronome/nfp/Makefile | 1 + drivers/net/ethernet/netronome/nfp/abm/cls.c | 283 +++++++++++++++++ drivers/net/ethernet/netronome/nfp/abm/ctrl.c | 287 +++++++++++++++--- drivers/net/ethernet/netronome/nfp/abm/main.c | 48 ++- drivers/net/ethernet/netronome/nfp/abm/main.h | 113 ++++++- .../net/ethernet/netronome/nfp/abm/qdisc.c | 279 ++++++++++++++--- drivers/net/ethernet/netronome/nfp/nfp_net.h | 1 + .../ethernet/netronome/nfp/nfp_net_common.c | 2 +- .../net/ethernet/netronome/nfp/nfp_net_ctrl.h | 2 + include/linux/netdevice.h | 1 + include/net/pkt_cls.h | 45 +++ net/sched/cls_u32.c | 2 + net/sched/sch_gred.c | 94 ++++++ 13 files changed, 1042 insertions(+), 116 deletions(-) create mode 100644 drivers/net/ethernet/netronome/nfp/abm/cls.c -- 2.17.1