diff options
author | Paolo Abeni <pabeni@redhat.com> | 2018-05-15 16:24:37 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-05-17 18:46:54 +0200 |
commit | 021a17ed796b62383f7623f4fea73787abddad77 (patch) | |
tree | 6e6b0d4339e495a4c94e8489f3b06a00033fa435 | |
parent | sched: replace __QDISC_STATE_RUNNING bit with a spin lock (diff) | |
download | linux-021a17ed796b62383f7623f4fea73787abddad77.tar.xz linux-021a17ed796b62383f7623f4fea73787abddad77.zip |
pfifo_fast: drop unneeded additional lock on dequeue
After the previous patch, for NOLOCK qdiscs, q->seqlock is
always held when the dequeue() is invoked, we can drop
any additional locking to protect such operation.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/skb_array.h | 5 | ||||
-rw-r--r-- | net/sched/sch_generic.c | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/include/linux/skb_array.h b/include/linux/skb_array.h index a6b6e8bb3d7b..62d9b0a6329f 100644 --- a/include/linux/skb_array.h +++ b/include/linux/skb_array.h @@ -97,6 +97,11 @@ static inline bool skb_array_empty_any(struct skb_array *a) return ptr_ring_empty_any(&a->ring); } +static inline struct sk_buff *__skb_array_consume(struct skb_array *a) +{ + return __ptr_ring_consume(&a->ring); +} + static inline struct sk_buff *skb_array_consume(struct skb_array *a) { return ptr_ring_consume(&a->ring); diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index a126f16bc30b..760ab1b09f8b 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -656,7 +656,7 @@ static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc) if (__skb_array_empty(q)) continue; - skb = skb_array_consume_bh(q); + skb = __skb_array_consume(q); } if (likely(skb)) { qdisc_qstats_cpu_backlog_dec(qdisc, skb); @@ -697,7 +697,7 @@ static void pfifo_fast_reset(struct Qdisc *qdisc) if (!q->ring.queue) continue; - while ((skb = skb_array_consume_bh(q)) != NULL) + while ((skb = __skb_array_consume(q)) != NULL) kfree_skb(skb); } |