kmod-sched-cake: don't gso fixup on fixed kernels
authorKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Fri, 28 Sep 2018 08:42:33 +0000 (09:42 +0100)
committerKevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Tue, 2 Oct 2018 11:04:11 +0000 (12:04 +0100)
Kernels 4.14.73 & 4.9.140 include the gso fixup fix, so cake
doesn't need to do it.  Let's not waste cpu cycles by doing it in
cake which could be really important on cpu constrained devices.

Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
package/kernel/kmod-sched-cake/Makefile
package/kernel/kmod-sched-cake/patches/100-remove-skb-max-fix-on-fixed-kernels.patch [new file with mode: 0644]

index ce7ac27..3510437 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=sched-cake
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/dtaht/sch_cake.git
diff --git a/package/kernel/kmod-sched-cake/patches/100-remove-skb-max-fix-on-fixed-kernels.patch b/package/kernel/kmod-sched-cake/patches/100-remove-skb-max-fix-on-fixed-kernels.patch
new file mode 100644 (file)
index 0000000..5f1f3a9
--- /dev/null
@@ -0,0 +1,22 @@
+--- a/sch_cake.c
++++ b/sch_cake.c
+@@ -1799,13 +1799,18 @@ static s32 cake_enqueue(struct sk_buff *
+                       cobalt_set_enqueue_time(segs, now);
+                       get_cobalt_cb(segs)->adjusted_len = cake_overhead(q,
+                                                                         segs);
+-
++#if !((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 124) && LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4,  4, 159) && LINUX_VERSION_CODE < KERNEL_VERSION(4,  5, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4,  9, 130) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14,  73) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)) || \
++      (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18,  11)))
+                       /* For encapsulated packets, the mac_len may not be set
+                        * correctly after GSO split. Fix this by resetting it;
+                        * if skb_gso_segment() already does this correctly,
+                        * this is will just recalculate the current value.
+                        */
+                       skb_reset_mac_len(skb);
++#endif
+                       flow_queue_add(flow, segs);