Hi!

Our Qdisc offload so far has been very simplistic.  We held
and array of marking thresholds and statistics sized to the
number of PF queues.  This was sufficient since the only
configuration we supported was single layer of RED Qdiscs
(on top of MQ or not, but MQ isn't really about queuing).

As we move to add more Qdiscs it's time to actually try to
track the full Qdisc hierarchy.  This allows us to make sure
our offloaded configuration reflects the SW path better.
We add graft notifications to MQ and RED (PRIO already sends
them) to allow drivers offloading those to learn how Qdiscs
are linked.  MQ graft gives us the obvious advantage of being
able to track when Qdiscs are shared or moved.  It seems
unlikely HW would offload RED's child Qdiscs but since the
behaviour would change based on linked child we should
stop offloading REDs with modified child.  RED will also
handle the child differently during reconfig when limit
parameter is set - so we have to inform the drivers about
the limit, and have them reset the child state when
appropriate.

The NFP driver will now allocate a structure to track each
Qdisc and link it to its children.  We will also maintain
a shadow copy of threshold settings - to save device writes
and make it easier to apply defaults when config is
re-evaluated.

Jakub Kicinski (13):
  nfp: abm: rename qdiscs -> red_qdiscs
  nfp: abm: keep track of all RED thresholds
  nfp: abm: track all offload-enabled qdiscs
  net: sched: provide notification for graft on root
  nfp: abm: remember which Qdisc is root
  nfp: abm: allocate Qdisc child table
  net: sched: red: offload a graft notification
  net: sched: mq: offload a graft notification
  nfp: abm: build full Qdisc hierarchy based on graft notifications
  net: sched: red: notify drivers about RED's limit parameter
  nfp: abm: reset RED's child based on limit
  nfp: abm: save RED's parameters
  nfp: abm: restructure Qdisc handling

 drivers/net/ethernet/netronome/nfp/abm/ctrl.c | 105 +--
 drivers/net/ethernet/netronome/nfp/abm/main.c |  42 +-
 drivers/net/ethernet/netronome/nfp/abm/main.h | 108 ++-
 .../net/ethernet/netronome/nfp/abm/qdisc.c    | 712 +++++++++++++-----
 include/linux/netdevice.h                     |   1 +
 include/net/pkt_cls.h                         |  24 +-
 net/sched/sch_api.c                           |  17 +
 net/sched/sch_mq.c                            |   9 +
 net/sched/sch_red.c                           |  18 +
 9 files changed, 740 insertions(+), 296 deletions(-)

-- 
2.17.1

Reply via email to