aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch')
-rw-r--r--target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch21
1 files changed, 20 insertions, 1 deletions
diff --git a/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch b/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch
index 27946f8cec..9df3a8258d 100644
--- a/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch
+++ b/target/linux/generic/hack-5.4/662-remove_pfifo_fast.patch
@@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
-@@ -595,211 +595,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
+@@ -620,230 +620,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
.owner = THIS_MODULE,
};
@@ -64,8 +64,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
-{
- struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
- struct sk_buff *skb = NULL;
+- bool need_retry = true;
- int band;
-
+-retry:
- for (band = 0; band < PFIFO_FAST_BANDS && !skb; band++) {
- struct skb_array *q = band2list(priv, band);
-
@@ -76,6 +78,23 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
- }
- if (likely(skb)) {
- qdisc_update_stats_at_dequeue(qdisc, skb);
+- } else if (need_retry &&
+- test_bit(__QDISC_STATE_MISSED, &qdisc->state)) {
+- /* Delay clearing the STATE_MISSED here to reduce
+- * the overhead of the second spin_trylock() in
+- * qdisc_run_begin() and __netif_schedule() calling
+- * in qdisc_run_end().
+- */
+- clear_bit(__QDISC_STATE_MISSED, &qdisc->state);
+-
+- /* Make sure dequeuing happens after clearing
+- * STATE_MISSED.
+- */
+- smp_mb__after_atomic();
+-
+- need_retry = false;
+-
+- goto retry;
- } else {
- WRITE_ONCE(qdisc->empty, true);
- }