net: rcu-ify tcf_proto

rcu'ify tcf_proto this allows calling tc_classify() without
holding any locks. Updaters are protected by RTNL.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: cls_basic use RCU

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: cls_cgroup use RCU

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: cls_flow use RCU

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: fw use RCU

RCU'ify fw classifier.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: RCU cls_route

RCUify the route classifier

Spinlock's are used to protect fastmap for now.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: RCU cls_tcindex

Make cls_tcindex RCU safe.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: make cls_u32 lockless

Make cls_u32 classifier safe to run without holding lock.

TODO look at struct tc_u_knode layout

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: rcu'ify cls_rsvp

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: sched: rcu'ify tc_action

Allow tc_action list to be traversed using RCU locking.

Additionally make priv field RCU safe to allow for tc actions that
use the priv field as a pointer into a list head. See act_mirred.

TODO: review this carefully specifically the priv field.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
net: qdisc: add a new op to run filters/actions before enqueue

Add new qdisc op 'pre_enqueue' to allow multiqueue queuing disciplines
to call tc_classify or perform other work before dev_pick_tx().

This helps with the default 'mq' queuing discipline and 'mqprio'
queueing discipline where the TXQ effectively picks the qdisc. If
users are trying to put specific flows on a queue it is helpful
to call tc_classify to set the queue_mapping or skb->priority. Once
traffic can be directed to a specific queue then hardware tx rings
may be tuned to support this traffic type. 'mqprio' already gives
the ability to do this via skb->priority the pre_enqueue provides
more control over pkt steering for both mq and mqprio.

Also this allows traffic classifiers to be run without holding
the qdisc lock and gives one place to attach filters when mq
or mqprio are in use. Today a filter has to be attached to each
txq qdisc to have all traffic hit the filter.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
ixgbe: remove select_queue

Select queue is no longer needed now that DCB infrastructure is in
place and xps is being used for ATR flow director.

Signed-off-by: John Fastabend <john.r.fastabend@intel.com>