mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
net: rcu-ify tcf_proto
rcu'ify tcf_proto this allows calling tc_classify() without holding any locks. Updaters are protected by RTNL. This patch prepares the core net_sched infrastracture for running the classifier/action chains without holding the qdisc lock however it does nothing to ensure cls_xxx and act_xxx types also work without locking. Additional patches are required to address the fall out. Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
46e5da40ae
commit
25d8c0d55f
17 changed files with 121 additions and 88 deletions
|
@ -1781,7 +1781,7 @@ int tc_classify_compat(struct sk_buff *skb, const struct tcf_proto *tp,
|
|||
__be16 protocol = skb->protocol;
|
||||
int err;
|
||||
|
||||
for (; tp; tp = tp->next) {
|
||||
for (; tp; tp = rcu_dereference_bh(tp->next)) {
|
||||
if (tp->protocol != protocol &&
|
||||
tp->protocol != htons(ETH_P_ALL))
|
||||
continue;
|
||||
|
@ -1833,15 +1833,15 @@ void tcf_destroy(struct tcf_proto *tp)
|
|||
{
|
||||
tp->ops->destroy(tp);
|
||||
module_put(tp->ops->owner);
|
||||
kfree(tp);
|
||||
kfree_rcu(tp, rcu);
|
||||
}
|
||||
|
||||
void tcf_destroy_chain(struct tcf_proto **fl)
|
||||
void tcf_destroy_chain(struct tcf_proto __rcu **fl)
|
||||
{
|
||||
struct tcf_proto *tp;
|
||||
|
||||
while ((tp = *fl) != NULL) {
|
||||
*fl = tp->next;
|
||||
while ((tp = rtnl_dereference(*fl)) != NULL) {
|
||||
RCU_INIT_POINTER(*fl, tp->next);
|
||||
tcf_destroy(tp);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue