--- 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,
};
-{
- 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);
-
- }
- 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);
- }