X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=meta-agl-bsp%2Frecipes-kernel%2Flinux%2Flinux%2Fnet-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch;fp=meta-agl-bsp%2Frecipes-kernel%2Flinux%2Flinux%2Fnet-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch;h=0000000000000000000000000000000000000000;hb=1c3c06842ac1b9c089d0a08e91c60f44e4844fac;hp=37ace5a5805f8dde46406a5ad4e6a06c1f19094c;hpb=c1e048fc05542d859115990312e0753ce2dea72e;p=AGL%2Fmeta-agl.git diff --git a/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch b/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch deleted file mode 100644 index 37ace5a58..000000000 --- a/meta-agl-bsp/recipes-kernel/linux/linux/net-sch_generic-Use-pfifo_fast-as-fallback-scheduler.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 546b85bb0aadb5a928b49b53dc02911996169c0b Mon Sep 17 00:00:00 2001 -From: Vincent Prince -Date: Wed, 23 Oct 2019 15:44:20 +0200 -Subject: [PATCH] net: sch_generic: Use pfifo_fast as fallback scheduler for - CAN hardware - -There is networking hardware that isn't based on Ethernet for layers 1 and 2. - -For example CAN. - -CAN is a multi-master serial bus standard for connecting Electronic Control -Units [ECUs] also known as nodes. A frame on the CAN bus carries up to 8 bytes -of payload. Frame corruption is detected by a CRC. However frame loss due to -corruption is possible, but a quite unusual phenomenon. - -While fq_codel works great for TCP/IP, it doesn't for CAN. There are a lot of -legacy protocols on top of CAN, which are not build with flow control or high -CAN frame drop rates in mind. - -When using fq_codel, as soon as the queue reaches a certain delay based length, -skbs from the head of the queue are silently dropped. Silently meaning that the -user space using a send() or similar syscall doesn't get an error. However -TCP's flow control algorithm will detect dropped packages and adjust the -bandwidth accordingly. - -When using fq_codel and sending raw frames over CAN, which is the common use -case, the user space thinks the package has been sent without problems, because -send() returned without an error. pfifo_fast will drop skbs, if the queue -length exceeds the maximum. But with this scheduler the skbs at the tail are -dropped, an error (-ENOBUFS) is propagated to user space. So that the user -space can slow down the package generation. - -On distributions, where fq_codel is made default via CONFIG_DEFAULT_NET_SCH -during compile time, or set default during runtime with sysctl -net.core.default_qdisc (see [1]), we get a bad user experience. In my test case -with pfifo_fast, I can transfer thousands of million CAN frames without a frame -drop. On the other hand with fq_codel there is more then one lost CAN frame per -thousand frames. - -As pointed out fq_codel is not suited for CAN hardware, so this patch changes -attach_one_default_qdisc() to use pfifo_fast for "ARPHRD_CAN" network devices. - -During transition of a netdev from down to up state the default queuing -discipline is attached by attach_default_qdiscs() with the help of -attach_one_default_qdisc(). This patch modifies attach_one_default_qdisc() to -attach the pfifo_fast (pfifo_fast_ops) if the network device type is -"ARPHRD_CAN". - -[1] https://github.com/systemd/systemd/issues/9194 - -Suggested-by: Marc Kleine-Budde -Signed-off-by: Marc Kleine-Budde -Signed-off-by: Vincent Prince -Acked-by: Dave Taht -Signed-off-by: David S. Miller ---- - net/sched/sch_generic.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index ed5b0e9fd395..4c5dfcb01e00 100644 ---- a/net/sched/sch_generic.c -+++ b/net/sched/sch_generic.c -@@ -1038,6 +1038,8 @@ static void attach_one_default_qdisc(struct net_device *dev, - - if (dev->priv_flags & IFF_NO_QUEUE) - ops = &noqueue_qdisc_ops; -+ else if(dev->type == ARPHRD_CAN) -+ ops = &pfifo_fast_ops; - - qdisc = qdisc_create_dflt(dev_queue, ops, TC_H_ROOT, NULL); - if (!qdisc) { --- -2.25.0 -