Subject: Re: [RFC PATCH 00/12] RCU'ify the net:sched classifier chains

From: Jamal Hadi Salim <[email-masked]>
Date: Sun, 12 Jan 2014 08:28:29 -0500

On 01/10/14 04:36, John Fastabend wrote:

>
> The ingress qdisc is a simple qdisc which doesn't maintain any
> actual list of skb's and is primarily a hook to attach filters.
> Further the only qdisc that can be attached to the ingress qdisc
> is sch_ingress. The qdisc lock is currently serializing two
> operations (1) tc_classify which is addressed here and (2)
> statistics accounting. The second point is not solved here but
> it could be a matter of making the bstats and qstats per cpu
> stats.

I think as you observed in your other email:
There is a little more than just the stats (on qdiscs as well);
internal to specific filters etc.

> This is an RFC for now and needs some more work. Some items
> I know about are (a) an audit of the ematch code paths, (b) resolving
> the checpatch errors mostly due to moving code around that
> generates those errors, (c) run smatch, (d) audit u32 code
> for correctness,

Ok, my feel-good dial went up reading #d above;->

>(e) do a lot more testing so far only very
> basic testing has been done. I tried to put some reasonable
> comments in the commit logs but yes they need more work.
>

Things like MSI based devices, massive single tun device
tests, ifb with redirect etc would help cleanse things up.

> Cong, if its not too much to ask can we use this as a base
> set of patches for this work? I think its reasonably close to
> correct as is.
>

I believe these are based on your original patches John, no?
So I would agree we use these as a base.

I will scan through the patches...

This is fun stuff - I will try to participate whenever i can
(unfortunately not much time at the moment).

cheers,
jamal

> Thanks! John.
>
> ---
>
> John Fastabend (12):
>        net: qdisc: use rcu prefix and silence sparse warnings
>        net: rcu-ify tcf_proto
>        net: sched: cls_basic use RCU
>        net: sched: cls_cgroup use RCU
>        net: sched: cls_flow use RCU
>        net: sched: fw use RCU
>        net: sched: RCU cls_route
>        net: sched: RCU cls_tcindex
>        net: sched: make cls_u32 lockless
>        net: sched: rcu'ify cls_rsvp
>        net: make cls_bpf rcu safe
>        net: sched: make tc_action safe to walk under RCU
>
>
>   include/linux/netdevice.h |   41 +-----
>   include/linux/rtnetlink.h |   10 +
>   include/net/act_api.h     |    1
>   include/net/pkt_cls.h     |   12 +-
>   include/net/sch_generic.h |   34 ++++-
>   net/core/dev.c            |   54 +++++++
>   net/sched/act_api.c       |   18 +-
>   net/sched/cls_api.c       |   44 +++---
>   net/sched/cls_basic.c     |   82 ++++++-----
>   net/sched/cls_bpf.c       |   79 ++++++-----
>   net/sched/cls_cgroup.c    |   65 ++++++---
>   net/sched/cls_flow.c      |  145 ++++++++++++--------
>   net/sched/cls_fw.c        |  112 +++++++++++----
>   net/sched/cls_route.c     |  218 +++++++++++++++++-------------
>   net/sched/cls_rsvp.h      |  152 ++++++++++++---------
>   net/sched/cls_tcindex.c   |  327 ++++++++++++++++++++++++++-------------------
>   net/sched/cls_u32.c       |  258 +++++++++++++++++++++++-------------
>   net/sched/sch_api.c       |    6 -
>   net/sched/sch_atm.c       |   30 +++-
>   net/sched/sch_cbq.c       |   21 ++-
>   net/sched/sch_choke.c     |   18 ++
>   net/sched/sch_drr.c       |   10 +
>   net/sched/sch_dsmark.c    |    8 +
>   net/sched/sch_fq_codel.c  |   11 +-
>   net/sched/sch_generic.c   |    4 -
>   net/sched/sch_hfsc.c      |   17 ++
>   net/sched/sch_htb.c       |   23 ++-
>   net/sched/sch_ingress.c   |    8 +
>   net/sched/sch_mqprio.c    |    4 -
>   net/sched/sch_multiq.c    |    8 +
>   net/sched/sch_prio.c      |   11 +-
>   net/sched/sch_qfq.c       |    9 +
>   net/sched/sch_sfb.c       |   15 +-
>   net/sched/sch_sfq.c       |   11 +-
>   net/sched/sch_teql.c      |    9 +
>   35 files changed, 1139 insertions(+), 736 deletions(-)
>