diff --git a/include/kernel-version.mk b/include/kernel-version.mk index 432048b051..74fa9dcc45 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -7,11 +7,11 @@ ifdef CONFIG_TESTING_KERNEL endif LINUX_VERSION-4.9 = .215 -LINUX_VERSION-4.14 = .173 +LINUX_VERSION-4.14 = .174 LINUX_VERSION-4.19 = .110 LINUX_KERNEL_HASH-4.9.215 = 236f2f47853700f22b9925cb17917d97ff7120fcc8110ec827c5a030a8129f48 -LINUX_KERNEL_HASH-4.14.173 = a282ad7a445dcfc7ff8939d18d55ee09e59f96d2aa96d05583483f155f1db74f +LINUX_KERNEL_HASH-4.14.174 = 4c223ca3565d4267b403f7432860d87c8301767eb654d046d268782b18155189 LINUX_KERNEL_HASH-4.19.110 = ca113d2c4a061cbb6efaab60290b10dda0298e3249ff1d0c2327eb3d827c6b96 remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1)))) diff --git a/target/linux/generic/backport-4.14/025-tcp-allow-drivers-to-tweak-TSQ-logic.patch b/target/linux/generic/backport-4.14/025-tcp-allow-drivers-to-tweak-TSQ-logic.patch index b851799824..7939ee46b0 100644 --- a/target/linux/generic/backport-4.14/025-tcp-allow-drivers-to-tweak-TSQ-logic.patch +++ b/target/linux/generic/backport-4.14/025-tcp-allow-drivers-to-tweak-TSQ-logic.patch @@ -55,7 +55,7 @@ Cc: Kir Kolyshkin rwlock_t sk_callback_lock; --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -2745,6 +2745,7 @@ void sock_init_data(struct socket *sock, +@@ -2748,6 +2748,7 @@ void sock_init_data(struct socket *sock, sk->sk_max_pacing_rate = ~0U; sk->sk_pacing_rate = ~0U; diff --git a/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch b/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch index 0435803f51..a9f744fd13 100644 --- a/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch +++ b/target/linux/generic/backport-4.14/273-batman-adv-Convert-packet.h-to-uapi-header.patch @@ -27,7 +27,7 @@ Signed-off-by: David S. Miller --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c -@@ -51,6 +51,7 @@ +@@ -52,6 +52,7 @@ #include #include #include @@ -35,7 +35,7 @@ Signed-off-by: David S. Miller #include #include "bat_algo.h" -@@ -62,7 +63,6 @@ +@@ -63,7 +64,6 @@ #include "netlink.h" #include "network-coding.h" #include "originator.h" @@ -45,7 +45,7 @@ Signed-off-by: David S. Miller #include "translation-table.h" --- a/net/batman-adv/bat_v.c +++ b/net/batman-adv/bat_v.c -@@ -37,6 +37,7 @@ +@@ -36,6 +36,7 @@ #include #include #include @@ -53,7 +53,7 @@ Signed-off-by: David S. Miller #include #include "bat_algo.h" -@@ -49,7 +50,6 @@ +@@ -48,7 +49,6 @@ #include "log.h" #include "netlink.h" #include "originator.h" @@ -80,7 +80,7 @@ Signed-off-by: David S. Miller --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c -@@ -38,13 +38,13 @@ +@@ -40,13 +40,13 @@ #include #include #include @@ -174,7 +174,7 @@ Signed-off-by: David S. Miller /** --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c -@@ -36,6 +36,7 @@ +@@ -37,6 +37,7 @@ #include #include #include @@ -182,7 +182,7 @@ Signed-off-by: David S. Miller #include "bat_v.h" #include "bridge_loop_avoidance.h" -@@ -44,7 +45,6 @@ +@@ -45,7 +46,6 @@ #include "gateway_client.h" #include "log.h" #include "originator.h" @@ -1025,7 +1025,7 @@ Signed-off-by: David S. Miller --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h -@@ -34,10 +34,9 @@ +@@ -35,10 +35,9 @@ #include #include #include diff --git a/target/linux/generic/backport-4.14/600-ipv6-addrconf-call-ipv6_mc_up-for-non-Ethernet-inter.patch b/target/linux/generic/backport-4.14/600-ipv6-addrconf-call-ipv6_mc_up-for-non-Ethernet-inter.patch deleted file mode 100644 index ba0d137096..0000000000 --- a/target/linux/generic/backport-4.14/600-ipv6-addrconf-call-ipv6_mc_up-for-non-Ethernet-inter.patch +++ /dev/null @@ -1,71 +0,0 @@ -From 82afdcd4ec3c8ca6551cbf7c43c09e2fd240487a Mon Sep 17 00:00:00 2001 -From: Hangbin Liu -Date: Tue, 10 Mar 2020 15:27:37 +0800 -Subject: [PATCH] ipv6/addrconf: call ipv6_mc_up() for non-Ethernet interface -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Rafał found an issue that for non-Ethernet interface, if we down and up -frequently, the memory will be consumed slowly. - -The reason is we add allnodes/allrouters addressed in multicast list in -ipv6_add_dev(). When link down, we call ipv6_mc_down(), store all multicast -addresses via mld_add_delrec(). But when link up, we don't call ipv6_mc_up() -for non-Ethernet interface to remove the addresses. This makes idev->mc_tomb -getting bigger and bigger. The call stack looks like: - -addrconf_notify(NETDEV_REGISTER) - ipv6_add_dev - ipv6_dev_mc_inc(ff01::1) - ipv6_dev_mc_inc(ff02::1) - ipv6_dev_mc_inc(ff02::2) - -addrconf_notify(NETDEV_UP) - addrconf_dev_config - /* Alas, we support only Ethernet autoconfiguration. */ - return; - -addrconf_notify(NETDEV_DOWN) - addrconf_ifdown - ipv6_mc_down - igmp6_group_dropped(ff02::2) - mld_add_delrec(ff02::2) - igmp6_group_dropped(ff02::1) - igmp6_group_dropped(ff01::1) - -After investigating, I can't found a rule to disable multicast on -non-Ethernet interface. In RFC2460, the link could be Ethernet, PPP, ATM, -tunnels, etc. In IPv4, it doesn't check the dev type when calls ip_mc_up() -in inetdev_event(). Even for IPv6, we don't check the dev type and call -ipv6_add_dev(), ipv6_dev_mc_inc() after register device. - -So I think it's OK to fix this memory consumer by calling ipv6_mc_up() for -non-Ethernet interface. - -v2: Also check IFF_MULTICAST flag to make sure the interface supports - multicast - -Reported-by: Rafał Miłecki -Tested-by: Rafał Miłecki -Fixes: 74235a25c673 ("[IPV6] addrconf: Fix IPv6 on tuntap tunnels") -Fixes: 1666d49e1d41 ("mld: do not remove mld souce list info when set link down") -Signed-off-by: Hangbin Liu -Signed-off-by: David S. Miller ---- - net/ipv6/addrconf.c | 4 ++++ - 1 file changed, 4 insertions(+) - ---- a/net/ipv6/addrconf.c -+++ b/net/ipv6/addrconf.c -@@ -3223,6 +3223,10 @@ static void addrconf_dev_config(struct n - (dev->type != ARPHRD_TUNNEL) && - (dev->type != ARPHRD_NONE)) { - /* Alas, we support only Ethernet autoconfiguration. */ -+ idev = __in6_dev_get(dev); -+ if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP && -+ dev->flags & IFF_MULTICAST) -+ ipv6_mc_up(idev); - return; - } - diff --git a/target/linux/generic/hack-4.14/202-reduce_module_size.patch b/target/linux/generic/hack-4.14/202-reduce_module_size.patch index 2cbb6add9a..66a1f9c54c 100644 --- a/target/linux/generic/hack-4.14/202-reduce_module_size.patch +++ b/target/linux/generic/hack-4.14/202-reduce_module_size.patch @@ -20,5 +20,5 @@ Signed-off-by: Felix Fietkau -KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds +KBUILD_LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds $(if $(CONFIG_PROFILING),,-s) GCC_PLUGINS_CFLAGS := + CLANG_FLAGS := - export ARCH SRCARCH SUBARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD diff --git a/target/linux/generic/hack-4.14/204-module_strip.patch b/target/linux/generic/hack-4.14/204-module_strip.patch index 81a672b0fd..c53963c530 100644 --- a/target/linux/generic/hack-4.14/204-module_strip.patch +++ b/target/linux/generic/hack-4.14/204-module_strip.patch @@ -114,7 +114,7 @@ Signed-off-by: Felix Fietkau config MODULES_TREE_LOOKUP --- a/kernel/module.c +++ b/kernel/module.c -@@ -3022,9 +3022,11 @@ static struct module *setup_load_info(st +@@ -3024,9 +3024,11 @@ static struct module *setup_load_info(st static int check_modinfo(struct module *mod, struct load_info *info, int flags) { @@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau if (flags & MODULE_INIT_IGNORE_VERMAGIC) modmagic = NULL; -@@ -3045,6 +3047,7 @@ static int check_modinfo(struct module * +@@ -3047,6 +3049,7 @@ static int check_modinfo(struct module * mod->name); add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK); } diff --git a/target/linux/generic/hack-4.14/250-netfilter_depends.patch b/target/linux/generic/hack-4.14/250-netfilter_depends.patch index a8fe5d4175..63b38093a8 100644 --- a/target/linux/generic/hack-4.14/250-netfilter_depends.patch +++ b/target/linux/generic/hack-4.14/250-netfilter_depends.patch @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau depends on NETFILTER_ADVANCED help H.323 is a VoIP signalling protocol from ITU-T. As one of the most -@@ -1052,7 +1051,6 @@ config NETFILTER_XT_TARGET_SECMARK +@@ -1064,7 +1063,6 @@ config NETFILTER_XT_TARGET_SECMARK config NETFILTER_XT_TARGET_TCPMSS tristate '"TCPMSS" target support' diff --git a/target/linux/generic/hack-4.14/650-netfilter-add-xt_OFFLOAD-target.patch b/target/linux/generic/hack-4.14/650-netfilter-add-xt_OFFLOAD-target.patch index 7c93feccdc..01a9290242 100644 --- a/target/linux/generic/hack-4.14/650-netfilter-add-xt_OFFLOAD-target.patch +++ b/target/linux/generic/hack-4.14/650-netfilter-add-xt_OFFLOAD-target.patch @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau help This option adds the flow table core infrastructure. -@@ -974,6 +973,15 @@ config NETFILTER_XT_TARGET_NOTRACK +@@ -986,6 +985,15 @@ config NETFILTER_XT_TARGET_NOTRACK depends on NETFILTER_ADVANCED select NETFILTER_XT_TARGET_CT @@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau +obj-$(CONFIG_NETFILTER_XT_TARGET_FLOWOFFLOAD) += xt_FLOWOFFLOAD.o obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o - obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o + obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o --- /dev/null +++ b/net/netfilter/xt_FLOWOFFLOAD.c @@ -0,0 +1,422 @@ diff --git a/target/linux/generic/hack-4.14/661-use_fq_codel_by_default.patch b/target/linux/generic/hack-4.14/661-use_fq_codel_by_default.patch index cf03b00f82..e4943fbaa3 100644 --- a/target/linux/generic/hack-4.14/661-use_fq_codel_by_default.patch +++ b/target/linux/generic/hack-4.14/661-use_fq_codel_by_default.patch @@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau EXPORT_SYMBOL(default_qdisc_ops); /* Main transmission queue. */ -@@ -764,7 +764,7 @@ static void attach_one_default_qdisc(str +@@ -772,7 +772,7 @@ static void attach_one_default_qdisc(str void *_unused) { struct Qdisc *qdisc; diff --git a/target/linux/generic/hack-4.14/662-remove_pfifo_fast.patch b/target/linux/generic/hack-4.14/662-remove_pfifo_fast.patch index 7b6e38da29..86feb04a49 100644 --- a/target/linux/generic/hack-4.14/662-remove_pfifo_fast.patch +++ b/target/linux/generic/hack-4.14/662-remove_pfifo_fast.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c -@@ -453,146 +453,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea +@@ -461,146 +461,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea .owner = THIS_MODULE, }; diff --git a/target/linux/generic/hack-4.14/702-phy_add_aneg_done_function.patch b/target/linux/generic/hack-4.14/702-phy_add_aneg_done_function.patch index cc84311ef9..5885c8fae6 100644 --- a/target/linux/generic/hack-4.14/702-phy_add_aneg_done_function.patch +++ b/target/linux/generic/hack-4.14/702-phy_add_aneg_done_function.patch @@ -1,6 +1,6 @@ --- a/include/linux/phy.h +++ b/include/linux/phy.h -@@ -547,6 +547,12 @@ struct phy_driver { +@@ -549,6 +549,12 @@ struct phy_driver { /* Determines the negotiated speed and duplex */ int (*read_status)(struct phy_device *phydev); @@ -15,7 +15,7 @@ --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c -@@ -1462,6 +1462,9 @@ int genphy_update_link(struct phy_device +@@ -1466,6 +1466,9 @@ int genphy_update_link(struct phy_device { int status; diff --git a/target/linux/generic/hack-4.14/721-phy_packets.patch b/target/linux/generic/hack-4.14/721-phy_packets.patch index 52910fceeb..ac0cee0b3d 100644 --- a/target/linux/generic/hack-4.14/721-phy_packets.patch +++ b/target/linux/generic/hack-4.14/721-phy_packets.patch @@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau */ --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -2532,6 +2532,10 @@ static inline int pskb_trim(struct sk_bu +@@ -2551,6 +2551,10 @@ static inline int pskb_trim(struct sk_bu return (len < skb->len) ? __pskb_trim(skb, len) : 0; } @@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau /** * pskb_trim_unique - remove end from a paged unique (not cloned) buffer * @skb: buffer to alter -@@ -2663,16 +2667,6 @@ static inline struct sk_buff *dev_alloc_ +@@ -2682,16 +2686,6 @@ static inline struct sk_buff *dev_alloc_ } @@ -101,8 +101,8 @@ Signed-off-by: Felix Fietkau help --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -3004,10 +3004,20 @@ static int xmit_one(struct sk_buff *skb, - if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) +@@ -3012,10 +3012,20 @@ static int xmit_one(struct sk_buff *skb, + #endif dev_queue_xmit_nit(skb, dev); - len = skb->len; @@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau #include #include -@@ -503,6 +504,22 @@ skb_fail: +@@ -584,6 +585,22 @@ skb_fail: } EXPORT_SYMBOL(__napi_alloc_skb); diff --git a/target/linux/generic/hack-4.14/902-debloat_proc.patch b/target/linux/generic/hack-4.14/902-debloat_proc.patch index 478a3ac632..b4562fc924 100644 --- a/target/linux/generic/hack-4.14/902-debloat_proc.patch +++ b/target/linux/generic/hack-4.14/902-debloat_proc.patch @@ -327,7 +327,7 @@ Signed-off-by: Felix Fietkau --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -3384,6 +3384,8 @@ static __net_initdata struct pernet_oper +@@ -3387,6 +3387,8 @@ static __net_initdata struct pernet_oper static int __init proto_init(void) { diff --git a/target/linux/generic/hack-4.14/952-net-conntrack-events-support-multiple-registrant.patch b/target/linux/generic/hack-4.14/952-net-conntrack-events-support-multiple-registrant.patch index f844328dbe..ac03195991 100644 --- a/target/linux/generic/hack-4.14/952-net-conntrack-events-support-multiple-registrant.patch +++ b/target/linux/generic/hack-4.14/952-net-conntrack-events-support-multiple-registrant.patch @@ -1,5 +1,3 @@ -diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h -index 12d967b..c2b98b6 100644 --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h @@ -71,6 +71,10 @@ struct nf_ct_event { @@ -67,8 +65,6 @@ index 12d967b..c2b98b6 100644 return nf_conntrack_eventmask_report(1 << event, ct, 0, 0); } -diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h -index e469e85..1d31db8 100644 --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h @@ -114,7 +114,11 @@ struct netns_ct { @@ -83,13 +79,11 @@ index e469e85..1d31db8 100644 struct nf_exp_event_notifier __rcu *nf_expect_event_cb; struct nf_ip_net nf_ct_proto; #if defined(CONFIG_NF_CONNTRACK_LABELS) -diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig -index 63073be..08d7aab 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig -@@ -118,6 +118,14 @@ config NF_CONNTRACK_EVENTS - - If unsure, say `N'. +@@ -136,6 +136,14 @@ config NF_CONNTRACK_RTCACHE + To compile it as a module, choose M here. If unsure, say N. + The module will be called nf_conntrack_rtcache. +config NF_CONNTRACK_CHAIN_EVENTS + bool "Register multiple callbacks to ct events" @@ -102,11 +96,9 @@ index 63073be..08d7aab 100644 config NF_CONNTRACK_TIMEOUT bool 'Connection tracking timeout' depends on NETFILTER_ADVANCED -diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c -index 6bd1508..9b81c7c 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -2167,6 +2167,10 @@ int nf_conntrack_init_net(struct net *ne +@@ -2249,6 +2249,10 @@ int nf_conntrack_init_net(struct net *ne ret = nf_conntrack_proto_pernet_init(net); if (ret < 0) goto err_proto; @@ -117,8 +109,6 @@ index 6bd1508..9b81c7c 100644 return 0; err_proto: -diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c -index da9df2d..e0e2a8f 100644 --- a/net/netfilter/nf_conntrack_ecache.c +++ b/net/netfilter/nf_conntrack_ecache.c @@ -18,6 +18,9 @@ @@ -268,8 +258,6 @@ index da9df2d..e0e2a8f 100644 EXPORT_SYMBOL_GPL(nf_conntrack_unregister_notifier); int nf_ct_expect_register_notifier(struct net *net, -diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c -index 04111c1..8c741f7 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -28,6 +28,11 @@ @@ -282,9 +270,9 @@ index 04111c1..8c741f7 100644 +#endif + #include + #include - #include -@@ -618,14 +623,22 @@ static size_t ctnetlink_nlmsg_size(const +@@ -621,14 +626,22 @@ static size_t ctnetlink_nlmsg_size(const ; } @@ -307,7 +295,7 @@ index 04111c1..8c741f7 100644 struct nf_conn *ct = item->ct; struct sk_buff *skb; unsigned int type; -@@ -3290,9 +3303,15 @@ static int ctnetlink_stat_exp_cpu(struct +@@ -3335,9 +3348,15 @@ static int ctnetlink_stat_exp_cpu(struct } #ifdef CONFIG_NF_CONNTRACK_EVENTS diff --git a/target/linux/generic/hack-4.14/953-use-nf_ct_helper_log.patch b/target/linux/generic/hack-4.14/953-use-nf_ct_helper_log.patch index 4e951b59be..e79a3136fe 100644 --- a/target/linux/generic/hack-4.14/953-use-nf_ct_helper_log.patch +++ b/target/linux/generic/hack-4.14/953-use-nf_ct_helper_log.patch @@ -1,5 +1,3 @@ -diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c -index c8ac57f..7f7d847 100644 --- a/net/ipv4/netfilter/nf_nat_snmp_basic.c +++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c @@ -1196,7 +1196,7 @@ static int snmp_translate(struct nf_conn diff --git a/target/linux/generic/pending-4.14/130-add-linux-spidev-compatible-si3210.patch b/target/linux/generic/pending-4.14/130-add-linux-spidev-compatible-si3210.patch index b00fb8ee2e..3a42182c97 100644 --- a/target/linux/generic/pending-4.14/130-add-linux-spidev-compatible-si3210.patch +++ b/target/linux/generic/pending-4.14/130-add-linux-spidev-compatible-si3210.patch @@ -8,7 +8,7 @@ Signed-off-by: Giuseppe Lippolis --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c -@@ -669,6 +669,7 @@ static const struct of_device_id spidev_ +@@ -672,6 +672,7 @@ static const struct of_device_id spidev_ { .compatible = "lineartechnology,ltc2488" }, { .compatible = "ge,achc" }, { .compatible = "semtech,sx1301" }, diff --git a/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch b/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch index 5e6cdcfee9..de0ebeea03 100644 --- a/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch +++ b/target/linux/generic/pending-4.14/601-add-kernel-imq-support.patch @@ -1,6 +1,6 @@ ---- a/drivers/net/Kconfig 2018-04-22 23:17:57.583718674 -0400 -+++ b/drivers/net/Kconfig 2018-04-22 23:20:39.331768961 -0400 -@@ -277,6 +277,125 @@ +--- a/drivers/net/Kconfig ++++ b/drivers/net/Kconfig +@@ -277,6 +277,125 @@ config RIONET_RX_SIZE depends on RIONET default "128" @@ -126,9 +126,9 @@ config TUN tristate "Universal TUN/TAP device driver support" depends on INET ---- a/drivers/net/Makefile 2018-04-22 23:17:57.583718674 -0400 -+++ b/drivers/net/Makefile 2018-04-22 23:20:39.411768985 -0400 -@@ -13,6 +13,7 @@ +--- a/drivers/net/Makefile ++++ b/drivers/net/Makefile +@@ -13,6 +13,7 @@ obj-$(CONFIG_DUMMY) += dummy.o obj-$(CONFIG_EQUALIZER) += eql.o obj-$(CONFIG_IFB) += ifb.o obj-$(CONFIG_MACSEC) += macsec.o @@ -136,8 +136,8 @@ obj-$(CONFIG_MACVLAN) += macvlan.o obj-$(CONFIG_MACVTAP) += macvtap.o obj-$(CONFIG_MII) += mii.o ---- /dev/null 2018-03-30 15:39:24.291451107 -0400 -+++ b/drivers/net/imq.c 2018-05-20 11:10:23.471713282 -0400 +--- /dev/null ++++ b/drivers/net/imq.c @@ -0,0 +1,1268 @@ +/* + * Pseudo-driver for the intermediate queue device. @@ -1407,8 +1407,8 @@ +MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See https://github.com/imq/linuximq/wiki for more information."); +MODULE_LICENSE("GPL"); +MODULE_ALIAS_RTNL_LINK("imq"); ---- /dev/null 2018-03-30 15:39:24.291451107 -0400 -+++ b/include/linux/imq.h 2018-04-22 23:20:39.411768985 -0400 +--- /dev/null ++++ b/include/linux/imq.h @@ -0,0 +1,13 @@ +#ifndef _IMQ_H +#define _IMQ_H @@ -1423,9 +1423,9 @@ + +#endif /* _IMQ_H */ + ---- a/include/linux/netdevice.h 2018-04-22 23:18:14.351723881 -0400 -+++ b/include/linux/netdevice.h 2018-04-22 23:20:39.411768985 -0400 -@@ -1785,6 +1785,11 @@ +--- a/include/linux/netdevice.h ++++ b/include/linux/netdevice.h +@@ -1779,6 +1779,11 @@ struct net_device { /* * Cache lines mostly used on receive path (including eth_type_trans()) */ @@ -1437,7 +1437,7 @@ /* Interface address info used in eth_type_trans() */ unsigned char *dev_addr; -@@ -3646,6 +3651,19 @@ +@@ -3667,6 +3672,19 @@ static inline void netif_tx_unlock_bh(st } \ } @@ -1457,8 +1457,8 @@ static inline void netif_tx_disable(struct net_device *dev) { unsigned int i; ---- /dev/null 2018-03-30 15:39:24.291451107 -0400 -+++ b/include/linux/netfilter/xt_IMQ.h 2018-04-22 23:20:39.415768987 -0400 +--- /dev/null ++++ b/include/linux/netfilter/xt_IMQ.h @@ -0,0 +1,9 @@ +#ifndef _XT_IMQ_H +#define _XT_IMQ_H @@ -1469,8 +1469,8 @@ + +#endif /* _XT_IMQ_H */ + ---- /dev/null 2018-03-30 15:39:24.291451107 -0400 -+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h 2018-04-22 23:20:39.415768987 -0400 +--- /dev/null ++++ b/include/linux/netfilter_ipv4/ipt_IMQ.h @@ -0,0 +1,10 @@ +#ifndef _IPT_IMQ_H +#define _IPT_IMQ_H @@ -1482,8 +1482,8 @@ + +#endif /* _IPT_IMQ_H */ + ---- /dev/null 2018-03-30 15:39:24.291451107 -0400 -+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h 2018-04-22 23:20:39.415768987 -0400 +--- /dev/null ++++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h @@ -0,0 +1,10 @@ +#ifndef _IP6T_IMQ_H +#define _IP6T_IMQ_H @@ -1495,8 +1495,8 @@ + +#endif /* _IP6T_IMQ_H */ + ---- a/include/linux/skbuff.h 2018-04-22 23:18:15.079724108 -0400 -+++ b/include/linux/skbuff.h 2018-04-22 23:20:39.415768987 -0400 +--- a/include/linux/skbuff.h ++++ b/include/linux/skbuff.h @@ -40,6 +40,10 @@ #include #include @@ -1508,7 +1508,7 @@ /* The interface for checksum offload between the stack and networking drivers * is as follows... -@@ -582,7 +586,7 @@ +@@ -582,7 +586,7 @@ typedef unsigned int sk_buff_data_t; typedef unsigned char *sk_buff_data_t; #endif @@ -1517,7 +1517,7 @@ * struct sk_buff - socket buffer * @next: Next buffer in list * @prev: Previous buffer in list -@@ -685,6 +689,9 @@ +@@ -691,6 +695,9 @@ struct sk_buff { * first. This is owned by whoever has the skb queued ATM. */ char cb[48] __aligned(8); @@ -1527,7 +1527,7 @@ unsigned long _skb_refdst; void (*destructor)(struct sk_buff *skb); -@@ -694,6 +701,9 @@ +@@ -700,6 +707,9 @@ struct sk_buff { #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) unsigned long _nfct; #endif @@ -1537,7 +1537,7 @@ #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) struct nf_bridge_info *nf_bridge; #endif -@@ -771,6 +781,9 @@ +@@ -776,6 +786,9 @@ struct sk_buff { #ifdef CONFIG_NET_SWITCHDEV __u8 offload_fwd_mark:1; #endif @@ -1547,7 +1547,7 @@ #ifdef CONFIG_NET_CLS_ACT __u8 tc_skip_classify:1; __u8 tc_at_ingress:1; -@@ -870,7 +883,7 @@ +@@ -874,7 +887,7 @@ static inline bool skb_pfmemalloc(const */ static inline struct dst_entry *skb_dst(const struct sk_buff *skb) { @@ -1556,7 +1556,7 @@ * rcu_read_lock section */ WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) && -@@ -960,6 +973,12 @@ +@@ -964,6 +977,12 @@ void skb_tx_error(struct sk_buff *skb); void consume_skb(struct sk_buff *skb); void __consume_stateless_skb(struct sk_buff *skb); void __kfree_skb(struct sk_buff *skb); @@ -1569,7 +1569,7 @@ extern struct kmem_cache *skbuff_head_cache; void kfree_skb_partial(struct sk_buff *skb, bool head_stolen); -@@ -3779,8 +3798,12 @@ +@@ -3847,8 +3866,12 @@ static inline void __nf_copy(struct sk_b dst->_nfct = src->_nfct; nf_conntrack_get(skb_nfct(src)); #endif @@ -1583,9 +1583,9 @@ nf_bridge_get(src->nf_bridge); #endif #if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES) ---- a/include/net/netfilter/nf_queue.h 2018-04-22 23:18:15.199724146 -0400 -+++ b/include/net/netfilter/nf_queue.h 2018-04-22 23:20:39.419768987 -0400 -@@ -31,6 +31,12 @@ +--- a/include/net/netfilter/nf_queue.h ++++ b/include/net/netfilter/nf_queue.h +@@ -31,6 +31,12 @@ struct nf_queue_handler { void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qh); void nf_unregister_queue_handler(struct net *net); void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict); @@ -1598,9 +1598,9 @@ void nf_queue_entry_get_refs(struct nf_queue_entry *entry); void nf_queue_entry_release_refs(struct nf_queue_entry *entry); ---- a/include/net/pkt_sched.h 2018-04-22 23:18:15.219724151 -0400 -+++ b/include/net/pkt_sched.h 2018-04-22 23:20:39.419768987 -0400 -@@ -109,6 +109,8 @@ +--- a/include/net/pkt_sched.h ++++ b/include/net/pkt_sched.h +@@ -109,6 +109,8 @@ int sch_direct_xmit(struct sk_buff *skb, void __qdisc_run(struct Qdisc *q); @@ -1609,9 +1609,9 @@ static inline void qdisc_run(struct Qdisc *q) { if (qdisc_run_begin(q)) ---- a/include/net/sch_generic.h 2018-04-22 23:18:15.227724154 -0400 -+++ b/include/net/sch_generic.h 2018-04-22 23:20:39.419768987 -0400 -@@ -567,6 +567,13 @@ +--- a/include/net/sch_generic.h ++++ b/include/net/sch_generic.h +@@ -571,6 +571,13 @@ static inline int qdisc_enqueue(struct s return sch->enqueue(skb, sch, to_free); } @@ -1625,8 +1625,8 @@ static inline bool qdisc_is_percpu_stats(const struct Qdisc *q) { return q->flags & TCQ_F_CPUSTATS; ---- a/include/uapi/linux/netfilter.h 2018-04-22 23:18:16.159724442 -0400 -+++ b/include/uapi/linux/netfilter.h 2018-04-22 23:20:39.419768987 -0400 +--- a/include/uapi/linux/netfilter.h ++++ b/include/uapi/linux/netfilter.h @@ -14,7 +14,8 @@ #define NF_QUEUE 3 #define NF_REPEAT 4 @@ -1637,8 +1637,8 @@ /* we overload the higher bits for encoding auxiliary data such as the queue * number or errno values. Not nice, but better than additional function ---- a/net/core/dev.c 2018-04-22 23:18:24.391727000 -0400 -+++ b/net/core/dev.c 2018-04-22 23:20:39.419768987 -0400 +--- a/net/core/dev.c ++++ b/net/core/dev.c @@ -143,6 +143,9 @@ #include #include @@ -1649,7 +1649,7 @@ #include #include -@@ -2979,7 +2982,12 @@ +@@ -3001,7 +3004,12 @@ static int xmit_one(struct sk_buff *skb, unsigned int len; int rc; @@ -1661,8 +1661,8 @@ +#endif dev_queue_xmit_nit(skb, dev); - #ifdef CONFIG_ETHERNET_PACKET_MANGLE -@@ -3028,6 +3036,8 @@ + len = skb->len; +@@ -3040,6 +3048,8 @@ out: return skb; } @@ -1671,9 +1671,9 @@ static struct sk_buff *validate_xmit_vlan(struct sk_buff *skb, netdev_features_t features) { ---- a/net/core/skbuff.c 2018-04-22 23:18:24.395727003 -0400 -+++ b/net/core/skbuff.c 2018-04-22 23:20:39.419768987 -0400 -@@ -82,6 +82,87 @@ +--- a/net/core/skbuff.c ++++ b/net/core/skbuff.c +@@ -81,6 +81,87 @@ struct kmem_cache *skbuff_head_cache __r static struct kmem_cache *skbuff_fclone_cache __read_mostly; int sysctl_max_skb_frags __read_mostly = MAX_SKB_FRAGS; EXPORT_SYMBOL(sysctl_max_skb_frags); @@ -1761,7 +1761,7 @@ /** * skb_panic - private function for out-of-line support -@@ -628,6 +709,28 @@ +@@ -615,6 +696,28 @@ void skb_release_head_state(struct sk_bu WARN_ON(in_irq()); skb->destructor(skb); } @@ -1790,7 +1790,7 @@ #if IS_ENABLED(CONFIG_NF_CONNTRACK) nf_conntrack_put(skb_nfct(skb)); #endif -@@ -817,6 +920,10 @@ +@@ -804,6 +907,10 @@ static void __copy_skb_header(struct sk_ new->sp = secpath_get(old->sp); #endif __nf_copy(new, old, false); @@ -1801,7 +1801,7 @@ /* Note : this field could be in headers_start/headers_end section * It is not yet because we do not want to have a 16 bit hole -@@ -3915,6 +4022,13 @@ +@@ -3943,6 +4050,13 @@ void __init skb_init(void) 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); @@ -1815,9 +1815,9 @@ } static int ---- a/net/netfilter/core.c 2018-04-22 23:18:26.019727507 -0400 -+++ b/net/netfilter/core.c 2018-04-22 23:20:39.419768987 -0400 -@@ -457,6 +457,11 @@ +--- a/net/netfilter/core.c ++++ b/net/netfilter/core.c +@@ -490,6 +490,11 @@ int nf_hook_slow(struct sk_buff *skb, st if (ret == 0) ret = -EPERM; return ret; @@ -1829,9 +1829,9 @@ case NF_QUEUE: ret = nf_queue(skb, state, e, s, verdict); if (ret == 1) ---- a/net/netfilter/Kconfig 2018-04-22 23:18:25.751727424 -0400 -+++ b/net/netfilter/Kconfig 2018-04-22 23:20:39.419768987 -0400 -@@ -902,6 +902,18 @@ +--- a/net/netfilter/Kconfig ++++ b/net/netfilter/Kconfig +@@ -910,6 +910,18 @@ config NETFILTER_XT_TARGET_LOG To compile it as a module, choose M here. If unsure, say N. @@ -1850,18 +1850,18 @@ config NETFILTER_XT_TARGET_MARK tristate '"MARK" target support' depends on NETFILTER_ADVANCED ---- a/net/netfilter/Makefile 2018-04-22 23:18:25.711727410 -0400 -+++ b/net/netfilter/Makefile 2018-04-22 23:20:39.423768990 -0400 -@@ -136,6 +136,7 @@ - obj-$(CONFIG_NETFILTER_XT_TARGET_FLOWOFFLOAD) += xt_FLOWOFFLOAD.o +--- a/net/netfilter/Makefile ++++ b/net/netfilter/Makefile +@@ -135,6 +135,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += + obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o +obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o ---- a/net/netfilter/nf_queue.c 2018-04-22 23:18:25.699727407 -0400 -+++ b/net/netfilter/nf_queue.c 2018-04-22 23:22:59.395812579 -0400 +--- a/net/netfilter/nf_queue.c ++++ b/net/netfilter/nf_queue.c @@ -1,4 +1,4 @@ -/* + /* @@ -1892,7 +1892,7 @@ /* return EBUSY when somebody else is registered, return EEXIST if the * same handler is registered, return 0 in case of success. */ void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qh) -@@ -144,16 +161,29 @@ +@@ -141,16 +158,29 @@ static void nf_ip6_saveroute(const struc static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state, const struct nf_hook_entries *entries, @@ -1924,7 +1924,7 @@ if (!qh) { status = -ESRCH; goto err; -@@ -217,8 +248,16 @@ +@@ -218,8 +248,16 @@ int nf_queue(struct sk_buff *skb, struct { int ret; @@ -1942,7 +1942,7 @@ if (ret == -ESRCH && (verdict & NF_VERDICT_FLAG_QUEUE_BYPASS)) return 1; -@@ -302,6 +341,7 @@ +@@ -323,6 +361,7 @@ next_hook: local_bh_enable(); break; case NF_QUEUE: @@ -1950,8 +1950,8 @@ err = nf_queue(skb, &entry->state, hooks, i, verdict); if (err == 1) goto next_hook; ---- /dev/null 2018-03-30 15:39:24.291451107 -0400 -+++ b/net/netfilter/xt_IMQ.c 2018-04-22 23:20:39.423768990 -0400 +--- /dev/null ++++ b/net/netfilter/xt_IMQ.c @@ -0,0 +1,72 @@ +/* + * This target marks packets to be enqueued to an imq device @@ -2025,9 +2025,9 @@ +MODULE_ALIAS("ipt_IMQ"); +MODULE_ALIAS("ip6t_IMQ"); + ---- a/net/sched/sch_generic.c 2018-04-22 23:18:26.623727693 -0400 -+++ b/net/sched/sch_generic.c 2018-04-22 23:20:39.423768990 -0400 -@@ -158,6 +158,14 @@ +--- a/net/sched/sch_generic.c ++++ b/net/sched/sch_generic.c +@@ -158,6 +158,14 @@ trace: return skb; } diff --git a/target/linux/generic/pending-4.14/607-tcp_bbr-adapt-cwnd-based-on-ack-aggregation-estimation.patch b/target/linux/generic/pending-4.14/607-tcp_bbr-adapt-cwnd-based-on-ack-aggregation-estimation.patch index ab8b3a4b18..30a9705338 100644 --- a/target/linux/generic/pending-4.14/607-tcp_bbr-adapt-cwnd-based-on-ack-aggregation-estimation.patch +++ b/target/linux/generic/pending-4.14/607-tcp_bbr-adapt-cwnd-based-on-ack-aggregation-estimation.patch @@ -15,21 +15,24 @@ Signed-off-by: Neal Cardwell Signed-off-by: Yuchung Cheng Signed-off-by: David S. Miller --- -diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h -@@ -138,4 +138,4 @@ +@@ -136,8 +136,8 @@ struct inet_connection_sock { + } icsk_mtup; + u32 icsk_user_timeout; - u64 icsk_ca_priv[88 / sizeof(u64)]; -#define ICSK_CA_PRIV_SIZE (11 * sizeof(u64)) + u64 icsk_ca_priv[104 / sizeof(u64)]; +#define ICSK_CA_PRIV_SIZE (13 * sizeof(u64)) }; - -diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c + + #define ICSK_TIME_RETRANS 1 /* Retransmit timer */ --- a/net/ipv4/tcp_bbr.c +++ b/net/ipv4/tcp_bbr.c -@@ -97,8 +97,6 @@ +@@ -95,12 +95,10 @@ struct bbr { + u32 mode:3, /* current bbr_mode in state machine */ + prev_ca_state:3, /* CA state on previous ACK */ packet_conservation:1, /* use packet conservation? */ - restore_cwnd:1, /* decided to revert cwnd to old value */ round_start:1, /* start of packet-timed tx->ack round? */ @@ -39,7 +42,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - unused:5, + unused:13, lt_is_sampling:1, /* taking long-term ("LT") samples now? */ -@@ -119,2 +117,10 @@ + lt_rtt_cnt:7, /* round trips in long-term interval */ + lt_use_bw:1; /* use lt_bw as our bw estimate? */ +@@ -117,6 +115,14 @@ struct bbr { + unused_b:5; + u32 prior_cwnd; /* prior cwnd upon entering loss recovery */ u32 full_bw; /* recent bw, to estimate if pipe is full */ + + /* For tracking ACK aggregation: */ @@ -50,7 +57,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c + extra_acked_win_idx:1, /* current index in extra_acked array */ + unused_c:6; }; -@@ -178,2 +184,13 @@ + + #define CYCLE_LEN 8 /* number of phases in a pacing gain cycle */ +@@ -176,6 +182,17 @@ static const u32 bbr_lt_bw_diff = 4000 / + /* If we estimate we're policed, use lt_bw for this many round trips: */ + static const u32 bbr_lt_bw_max_rtts = 48; +/* Gain factor for adding extra_acked to target cwnd: */ +static const int bbr_extra_acked_gain = BBR_UNIT; @@ -64,7 +75,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c +static void bbr_check_probe_rtt_done(struct sock *sk); + /* Do we estimate that STARTUP filled the pipe? */ -@@ -202,2 +219,12 @@ + static bool bbr_full_bw_reached(const struct sock *sk) + { +@@ -200,13 +217,31 @@ static u32 bbr_bw(const struct sock *sk) + return bbr->lt_use_bw ? bbr->lt_bw : bbr_max_bw(sk); + } +/* Return maximum extra acked in past k-2k round trips, + * where k = bbr_extra_acked_win_rtts. @@ -77,7 +92,8 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c +} + /* Return rate in bytes per second, optionally with a gain. -@@ -206,5 +233,13 @@ + * The order here is chosen carefully to avoid overflow of u64. This should + * work for input rates of up to 2.9Tbit/sec and gain of 2.89x. */ +static bool tcp_needs_internal_pacing(const struct sock *sk) +{ @@ -92,7 +108,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c + mss = tcp_mss_to_mtu(sk, mss); + rate *= mss; rate *= gain; -@@ -263,19 +298,21 @@ + rate >>= BBR_SCALE; + rate *= USEC_PER_SEC; +@@ -261,23 +296,25 @@ static void bbr_set_pacing_rate(struct s + sk->sk_pacing_rate = rate; + } -/* Return count of segments we want in the skbs we send, or 0 for default. */ -static u32 bbr_tso_segs_goal(struct sock *sk) @@ -112,30 +132,36 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - struct bbr *bbr = inet_csk_ca(sk); - u32 min_segs; + u32 segs, bytes; - -- min_segs = sk->sk_pacing_rate < (bbr_min_tso_rate >> 3) ? 1 : 2; -- bbr->tso_segs_goal = min(tcp_tso_autosize(sk, tp->mss_cache, min_segs), -- 0x7FU); ++ + /* Sort of tcp_tso_autosize() but ignoring + * driver provided sk_gso_max_size. + */ + bytes = min_t(u32, sk->sk_pacing_rate >> sk->sk_pacing_shift, + GSO_MAX_SIZE - 1 - MAX_TCP_HEADER); + segs = max_t(u32, bytes / tp->mss_cache, bbr_min_tso_segs(sk)); -+ + +- min_segs = sk->sk_pacing_rate < (bbr_min_tso_rate >> 3) ? 1 : 2; +- bbr->tso_segs_goal = min(tcp_tso_autosize(sk, tp->mss_cache, min_segs), +- 0x7FU); + return min(segs, 0x7FU); } -@@ -301,2 +338,4 @@ + + /* Save "last known good" cwnd so we can restore it after losses or PROBE_RTT */ +@@ -299,38 +336,31 @@ static void bbr_cwnd_event(struct sock * + + if (event == CA_EVENT_TX_START && tp->app_limited) { bbr->idle_restart = 1; + bbr->ack_epoch_mstamp = tp->tcp_mstamp; + bbr->ack_epoch_acked = 0; /* Avoid pointless buffer overflows: pace at est. bw if we don't -@@ -306,2 +345,4 @@ + * need more speed (we're restarting from idle and app-limited). + */ + if (bbr->mode == BBR_PROBE_BW) bbr_set_pacing_rate(sk, bbr_bw(sk), BBR_UNIT); + else if (bbr->mode == BBR_PROBE_RTT) + bbr_check_probe_rtt_done(sk); } -@@ -309,6 +350,5 @@ + } -/* Find target cwnd. Right-size the cwnd based on min RTT and the - * estimated bottleneck bandwidth: @@ -144,7 +170,9 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - * cwnd = bw * min_rtt * gain = BDP * gain + * bdp = bw * min_rtt * gain * -@@ -318,17 +358,7 @@ + * The key factor, gain, controls the amount of queue. While a small gain + * builds a smaller queue, it becomes more vulnerable to noise in RTT + * measurements (e.g., delayed ACKs or other ACK compression effects). This * noise may cause BBR to under-estimate the rate. - * - * To achieve full performance in high-speed paths, we budget enough cwnd to @@ -164,7 +192,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - u32 cwnd; + u32 bdp; u64 w; -@@ -347,6 +377,23 @@ + + /* If we've never had a valid RTT sample, cap cwnd at the initial +@@ -345,21 +375,65 @@ static u32 bbr_target_cwnd(struct sock * + w = (u64)bw * bbr->min_rtt_us; + /* Apply a gain to the given value, then remove the BW_SCALE shift. */ - cwnd = (((w * gain) >> BBR_SCALE) + BW_UNIT - 1) / BW_UNIT; + bdp = (((w * gain) >> BBR_SCALE) + BW_UNIT - 1) / BW_UNIT; @@ -190,12 +222,16 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - cwnd += 3 * bbr->tso_segs_goal; + cwnd += 3 * bbr_tso_segs_goal(sk); -@@ -356,3 +403,3 @@ + /* Reduce delayed ACKs by rounding up cwnd to the next even number. */ + cwnd = (cwnd + 1) & ~1U; + /* Ensure gain cycling gets inflight above BDP even for small BDPs. */ - if (bbr->mode == BBR_PROBE_BW && gain > BBR_UNIT) + if (bbr->mode == BBR_PROBE_BW && bbr->cycle_idx == 0) cwnd += 2; -@@ -362,2 +409,29 @@ + + return cwnd; + } +/* Find inflight based on min RTT and the estimated bottleneck bandwidth. */ +static u32 bbr_inflight(struct sock *sk, u32 bw, int gain) @@ -225,12 +261,17 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c +} + /* An optimization in BBR to reduce losses: On the first round of recovery, we -@@ -393,3 +467,3 @@ + * follow the packet conservation principle: send P packets per P packets acked. + * After that, we slow-start and send at most 2*P packets per P packets acked. +@@ -391,17 +465,11 @@ static bool bbr_set_cwnd_to_recover_or_r + cwnd = tcp_packets_in_flight(tp) + acked; + } else if (prev_state >= TCP_CA_Recovery && state < TCP_CA_Recovery) { /* Exiting loss recovery; restore cwnd saved before recovery. */ - bbr->restore_cwnd = 1; + cwnd = max(cwnd, bbr->prior_cwnd); bbr->packet_conservation = 0; -@@ -398,8 +472,2 @@ + } + bbr->prev_ca_state = state; - if (bbr->restore_cwnd) { - /* Restore cwnd after exiting loss recovery or PROBE_RTT. */ @@ -239,7 +280,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - } - if (bbr->packet_conservation) { -@@ -420,6 +488,6 @@ + *new_cwnd = max(cwnd, tcp_packets_in_flight(tp) + acked); + return true; /* yes, using packet conservation */ +@@ -418,16 +486,23 @@ static void bbr_set_cwnd(struct sock *sk + { + struct tcp_sock *tp = tcp_sk(sk); struct bbr *bbr = inet_csk_ca(sk); - u32 cwnd = 0, target_cwnd = 0; + u32 cwnd = tp->snd_cwnd, target_cwnd = 0; @@ -248,7 +293,8 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c - return; + goto done; /* no packet fully ACKed; just apply caps */ -@@ -428,4 +496,11 @@ + if (bbr_set_cwnd_to_recover_or_restore(sk, rs, acked, &cwnd)) + goto done; + target_cwnd = bbr_bdp(sk, bw, gain); + @@ -261,32 +307,55 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c /* If we're below target cwnd, slow start cwnd toward target cwnd. */ - target_cwnd = bbr_target_cwnd(sk, bw, gain); if (bbr_full_bw_reached(sk)) /* only cut cwnd if we filled the pipe */ -@@ -470,3 +545,3 @@ + cwnd = min(cwnd + acked, target_cwnd); + else if (cwnd < target_cwnd || tp->delivered < TCP_INIT_CWND) +@@ -468,14 +543,14 @@ static bool bbr_is_next_cycle_phase(stru + if (bbr->pacing_gain > BBR_UNIT) + return is_full_length && (rs->losses || /* perhaps pacing_gain*BDP won't fit */ - inflight >= bbr_target_cwnd(sk, bw, bbr->pacing_gain)); + inflight >= bbr_inflight(sk, bw, bbr->pacing_gain)); -@@ -477,3 +552,3 @@ + /* A pacing_gain < 1.0 tries to drain extra queue we added if bw + * probing didn't find more bw. If inflight falls to match BDP then we + * estimate queue is drained; persisting would underutilize the pipe. + */ return is_full_length || - inflight <= bbr_target_cwnd(sk, bw, BBR_UNIT); + inflight <= bbr_inflight(sk, bw, BBR_UNIT); } -@@ -487,4 +562,2 @@ + + static void bbr_advance_cycle_phase(struct sock *sk) +@@ -485,8 +560,6 @@ static void bbr_advance_cycle_phase(stru + + bbr->cycle_idx = (bbr->cycle_idx + 1) & (CYCLE_LEN - 1); bbr->cycle_mstamp = tp->delivered_mstamp; - bbr->pacing_gain = bbr->lt_use_bw ? BBR_UNIT : - bbr_pacing_gain[bbr->cycle_idx]; } -@@ -506,4 +579,2 @@ + + /* Gain cycling: cycle pacing gain to converge to fair share of available bw. */ +@@ -504,8 +577,6 @@ static void bbr_reset_startup_mode(struc + struct bbr *bbr = inet_csk_ca(sk); + bbr->mode = BBR_STARTUP; - bbr->pacing_gain = bbr_high_gain; - bbr->cwnd_gain = bbr_high_gain; } -@@ -515,4 +586,2 @@ + + static void bbr_reset_probe_bw_mode(struct sock *sk) +@@ -513,8 +584,6 @@ static void bbr_reset_probe_bw_mode(stru + struct bbr *bbr = inet_csk_ca(sk); + bbr->mode = BBR_PROBE_BW; - bbr->pacing_gain = BBR_UNIT; - bbr->cwnd_gain = bbr_cwnd_gain; bbr->cycle_idx = CYCLE_LEN - 1 - prandom_u32_max(bbr_cycle_rand); -@@ -700,2 +768,63 @@ + bbr_advance_cycle_phase(sk); /* flip to next phase of gain cycle */ + } +@@ -697,6 +766,67 @@ static void bbr_update_bw(struct sock *s + } + } +/* Estimates the windowed max degree of ack aggregation. + * This is used to provision extra in-flight data to keep sending during @@ -350,19 +419,23 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c +} + /* Estimate when the pipe is full, using the change in delivery rate: BBR -@@ -734,4 +863,4 @@ + * estimates that STARTUP filled the pipe if the estimated bw hasn't changed by + * at least bbr_full_bw_thresh (25%) after bbr_full_bw_cnt (3) non-app-limited +@@ -731,15 +861,29 @@ static void bbr_check_drain(struct sock + + if (bbr->mode == BBR_STARTUP && bbr_full_bw_reached(sk)) { bbr->mode = BBR_DRAIN; /* drain queue we created */ - bbr->pacing_gain = bbr_drain_gain; /* pace slow to drain */ - bbr->cwnd_gain = bbr_high_gain; /* maintain cwnd */ + tcp_sk(sk)->snd_ssthresh = + bbr_inflight(sk, bbr_max_bw(sk), BBR_UNIT); } /* fall through to check if in-flight is already small: */ -@@ -739,3 +868,3 @@ + if (bbr->mode == BBR_DRAIN && tcp_packets_in_flight(tcp_sk(sk)) <= - bbr_target_cwnd(sk, bbr_max_bw(sk), BBR_UNIT)) + bbr_inflight(sk, bbr_max_bw(sk), BBR_UNIT)) bbr_reset_probe_bw_mode(sk); /* we estimate queue is drained */ -@@ -743,2 +872,16 @@ + } +static void bbr_check_probe_rtt_done(struct sock *sk) +{ @@ -379,18 +452,30 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c +} + /* The goal of PROBE_RTT mode is to have BBR flows cooperatively and -@@ -772,3 +915,4 @@ + * periodically drain the bottleneck queue, to converge to measure the true + * min_rtt (unloaded propagation delay). This allows the flows to keep queues +@@ -769,7 +913,8 @@ static void bbr_update_min_rtt(struct so + filter_expired = after(tcp_jiffies32, + bbr->min_rtt_stamp + bbr_min_rtt_win_sec * HZ); if (rs->rtt_us >= 0 && - (rs->rtt_us <= bbr->min_rtt_us || filter_expired)) { + (rs->rtt_us <= bbr->min_rtt_us || + (filter_expired && !rs->is_ack_delayed))) { bbr->min_rtt_us = rs->rtt_us; -@@ -780,4 +924,2 @@ + bbr->min_rtt_stamp = tcp_jiffies32; + } +@@ -777,8 +922,6 @@ static void bbr_update_min_rtt(struct so + if (bbr_probe_rtt_mode_ms > 0 && filter_expired && + !bbr->idle_restart && bbr->mode != BBR_PROBE_RTT) { bbr->mode = BBR_PROBE_RTT; /* dip, drain queue */ - bbr->pacing_gain = BBR_UNIT; - bbr->cwnd_gain = BBR_UNIT; bbr_save_cwnd(sk); /* note cwnd so we can restore it */ -@@ -800,8 +942,4 @@ + bbr->probe_rtt_done_stamp = 0; + } +@@ -797,12 +940,8 @@ static void bbr_update_min_rtt(struct so + } else if (bbr->probe_rtt_done_stamp) { + if (bbr->round_start) bbr->probe_rtt_round_done = 1; - if (bbr->probe_rtt_round_done && - after(tcp_jiffies32, bbr->probe_rtt_done_stamp)) { @@ -401,7 +486,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c + if (bbr->probe_rtt_round_done) + bbr_check_probe_rtt_done(sk); } -@@ -813,2 +951,31 @@ + } + /* Restart after idle ends only once we process a new S/ACK for data */ +@@ -810,13 +949,44 @@ static void bbr_update_min_rtt(struct so + bbr->idle_restart = 0; + } +static void bbr_update_gains(struct sock *sk) +{ @@ -433,28 +522,45 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c +} + static void bbr_update_model(struct sock *sk, const struct rate_sample *rs) -@@ -816,2 +983,3 @@ + { bbr_update_bw(sk, rs); + bbr_update_ack_aggregation(sk, rs); bbr_update_cycle_phase(sk, rs); -@@ -820,2 +988,3 @@ + bbr_check_full_bw_reached(sk, rs); + bbr_check_drain(sk, rs); bbr_update_min_rtt(sk, rs); + bbr_update_gains(sk); } -@@ -831,3 +1000,2 @@ + + static void bbr_main(struct sock *sk, const struct rate_sample *rs) +@@ -828,7 +998,6 @@ static void bbr_main(struct sock *sk, co + + bw = bbr_bw(sk); bbr_set_pacing_rate(sk, bw, bbr->pacing_gain); - bbr_set_tso_segs_goal(sk); bbr_set_cwnd(sk, rs, rs->acked_sacked, bw, bbr->cwnd_gain); -@@ -841,3 +1009,3 @@ + } + +@@ -838,7 +1007,7 @@ static void bbr_init(struct sock *sk) + struct bbr *bbr = inet_csk_ca(sk); + bbr->prior_cwnd = 0; - bbr->tso_segs_goal = 0; /* default segs per skb until first ACK */ + tp->snd_ssthresh = TCP_INFINITE_SSTHRESH; bbr->rtt_cnt = 0; -@@ -857,3 +1025,2 @@ + bbr->next_rtt_delivered = 0; + bbr->prev_ca_state = TCP_CA_Open; +@@ -854,7 +1023,6 @@ static void bbr_init(struct sock *sk) + bbr->has_seen_rtt = 0; + bbr_init_pacing_rate_from_rtt(sk); - bbr->restore_cwnd = 0; bbr->round_start = 0; -@@ -868,2 +1035,9 @@ + bbr->idle_restart = 0; + bbr->full_bw_reached = 0; +@@ -865,6 +1033,13 @@ static void bbr_init(struct sock *sk) + bbr_reset_lt_bw_sampling(sk); + bbr_reset_startup_mode(sk); + bbr->ack_epoch_mstamp = tp->tcp_mstamp; + bbr->ack_epoch_acked = 0; @@ -464,27 +570,42 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c + bbr->extra_acked[1] = 0; + cmpxchg(&sk->sk_pacing_status, SK_PACING_NONE, SK_PACING_NEEDED); -@@ -894,3 +1068,3 @@ + } + +@@ -891,7 +1066,7 @@ static u32 bbr_undo_cwnd(struct sock *sk + static u32 bbr_ssthresh(struct sock *sk) + { bbr_save_cwnd(sk); - return TCP_INFINITE_SSTHRESH; /* BBR does not use ssthresh */ + return tcp_sk(sk)->snd_ssthresh; } -@@ -943,3 +1117,3 @@ + + static size_t bbr_get_info(struct sock *sk, u32 ext, int *attr, +@@ -940,7 +1115,7 @@ static struct tcp_congestion_ops tcp_bbr + .undo_cwnd = bbr_undo_cwnd, + .cwnd_event = bbr_cwnd_event, .ssthresh = bbr_ssthresh, - .tso_segs_goal = bbr_tso_segs_goal, + .min_tso_segs = bbr_min_tso_segs, .get_info = bbr_get_info, - -diff --git a/include/net/tcp.h b/include/net/tcp.h + .set_state = bbr_set_state, + }; --- a/include/net/tcp.h +++ b/include/net/tcp.h -@@ -1000,2 +1000,3 @@ +@@ -998,6 +998,7 @@ struct rate_sample { + u32 prior_in_flight; /* in flight before this ACK */ + bool is_app_limited; /* is sample from packet with bubble in pipe? */ bool is_retrans; /* is sample from retransmission? */ + bool is_ack_delayed; /* is this (likely) a delayed ACK? */ }; -@@ -1026,2 +1027,4 @@ + + struct tcp_congestion_ops { +@@ -1024,6 +1025,8 @@ struct tcp_congestion_ops { + u32 (*undo_cwnd)(struct sock *sk); + /* hook for packet ack accounting (optional) */ void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample); + /* override sysctl_tcp_min_tso_segs */ + u32 (*min_tso_segs)(struct sock *sk); /* suggest number of segments for each skb to transmit (optional) */ - + u32 (*tso_segs_goal)(struct sock *sk); + /* returns the multiplier used in tcp_sndbuf_expand (optional) */ diff --git a/target/linux/generic/pending-4.14/608-add-kernel-gargoyle-netfilter-match-modules.patch b/target/linux/generic/pending-4.14/608-add-kernel-gargoyle-netfilter-match-modules.patch index 7fb6078ac8..8d96eaf03c 100644 --- a/target/linux/generic/pending-4.14/608-add-kernel-gargoyle-netfilter-match-modules.patch +++ b/target/linux/generic/pending-4.14/608-add-kernel-gargoyle-netfilter-match-modules.patch @@ -269,7 +269,7 @@ +#endif /*_IPT_WEBURL_H*/ --- a/net/ipv4/netfilter/Kconfig +++ b/net/ipv4/netfilter/Kconfig -@@ -417,5 +417,25 @@ config IP_NF_ARP_MANGLE +@@ -430,5 +430,25 @@ config IP_NF_ARP_MANGLE endif # IP_NF_ARPTABLES @@ -297,7 +297,7 @@ --- a/net/ipv4/netfilter/Makefile +++ b/net/ipv4/netfilter/Makefile -@@ -55,6 +55,10 @@ obj-$(CONFIG_IP_NF_RAW) += iptable_raw.o +@@ -57,6 +57,10 @@ obj-$(CONFIG_IP_NF_RAW) += iptable_raw.o obj-$(CONFIG_IP_NF_SECURITY) += iptable_security.o # matches @@ -3908,7 +3908,6 @@ +module_init(init); +module_exit(fini); + - --- /dev/null +++ b/net/ipv4/netfilter/ipt_bandwidth.mod.c @@ -0,0 +1,20 @@ @@ -4077,7 +4076,6 @@ +module_init(init); +module_exit(fini); + - --- /dev/null +++ b/net/ipv4/netfilter/ipt_timerange.mod.c @@ -0,0 +1,20 @@ @@ -5423,7 +5421,6 @@ + +module_init(init); +module_exit(fini); - --- /dev/null +++ b/net/ipv4/netfilter/ipt_weburl.c @@ -0,0 +1,537 @@ @@ -5964,7 +5961,6 @@ + +module_init(init); +module_exit(fini); - --- /dev/null +++ b/net/ipv4/netfilter/ipt_weburl.mod.c @@ -0,0 +1,20 @@ diff --git a/target/linux/generic/pending-4.14/630-packet_socket_type.patch b/target/linux/generic/pending-4.14/630-packet_socket_type.patch index a4737b23ef..338e43f25d 100644 --- a/target/linux/generic/pending-4.14/630-packet_socket_type.patch +++ b/target/linux/generic/pending-4.14/630-packet_socket_type.patch @@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau if (!net_eq(dev_net(dev), sock_net(sk))) goto drop; -@@ -3301,6 +3303,7 @@ static int packet_create(struct net *net +@@ -3302,6 +3304,7 @@ static int packet_create(struct net *net mutex_init(&po->pg_vec_lock); po->rollover = NULL; po->prot_hook.func = packet_rcv; @@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau if (sock->type == SOCK_PACKET) po->prot_hook.func = packet_rcv_spkt; -@@ -3923,6 +3926,16 @@ packet_setsockopt(struct socket *sock, i +@@ -3924,6 +3927,16 @@ packet_setsockopt(struct socket *sock, i po->xmit = val ? packet_direct_xmit : dev_queue_xmit; return 0; } @@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau default: return -ENOPROTOOPT; } -@@ -3975,6 +3988,13 @@ static int packet_getsockopt(struct sock +@@ -3976,6 +3989,13 @@ static int packet_getsockopt(struct sock case PACKET_VNET_HDR: val = po->has_vnet_hdr; break; diff --git a/target/linux/generic/pending-4.14/655-increase_skb_pad.patch b/target/linux/generic/pending-4.14/655-increase_skb_pad.patch index fa47fe62a8..e53ff6e25c 100644 --- a/target/linux/generic/pending-4.14/655-increase_skb_pad.patch +++ b/target/linux/generic/pending-4.14/655-increase_skb_pad.patch @@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -2496,7 +2496,7 @@ static inline int pskb_network_may_pull( +@@ -2515,7 +2515,7 @@ static inline int pskb_network_may_pull( * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) */ #ifndef NET_SKB_PAD diff --git a/target/linux/generic/pending-4.14/680-NET-skip-GRO-for-foreign-MAC-addresses.patch b/target/linux/generic/pending-4.14/680-NET-skip-GRO-for-foreign-MAC-addresses.patch index 067de75f3c..245ef291ed 100644 --- a/target/linux/generic/pending-4.14/680-NET-skip-GRO-for-foreign-MAC-addresses.patch +++ b/target/linux/generic/pending-4.14/680-NET-skip-GRO-for-foreign-MAC-addresses.patch @@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau #endif --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -782,6 +782,7 @@ struct sk_buff { +@@ -795,6 +795,7 @@ struct sk_buff { __u8 tc_redirected:1; __u8 tc_from_ingress:1; #endif @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau __u16 tc_index; /* traffic control index */ --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4805,6 +4805,9 @@ static enum gro_result dev_gro_receive(s +@@ -4815,6 +4815,9 @@ static enum gro_result dev_gro_receive(s enum gro_result ret; int grow; @@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau if (netif_elide_gro(skb->dev)) goto normal; -@@ -6282,6 +6285,48 @@ static void __netdev_adjacent_dev_unlink +@@ -6292,6 +6295,48 @@ static void __netdev_adjacent_dev_unlink &upper_dev->adj_list.lower); } @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau static int __netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev, bool master, void *upper_priv, void *upper_info) -@@ -6320,6 +6365,7 @@ static int __netdev_upper_dev_link(struc +@@ -6330,6 +6375,7 @@ static int __netdev_upper_dev_link(struc if (ret) return ret; @@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, &changeupper_info.info); ret = notifier_to_errno(ret); -@@ -6397,6 +6443,7 @@ void netdev_upper_dev_unlink(struct net_ +@@ -6407,6 +6453,7 @@ void netdev_upper_dev_unlink(struct net_ __netdev_adjacent_dev_unlink_neighbour(dev, upper_dev); @@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, &changeupper_info.info); } -@@ -6961,6 +7008,7 @@ int dev_set_mac_address(struct net_devic +@@ -6971,6 +7018,7 @@ int dev_set_mac_address(struct net_devic if (err) return err; dev->addr_assign_type = NET_ADDR_SET; diff --git a/target/linux/generic/pending-4.14/681-NET-add-of_get_mac_address_mtd.patch b/target/linux/generic/pending-4.14/681-NET-add-of_get_mac_address_mtd.patch index 9de3097cca..d802770e25 100644 --- a/target/linux/generic/pending-4.14/681-NET-add-of_get_mac_address_mtd.patch +++ b/target/linux/generic/pending-4.14/681-NET-add-of_get_mac_address_mtd.patch @@ -171,7 +171,7 @@ Signed-off-by: Felix Fietkau /** * Search the device tree for the best MAC address to use. 'mac-address' is * checked first, because that is supposed to contain to "most recent" MAC -@@ -64,11 +192,18 @@ static const void *of_get_mac_addr(struc +@@ -64,11 +197,18 @@ static const void *of_get_mac_addr(struc * addresses. Some older U-Boots only initialized 'local-mac-address'. In * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists * but is all zeros. diff --git a/target/linux/generic/pending-4.14/701-phy_extension.patch b/target/linux/generic/pending-4.14/701-phy_extension.patch index 0f0b0e0467..910d922413 100644 --- a/target/linux/generic/pending-4.14/701-phy_extension.patch +++ b/target/linux/generic/pending-4.14/701-phy_extension.patch @@ -85,7 +85,7 @@ Signed-off-by: John Crispin * @phydev: the phy_device struct --- a/include/linux/phy.h +++ b/include/linux/phy.h -@@ -909,6 +909,7 @@ void phy_ethtool_ksettings_get(struct ph +@@ -911,6 +911,7 @@ void phy_ethtool_ksettings_get(struct ph struct ethtool_link_ksettings *cmd); int phy_ethtool_ksettings_set(struct phy_device *phydev, const struct ethtool_link_ksettings *cmd); diff --git a/target/linux/generic/pending-4.14/703-phy-add-detach-callback-to-struct-phy_driver.patch b/target/linux/generic/pending-4.14/703-phy-add-detach-callback-to-struct-phy_driver.patch index d49fdc77ab..03579657ee 100644 --- a/target/linux/generic/pending-4.14/703-phy-add-detach-callback-to-struct-phy_driver.patch +++ b/target/linux/generic/pending-4.14/703-phy-add-detach-callback-to-struct-phy_driver.patch @@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c -@@ -1106,6 +1106,9 @@ void phy_detach(struct phy_device *phyde +@@ -1110,6 +1110,9 @@ void phy_detach(struct phy_device *phyde struct module *ndev_owner = dev->dev.parent->driver->owner; struct mii_bus *bus; @@ -23,7 +23,7 @@ Signed-off-by: Gabor Juhos sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev"); --- a/include/linux/phy.h +++ b/include/linux/phy.h -@@ -559,6 +559,12 @@ struct phy_driver { +@@ -561,6 +561,12 @@ struct phy_driver { */ int (*did_interrupt)(struct phy_device *phydev); diff --git a/target/linux/generic/pending-4.14/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch b/target/linux/generic/pending-4.14/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch index b20a129391..aebad39beb 100644 --- a/target/linux/generic/pending-4.14/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch +++ b/target/linux/generic/pending-4.14/760-net-usb-aqc111-Driver-skeleton-for-Aquantia-AQtionUSB-to-5GbE.patch @@ -1,6 +1,6 @@ --- a/drivers/net/usb/Kconfig +++ b/drivers/net/usb/Kconfig -@@ -613,4 +613,16 @@ config USB_NET_CH9200 +@@ -612,4 +612,16 @@ config USB_NET_CH9200 To compile this driver as a module, choose M here: the module will be called ch9200.