kernel: bump 5.4 to 5.4.124
[openwrt/openwrt.git] / target / linux / generic / hack-5.4 / 662-remove_pfifo_fast.patch
index 27946f8ceca6f9dd2be968b15781b817feccb8bb..9df3a8258df8438cd2c1189baf571a0733edca46 100644 (file)
@@ -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);
 -      }