mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 16:31:13 +00:00
9261e7447e
This makes the patches which were just copied in the previous commit apply on top of kernel 4.19. The patches in the backports-4.19 folder were checked if they are really in kernel 4.19 based on the title and only removed if they were found in the upstream kernel. The following additional patches form the pending folder went into upstream Linux 4.19: pending-4.19/171-usb-dwc2-Fix-inefficient-copy-of-unaligned-buffers.patch pending-4.19/190-2-5-e1000e-Fix-wrong-comment-related-to-link-detection.patch pending-4.19/478-mtd-spi-nor-Add-support-for-XM25QH64A-and-XM25QH128A.patch pending-4.19/479-mtd-spi-nor-add-eon-en25qh32.patch pending-4.19/950-tty-serial-exar-generalize-rs485-setup.patch pending-4.19/340-MIPS-mm-remove-mips_dma_mapping_error.patch Bigger changes were introduced to the m25p80 spi nor driver, as far as I saw it in the new code, it now has the functionality provided in this patch: pending-4.19/450-mtd-m25p80-allow-fallback-from-spi_flash_read-to-reg.patch Part of this patch went upstream independent of OpenWrt: hack-4.19/220-gc_sections.patch This patch was reworked to match the changes done upstream. The MIPS DMA API changed a lot, this patch was rewritten to match the new DMA handling: pending-4.19/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch I did bigger manual changes to the following patches and I am not 100% sure if they are all correct: pending-4.19/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch pending-4.19/411-mtd-partial_eraseblock_write.patch pending-4.19/600-netfilter_conntrack_flush.patch pending-4.19/611-netfilter_match_bypass_default_table.patch pending-4.19/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch hack-4.19/211-host_tools_portability.patch hack-4.19/221-module_exports.patch hack-4.19/321-powerpc_crtsavres_prereq.patch hack-4.19/902-debloat_proc.patch This is based on patchset from Marko Ratkaj <marko.ratkaj@sartura.hr> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
222 lines
5.6 KiB
Diff
222 lines
5.6 KiB
Diff
From b531d492d5ef1cf9dba0f4888eb5fd8624a6d762 Mon Sep 17 00:00:00 2001
|
|
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Fri, 7 Jul 2017 17:23:42 +0200
|
|
Subject: net: sched: switch default qdisc from pfifo_fast to fq_codel and remove pfifo_fast
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
net/sched/sch_generic.c | 140 ------------------------------------------------
|
|
1 file changed, 140 deletions(-)
|
|
|
|
--- a/net/sched/sch_generic.c
|
|
+++ b/net/sched/sch_generic.c
|
|
@@ -595,208 +595,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
|
.owner = THIS_MODULE,
|
|
};
|
|
|
|
-static const u8 prio2band[TC_PRIO_MAX + 1] = {
|
|
- 1, 2, 2, 2, 1, 2, 0, 0 , 1, 1, 1, 1, 1, 1, 1, 1
|
|
-};
|
|
-
|
|
-/* 3-band FIFO queue: old style, but should be a bit faster than
|
|
- generic prio+fifo combination.
|
|
- */
|
|
-
|
|
-#define PFIFO_FAST_BANDS 3
|
|
-
|
|
-/*
|
|
- * Private data for a pfifo_fast scheduler containing:
|
|
- * - rings for priority bands
|
|
- */
|
|
-struct pfifo_fast_priv {
|
|
- struct skb_array q[PFIFO_FAST_BANDS];
|
|
-};
|
|
-
|
|
-static inline struct skb_array *band2list(struct pfifo_fast_priv *priv,
|
|
- int band)
|
|
-{
|
|
- return &priv->q[band];
|
|
-}
|
|
-
|
|
-static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc *qdisc,
|
|
- struct sk_buff **to_free)
|
|
-{
|
|
- int band = prio2band[skb->priority & TC_PRIO_MAX];
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
|
|
- struct skb_array *q = band2list(priv, band);
|
|
- unsigned int pkt_len = qdisc_pkt_len(skb);
|
|
- int err;
|
|
-
|
|
- err = skb_array_produce(q, skb);
|
|
-
|
|
- if (unlikely(err))
|
|
- return qdisc_drop_cpu(skb, qdisc, to_free);
|
|
-
|
|
- qdisc_qstats_cpu_qlen_inc(qdisc);
|
|
- /* Note: skb can not be used after skb_array_produce(),
|
|
- * so we better not use qdisc_qstats_cpu_backlog_inc()
|
|
- */
|
|
- this_cpu_add(qdisc->cpu_qstats->backlog, pkt_len);
|
|
- return NET_XMIT_SUCCESS;
|
|
-}
|
|
-
|
|
-static struct sk_buff *pfifo_fast_dequeue(struct Qdisc *qdisc)
|
|
-{
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
|
|
- struct sk_buff *skb = NULL;
|
|
- int band;
|
|
-
|
|
- for (band = 0; band < PFIFO_FAST_BANDS && !skb; band++) {
|
|
- struct skb_array *q = band2list(priv, band);
|
|
-
|
|
- if (__skb_array_empty(q))
|
|
- continue;
|
|
-
|
|
- skb = __skb_array_consume(q);
|
|
- }
|
|
- if (likely(skb)) {
|
|
- qdisc_qstats_cpu_backlog_dec(qdisc, skb);
|
|
- qdisc_bstats_cpu_update(qdisc, skb);
|
|
- qdisc_qstats_cpu_qlen_dec(qdisc);
|
|
- }
|
|
-
|
|
- return skb;
|
|
-}
|
|
-
|
|
-static struct sk_buff *pfifo_fast_peek(struct Qdisc *qdisc)
|
|
-{
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
|
|
- struct sk_buff *skb = NULL;
|
|
- int band;
|
|
-
|
|
- for (band = 0; band < PFIFO_FAST_BANDS && !skb; band++) {
|
|
- struct skb_array *q = band2list(priv, band);
|
|
-
|
|
- skb = __skb_array_peek(q);
|
|
- }
|
|
-
|
|
- return skb;
|
|
-}
|
|
-
|
|
-static void pfifo_fast_reset(struct Qdisc *qdisc)
|
|
-{
|
|
- int i, band;
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
|
|
-
|
|
- for (band = 0; band < PFIFO_FAST_BANDS; band++) {
|
|
- struct skb_array *q = band2list(priv, band);
|
|
- struct sk_buff *skb;
|
|
-
|
|
- /* NULL ring is possible if destroy path is due to a failed
|
|
- * skb_array_init() in pfifo_fast_init() case.
|
|
- */
|
|
- if (!q->ring.queue)
|
|
- continue;
|
|
-
|
|
- while ((skb = __skb_array_consume(q)) != NULL)
|
|
- kfree_skb(skb);
|
|
- }
|
|
-
|
|
- for_each_possible_cpu(i) {
|
|
- struct gnet_stats_queue *q = per_cpu_ptr(qdisc->cpu_qstats, i);
|
|
-
|
|
- q->backlog = 0;
|
|
- q->qlen = 0;
|
|
- }
|
|
-}
|
|
-
|
|
-static int pfifo_fast_dump(struct Qdisc *qdisc, struct sk_buff *skb)
|
|
-{
|
|
- struct tc_prio_qopt opt = { .bands = PFIFO_FAST_BANDS };
|
|
-
|
|
- memcpy(&opt.priomap, prio2band, TC_PRIO_MAX + 1);
|
|
- if (nla_put(skb, TCA_OPTIONS, sizeof(opt), &opt))
|
|
- goto nla_put_failure;
|
|
- return skb->len;
|
|
-
|
|
-nla_put_failure:
|
|
- return -1;
|
|
-}
|
|
-
|
|
-static int pfifo_fast_init(struct Qdisc *qdisc, struct nlattr *opt,
|
|
- struct netlink_ext_ack *extack)
|
|
-{
|
|
- unsigned int qlen = qdisc_dev(qdisc)->tx_queue_len;
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(qdisc);
|
|
- int prio;
|
|
-
|
|
- /* guard against zero length rings */
|
|
- if (!qlen)
|
|
- return -EINVAL;
|
|
-
|
|
- for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
|
|
- struct skb_array *q = band2list(priv, prio);
|
|
- int err;
|
|
-
|
|
- err = skb_array_init(q, qlen, GFP_KERNEL);
|
|
- if (err)
|
|
- return -ENOMEM;
|
|
- }
|
|
-
|
|
- /* Can by-pass the queue discipline */
|
|
- qdisc->flags |= TCQ_F_CAN_BYPASS;
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static void pfifo_fast_destroy(struct Qdisc *sch)
|
|
-{
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(sch);
|
|
- int prio;
|
|
-
|
|
- for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
|
|
- struct skb_array *q = band2list(priv, prio);
|
|
-
|
|
- /* NULL ring is possible if destroy path is due to a failed
|
|
- * skb_array_init() in pfifo_fast_init() case.
|
|
- */
|
|
- if (!q->ring.queue)
|
|
- continue;
|
|
- /* Destroy ring but no need to kfree_skb because a call to
|
|
- * pfifo_fast_reset() has already done that work.
|
|
- */
|
|
- ptr_ring_cleanup(&q->ring, NULL);
|
|
- }
|
|
-}
|
|
-
|
|
-static int pfifo_fast_change_tx_queue_len(struct Qdisc *sch,
|
|
- unsigned int new_len)
|
|
-{
|
|
- struct pfifo_fast_priv *priv = qdisc_priv(sch);
|
|
- struct skb_array *bands[PFIFO_FAST_BANDS];
|
|
- int prio;
|
|
-
|
|
- for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
|
|
- struct skb_array *q = band2list(priv, prio);
|
|
-
|
|
- bands[prio] = q;
|
|
- }
|
|
-
|
|
- return skb_array_resize_multiple(bands, PFIFO_FAST_BANDS, new_len,
|
|
- GFP_KERNEL);
|
|
-}
|
|
-
|
|
-struct Qdisc_ops pfifo_fast_ops __read_mostly = {
|
|
- .id = "pfifo_fast",
|
|
- .priv_size = sizeof(struct pfifo_fast_priv),
|
|
- .enqueue = pfifo_fast_enqueue,
|
|
- .dequeue = pfifo_fast_dequeue,
|
|
- .peek = pfifo_fast_peek,
|
|
- .init = pfifo_fast_init,
|
|
- .destroy = pfifo_fast_destroy,
|
|
- .reset = pfifo_fast_reset,
|
|
- .dump = pfifo_fast_dump,
|
|
- .change_tx_queue_len = pfifo_fast_change_tx_queue_len,
|
|
- .owner = THIS_MODULE,
|
|
- .static_flags = TCQ_F_NOLOCK | TCQ_F_CPUSTATS,
|
|
-};
|
|
-EXPORT_SYMBOL(pfifo_fast_ops);
|
|
-
|
|
static struct lock_class_key qdisc_tx_busylock;
|
|
static struct lock_class_key qdisc_running_key;
|
|
|