diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-01-19 22:48:19 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-01-20 19:59:32 -0500 |
commit | a2da570d62fcb9e8816f6920e1ec02c706b289fa (patch) | |
tree | 9a24b76262c40ec2f1be11e29e224c7d7b20fa26 /net/sched/sch_generic.c | |
parent | fd245a4adb5288eac37250875f237c40a20a1944 (diff) |
net_sched: RCU conversion of stab
This patch converts stab qdisc management to RCU, so that we can perform
the qdisc_calculate_pkt_len() call before getting qdisc lock.
This shortens the lock's held time in __dev_xmit_skb().
This permits more qdiscs to get TCQ_F_CAN_BYPASS status, avoiding lot of
cache misses and so reducing latencies.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Patrick McHardy <kaber@trash.net>
CC: Jesper Dangaard Brouer <hawk@diku.dk>
CC: Jarek Poplawski <jarkao2@gmail.com>
CC: Jamal Hadi Salim <hadi@cyberus.ca>
CC: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/sch_generic.c')
-rw-r--r-- | net/sched/sch_generic.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 2f1cb62130da..cc17e794c41e 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c | |||
@@ -632,7 +632,7 @@ void qdisc_destroy(struct Qdisc *qdisc) | |||
632 | #ifdef CONFIG_NET_SCHED | 632 | #ifdef CONFIG_NET_SCHED |
633 | qdisc_list_del(qdisc); | 633 | qdisc_list_del(qdisc); |
634 | 634 | ||
635 | qdisc_put_stab(qdisc->stab); | 635 | qdisc_put_stab(rtnl_dereference(qdisc->stab)); |
636 | #endif | 636 | #endif |
637 | gen_kill_estimator(&qdisc->bstats, &qdisc->rate_est); | 637 | gen_kill_estimator(&qdisc->bstats, &qdisc->rate_est); |
638 | if (ops->reset) | 638 | if (ops->reset) |