diff mbox

[OpenWrt-Devel] generic: several linux-4.0 fixes

Message ID 1424791796-6536-1-git-send-email-noltari@gmail.com
State Superseded, archived
Delegated to: John Crispin
Headers show

Commit Message

Álvaro Fernández Rojas Feb. 24, 2015, 3:29 p.m. UTC
- support linux 4.0 downloads
- fix and refresh linux 4.0 patches
- add missing linux 4.0 symbols
- swconfig: fix linux 4.0 build issues
- netfilter: fix nf_nat_redirect dependencies for 3.19 and 4.0

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 include/kernel.mk                                  |   4 +
 include/netfilter.mk                               |   1 +
 target/linux/generic/config-4.0                    |  12 ++
 .../linux/generic/files/drivers/net/phy/swconfig.c |  15 ++
 .../patches-4.0/305-mips_module_reloc.patch        |   2 +-
 .../550-ubifs-symlink-xattr-support.patch          |  55 -------
 .../604-netfilter_conntrack_flush.patch            |   4 +-
 .../617-netfilter_skip_filter_sysctl.patch         |   4 +-
 .../patches-4.0/621-sched_act_connmark.patch       | 161 ---------------------
 .../645-bridge_multicast_to_unicast.patch          |   4 +-
 .../666-Add-support-for-MAP-E-FMRs-mesh-mode.patch |   2 +-
 .../patches-4.0/821-usb-dwc2-dualrole.patch        | 146 -------------------
 .../generic/patches-4.0/862-gpio_spi_driver.patch  |   4 +-
 13 files changed, 42 insertions(+), 372 deletions(-)
 delete mode 100644 target/linux/generic/patches-4.0/550-ubifs-symlink-xattr-support.patch
 delete mode 100644 target/linux/generic/patches-4.0/621-sched_act_connmark.patch
 delete mode 100644 target/linux/generic/patches-4.0/821-usb-dwc2-dualrole.patch

Comments

Rafał Miłecki Feb. 24, 2015, 5:04 p.m. UTC | #1
On 24 February 2015 at 16:29, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> diff --git a/include/kernel.mk b/include/kernel.mk
> index e21d53a..18cb133 100644
> --- a/include/kernel.mk
> +++ b/include/kernel.mk
> @@ -52,7 +52,11 @@ else
>    LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz
>    TESTING:=$(if $(findstring -rc,$(LINUX_VERSION)),/testing,)
>    ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),)
> +    ifeq ($(word 1,$(subst ., ,$(KERNEL_BASE))),3)
>        LINUX_SITE:=@KERNEL/linux/kernel/v3.x$(TESTING)
> +    else
> +      LINUX_SITE:=@KERNEL/linux/kernel/v4.x$(TESTING)
> +    endif
>    endif
>
>    ifneq ($(TARGET_BUILD),1)

I don't want the same problem when switching to 5.0, we should use
something generic. I've already sent
[PATCH] kernel.mk: handle major version dynamically
, will commit it later if noone will NACK it.
Rafał Miłecki Feb. 24, 2015, 5:07 p.m. UTC | #2
On 24 February 2015 at 16:29, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
> --- a/target/linux/generic/files/drivers/net/phy/swconfig.c
> +++ b/target/linux/generic/files/drivers/net/phy/swconfig.c
> @@ -396,7 +396,12 @@ swconfig_dump_attr(struct swconfig_callback *cb, void *arg)
>                         op->description))
>                         goto nla_put_failure;
>
> +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
>         return genlmsg_end(msg, hdr);
> +#else
> +       genlmsg_end(msg, hdr);
> +       return msg->len;
> +#endif
>  nla_put_failure:
>         genlmsg_cancel(msg, hdr);
>         return -EMSGSIZE;

I need some help there. Wasn't genlmsg_end always returning 0 value
(before 4.0)? If so, should you do "return 0" instead of "return
msg->len;"? Don't you just change the returning value on success?
Felix Fietkau Feb. 25, 2015, 10 a.m. UTC | #3
On 2015-02-25 06:07, Rafał Miłecki wrote:
> On 24 February 2015 at 16:29, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
>> --- a/target/linux/generic/files/drivers/net/phy/swconfig.c
>> +++ b/target/linux/generic/files/drivers/net/phy/swconfig.c
>> @@ -396,7 +396,12 @@ swconfig_dump_attr(struct swconfig_callback *cb, void *arg)
>>                         op->description))
>>                         goto nla_put_failure;
>>
>> +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
>>         return genlmsg_end(msg, hdr);
>> +#else
>> +       genlmsg_end(msg, hdr);
>> +       return msg->len;
>> +#endif
>>  nla_put_failure:
>>         genlmsg_cancel(msg, hdr);
>>         return -EMSGSIZE;
> 
> I need some help there. Wasn't genlmsg_end always returning 0 value
> (before 4.0)? If so, should you do "return 0" instead of "return
> msg->len;"? Don't you just change the returning value on success?
As far as I can see, it was returning skb->len. Anyways, the #if needs
to go. It should just use the same code for >= 4.0 and < 4.0
Also, this patch needs to be split up by functionality. Having
everything in one big patch is harder to review.

- Felix
Rafał Miłecki Feb. 25, 2015, 10:27 a.m. UTC | #4
On 25 February 2015 at 11:00, Felix Fietkau <nbd@openwrt.org> wrote:
> On 2015-02-25 06:07, Rafał Miłecki wrote:
>> On 24 February 2015 at 16:29, Álvaro Fernández Rojas <noltari@gmail.com> wrote:
>>> --- a/target/linux/generic/files/drivers/net/phy/swconfig.c
>>> +++ b/target/linux/generic/files/drivers/net/phy/swconfig.c
>>> @@ -396,7 +396,12 @@ swconfig_dump_attr(struct swconfig_callback *cb, void *arg)
>>>                         op->description))
>>>                         goto nla_put_failure;
>>>
>>> +#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
>>>         return genlmsg_end(msg, hdr);
>>> +#else
>>> +       genlmsg_end(msg, hdr);
>>> +       return msg->len;
>>> +#endif
>>>  nla_put_failure:
>>>         genlmsg_cancel(msg, hdr);
>>>         return -EMSGSIZE;
>>
>> I need some help there. Wasn't genlmsg_end always returning 0 value
>> (before 4.0)? If so, should you do "return 0" instead of "return
>> msg->len;"? Don't you just change the returning value on success?
> As far as I can see, it was returning skb->len. Anyways, the #if needs
> to go. It should just use the same code for >= 4.0 and < 4.0
> Also, this patch needs to be split up by functionality. Having
> everything in one big patch is harder to review.

I misread the commit:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=053c095a82cf773075e83d7233b5cc19a1f73ece

You're both right.
Álvaro Fernández Rojas Feb. 25, 2015, 12:15 p.m. UTC | #5
> As far as I can see, it was returning skb->len. Anyways, the #if needs
> to go. It should just use the same code for >= 4.0 and < 4.0
> Also, this patch needs to be split up by functionality. Having
> everything in one big patch is harder to review.
> 
> - Felix
> 

Well, the 4.0 code will work on 3.x too, so we can remove the if by using the 4.0 code for all versions.

BTW, kaloz has already fixed the patches, so only the nf_nat_redirect, swconfig and missing symbols are left.
Álvaro Fernández Rojas Feb. 25, 2015, 1:39 p.m. UTC | #6
v2: split up the patch by functionality
remove already fixed patches

Álvaro Fernández Rojas (3):
  netfilter: fix nf_nat_redirect dependencies for 3.19 and 4.0
  generic: add missing symbols for 4.0
  swconfig: fix build with linux 4.0

 include/netfilter.mk                                  |  1 +
 target/linux/generic/config-4.0                       | 12 ++++++++++++
 target/linux/generic/files/drivers/net/phy/swconfig.c |  9 ++++++---
 3 files changed, 19 insertions(+), 3 deletions(-)
diff mbox

Patch

diff --git a/include/kernel.mk b/include/kernel.mk
index e21d53a..18cb133 100644
--- a/include/kernel.mk
+++ b/include/kernel.mk
@@ -52,7 +52,11 @@  else
   LINUX_SOURCE:=linux-$(LINUX_VERSION).tar.xz
   TESTING:=$(if $(findstring -rc,$(LINUX_VERSION)),/testing,)
   ifeq ($(call qstrip,$(CONFIG_EXTERNAL_KERNEL_TREE))$(call qstrip,$(CONFIG_KERNEL_GIT_CLONE_URI)),)
+    ifeq ($(word 1,$(subst ., ,$(KERNEL_BASE))),3)
       LINUX_SITE:=@KERNEL/linux/kernel/v3.x$(TESTING)
+    else
+      LINUX_SITE:=@KERNEL/linux/kernel/v4.x$(TESTING)
+    endif
   endif
 
   ifneq ($(TARGET_BUILD),1)
diff --git a/include/netfilter.mk b/include/netfilter.mk
index ed63b0b..e663ea5 100644
--- a/include/netfilter.mk
+++ b/include/netfilter.mk
@@ -183,6 +183,7 @@  $(eval $(if $(NF_KMOD),$(call nf_add,NF_NAT6,CONFIG_NF_NAT_IPV6, $(P_V6)nf_nat_i
 $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NF_NAT, $(P_XT)xt_nat, ge 3.7.0),))
 $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NETFILTER_XT_NAT, $(P_XT)xt_nat, ge 3.18.0),))
 $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NF_NAT, $(P_V4)iptable_nat, lt 3.7.0),))
+$(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NF_NAT, $(P_XT)nf_nat_redirect, ge 3.19.0),))
 $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_NF_NAT_IPV4, $(P_V4)iptable_nat, ge 3.7.0),))
 $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT,CONFIG_IP_NF_NAT, $(P_V4)iptable_nat, ge 3.16.0),))
 $(eval $(if $(NF_KMOD),$(call nf_add,IPT_NAT6,CONFIG_NF_NAT_IPV6, $(P_V6)ip6table_nat, ge 3.7.0),))
diff --git a/target/linux/generic/config-4.0 b/target/linux/generic/config-4.0
index ae4030a..4361ced 100644
--- a/target/linux/generic/config-4.0
+++ b/target/linux/generic/config-4.0
@@ -254,6 +254,7 @@  CONFIG_ARM_DMA_MEM_BUFFERABLE=y
 CONFIG_ARPD=y
 # CONFIG_ARTHUR is not set
 # CONFIG_AS3935 is not set
+# CONFIG_ASM9260_TIMER is not set
 # CONFIG_ASUS_OLED is not set
 # CONFIG_ASYMMETRIC_KEY_TYPE is not set
 # CONFIG_ASYNC_RAID6_TEST is not set
@@ -774,6 +775,7 @@  CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
 # CONFIG_CRYPTO_TWOFISH_COMMON is not set
 # CONFIG_CRYPTO_USER is not set
 # CONFIG_CRYPTO_USER_API_HASH is not set
+# CONFIG_CRYPTO_USER_API_RNG is not set
 # CONFIG_CRYPTO_USER_API_SKCIPHER is not set
 # CONFIG_CRYPTO_VMAC is not set
 # CONFIG_CRYPTO_WP512 is not set
@@ -864,6 +866,7 @@  CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 # CONFIG_DEPRECATED_PARAM_STRUCT is not set
 # CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_DEVKMEM is not set
+# CONFIG_DEVMEM is not set
 CONFIG_DEVPORT=y
 # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
 # CONFIG_DEVTMPFS is not set
@@ -964,6 +967,7 @@  CONFIG_EPOLL=y
 # CONFIG_EQUALIZER is not set
 # CONFIG_ET131X is not set
 # CONFIG_GATEWORKS_GW16083 is not set
+# CONFIG_GDB_SCRIPTS is not set
 # CONFIG_GLOB_SELFTEST is not set
 # CONFIG_GS_FPGABOOT is not set
 # CONFIG_ETH16I is not set
@@ -1439,6 +1443,7 @@  CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 # CONFIG_IKCONFIG is not set
 # CONFIG_IKCONFIG_PROC is not set
 # CONFIG_IMAGE_CMDLINE_HACK is not set
+# CONFIG_IMGPDC_WDT is not set
 # CONFIG_IMX_IPUV3_CORE is not set
 CONFIG_INET=y
 # CONFIG_INET6_AH is not set
@@ -1513,6 +1518,7 @@  CONFIG_INOTIFY_USER=y
 # CONFIG_INPUT_DRV2667_HAPTICS is not set
 # CONFIG_INPUT_EVBUG is not set
 # CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_E3X0_BUTTON is not set
 # CONFIG_INPUT_FF_MEMLESS is not set
 # CONFIG_INPUT_GP2A is not set
 # CONFIG_INPUT_GPIO_BEEPER is not set
@@ -1797,6 +1803,7 @@  CONFIG_LBDAF=y
 # CONFIG_LEDS_BD2802 is not set
 # CONFIG_LEDS_BLINKM is not set
 CONFIG_LEDS_CLASS=y
+# CONFIG_LEDS_CLASS_FLASH is not set
 # CONFIG_LEDS_DAC124S085 is not set
 # CONFIG_LEDS_GPIO is not set
 CONFIG_LEDS_GPIO_OF=y
@@ -1883,6 +1890,7 @@  CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 # CONFIG_LTPC is not set
 # CONFIG_LUSTRE_FS is not set
 # CONFIG_LXT_PHY is not set
+# CONFIG_LZ4HC_COMPRESS is not set
 CONFIG_LZMA_COMPRESS=y
 CONFIG_LZMA_DECOMPRESS=y
 # CONFIG_LZO_COMPRESS is not set
@@ -2971,6 +2979,7 @@  CONFIG_RCU_FANOUT=32
 # CONFIG_RCU_FANOUT_EXACT is not set
 CONFIG_RCU_FANOUT_LEAF=16
 # CONFIG_RCU_FAST_NO_HZ is not set
+CONFIG_RCU_KTHREAD_PRIO=0
 # CONFIG_RCU_NOCB_CPU is not set
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_RCU_TRACE is not set
@@ -3438,6 +3447,7 @@  CONFIG_SERIAL_8250_RUNTIME_UARTS=2
 # CONFIG_SERIAL_ALTERA_UART is not set
 # CONFIG_SERIAL_ARC is not set
 # CONFIG_SERIAL_BCM63XX is not set
+# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_SERIAL_EARLYCON=y
@@ -3765,6 +3775,7 @@  CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SPI_FSL_SPI is not set
 # CONFIG_SPI_GPIO is not set
 # CONFIG_SPI_GPIO_OLD is not set
+# CONFIG_SPI_IMG_SPFI is not set
 # CONFIG_SPI_LM70_LLP is not set
 # CONFIG_SPI_MASTER is not set
 # CONFIG_SPI_MPC52xx is not set
@@ -3882,6 +3893,7 @@  CONFIG_TCP_CONG_CUBIC=y
 # CONFIG_TEST_BPF is not set
 # CONFIG_TEST_UDELAY is not set
 # CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_HEXDUMP is not set
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_TEST_LIST_SORT is not set
 # CONFIG_TEST_LKM is not set
diff --git a/target/linux/generic/files/drivers/net/phy/swconfig.c b/target/linux/generic/files/drivers/net/phy/swconfig.c
index b0ba90d..bb9acf5 100644
--- a/target/linux/generic/files/drivers/net/phy/swconfig.c
+++ b/target/linux/generic/files/drivers/net/phy/swconfig.c
@@ -396,7 +396,12 @@  swconfig_dump_attr(struct swconfig_callback *cb, void *arg)
 			op->description))
 			goto nla_put_failure;
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
 	return genlmsg_end(msg, hdr);
+#else
+	genlmsg_end(msg, hdr);
+	return msg->len;
+#endif
 nla_put_failure:
 	genlmsg_cancel(msg, hdr);
 	return -EMSGSIZE;
@@ -828,7 +833,12 @@  swconfig_get_attr(struct sk_buff *skb, struct genl_info *info)
 		err = -EINVAL;
 		goto error;
 	}
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
 	err = genlmsg_end(msg, hdr);
+#else
+	genlmsg_end(msg, hdr);
+	err = msg->len;
+#endif
 	if (err < 0)
 		goto nla_put_failure;
 
@@ -891,7 +901,12 @@  swconfig_send_switch(struct sk_buff *msg, u32 pid, u32 seq, int flags,
 		nla_nest_end(msg, p);
 	}
 	nla_nest_end(msg, m);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0))
 	return genlmsg_end(msg, hdr);
+#else
+	genlmsg_end(msg, hdr);
+	return msg->len;
+#endif
 nla_put_failure:
 	genlmsg_cancel(msg, hdr);
 	return -EMSGSIZE;
diff --git a/target/linux/generic/patches-4.0/305-mips_module_reloc.patch b/target/linux/generic/patches-4.0/305-mips_module_reloc.patch
index 2e92916..752d597 100644
--- a/target/linux/generic/patches-4.0/305-mips_module_reloc.patch
+++ b/target/linux/generic/patches-4.0/305-mips_module_reloc.patch
@@ -150,7 +150,7 @@ 
  {
 +#ifdef MODULE_START
  	return __vmalloc_node_range(size, 1, MODULE_START, MODULE_END,
- 				GFP_KERNEL, PAGE_KERNEL, NUMA_NO_NODE,
+ 				GFP_KERNEL, PAGE_KERNEL, 0, NUMA_NO_NODE,
  				__builtin_return_address(0));
 +#else
 +	void *ptr;
diff --git a/target/linux/generic/patches-4.0/550-ubifs-symlink-xattr-support.patch b/target/linux/generic/patches-4.0/550-ubifs-symlink-xattr-support.patch
deleted file mode 100644
index d3f2ccc..0000000
--- a/target/linux/generic/patches-4.0/550-ubifs-symlink-xattr-support.patch
+++ /dev/null
@@ -1,55 +0,0 @@ 
---- a/fs/ubifs/file.c
-+++ b/fs/ubifs/file.c
-@@ -1573,6 +1573,10 @@ const struct inode_operations ubifs_syml
- 	.follow_link = ubifs_follow_link,
- 	.setattr     = ubifs_setattr,
- 	.getattr     = ubifs_getattr,
-+	.setxattr    = ubifs_setxattr,
-+	.getxattr    = ubifs_getxattr,
-+	.listxattr   = ubifs_listxattr,
-+	.removexattr = ubifs_removexattr,
- };
- 
- const struct file_operations ubifs_file_operations = {
---- a/fs/ubifs/journal.c
-+++ b/fs/ubifs/journal.c
-@@ -572,6 +572,13 @@ int ubifs_jnl_update(struct ubifs_info *
- 	aligned_dlen = ALIGN(dlen, 8);
- 	aligned_ilen = ALIGN(ilen, 8);
- 	len = aligned_dlen + aligned_ilen + UBIFS_INO_NODE_SZ;
-+	if (xent) {
-+		/*
-+		 * Make sure to account for host_ui->data_len in
-+		 * length calculation in case there is extended attribute.
-+		 */
-+		len += host_ui->data_len;
-+	}
- 	dent = kmalloc(len, GFP_NOFS);
- 	if (!dent)
- 		return -ENOMEM;
-@@ -648,7 +655,8 @@ int ubifs_jnl_update(struct ubifs_info *
- 
- 	ino_key_init(c, &ino_key, dir->i_ino);
- 	ino_offs += aligned_ilen;
--	err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs, UBIFS_INO_NODE_SZ);
-+	err = ubifs_tnc_add(c, &ino_key, lnum, ino_offs,
-+			    UBIFS_INO_NODE_SZ + host_ui->data_len);
- 	if (err)
- 		goto out_ro;
- 
---- a/fs/ubifs/xattr.c
-+++ b/fs/ubifs/xattr.c
-@@ -209,12 +209,12 @@ static int change_xattr(struct ubifs_inf
- 		goto out_free;
- 	}
- 	inode->i_size = ui->ui_size = size;
--	ui->data_len = size;
- 
- 	mutex_lock(&host_ui->ui_mutex);
- 	host->i_ctime = ubifs_current_time(host);
- 	host_ui->xattr_size -= CALC_XATTR_BYTES(ui->data_len);
- 	host_ui->xattr_size += CALC_XATTR_BYTES(size);
-+	ui->data_len = size;
- 
- 	/*
- 	 * It is important to write the host inode after the xattr inode
diff --git a/target/linux/generic/patches-4.0/604-netfilter_conntrack_flush.patch b/target/linux/generic/patches-4.0/604-netfilter_conntrack_flush.patch
index bd7a7ff..6d58189 100644
--- a/target/linux/generic/patches-4.0/604-netfilter_conntrack_flush.patch
+++ b/target/linux/generic/patches-4.0/604-netfilter_conntrack_flush.patch
@@ -8,7 +8,7 @@ 
  #include <net/net_namespace.h>
  #ifdef CONFIG_SYSCTL
  #include <linux/sysctl.h>
-@@ -259,10 +260,66 @@ static int ct_open(struct inode *inode,
+@@ -265,10 +266,66 @@ static int ct_open(struct inode *inode,
  			sizeof(struct ct_iter_state));
  }
  
@@ -75,7 +75,7 @@ 
  	.llseek  = seq_lseek,
  	.release = seq_release_net,
  };
-@@ -364,7 +421,7 @@ static int nf_conntrack_standalone_init_
+@@ -370,7 +427,7 @@ static int nf_conntrack_standalone_init_
  {
  	struct proc_dir_entry *pde;
  
diff --git a/target/linux/generic/patches-4.0/617-netfilter_skip_filter_sysctl.patch b/target/linux/generic/patches-4.0/617-netfilter_skip_filter_sysctl.patch
index 5d67818..6cf6568 100644
--- a/target/linux/generic/patches-4.0/617-netfilter_skip_filter_sysctl.patch
+++ b/target/linux/generic/patches-4.0/617-netfilter_skip_filter_sysctl.patch
@@ -63,7 +63,7 @@ 
  			     net->ipv6.ip6table_filter);
 --- a/net/netfilter/nf_conntrack_standalone.c
 +++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -501,6 +501,13 @@ static struct ctl_table nf_ct_sysctl_tab
+@@ -507,6 +507,13 @@ static struct ctl_table nf_ct_sysctl_tab
  		.extra2		= &log_invalid_proto_max,
  	},
  	{
@@ -77,7 +77,7 @@ 
  		.procname	= "nf_conntrack_expect_max",
  		.data		= &nf_ct_expect_max,
  		.maxlen		= sizeof(int),
-@@ -536,6 +543,7 @@ static int nf_conntrack_standalone_init_
+@@ -542,6 +549,7 @@ static int nf_conntrack_standalone_init_
  	table[2].data = &net->ct.htable_size;
  	table[3].data = &net->ct.sysctl_checksum;
  	table[4].data = &net->ct.sysctl_log_invalid;
diff --git a/target/linux/generic/patches-4.0/621-sched_act_connmark.patch b/target/linux/generic/patches-4.0/621-sched_act_connmark.patch
deleted file mode 100644
index bff2765..0000000
--- a/target/linux/generic/patches-4.0/621-sched_act_connmark.patch
+++ /dev/null
@@ -1,161 +0,0 @@ 
---- /dev/null
-+++ b/net/sched/act_connmark.c
-@@ -0,0 +1,126 @@
-+/*
-+ * Copyright (c) 2011 Felix Fietkau <nbd@openwrt.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms and conditions of the GNU General Public License,
-+ * version 2, as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-+ * Place - Suite 330, Boston, MA 02111-1307 USA.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/skbuff.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/pkt_cls.h>
-+#include <linux/ip.h>
-+#include <linux/ipv6.h>
-+#include <net/netlink.h>
-+#include <net/pkt_sched.h>
-+#include <net/act_api.h>
-+
-+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_core.h>
-+
-+#define TCA_ACT_CONNMARK	20
-+
-+#define CONNMARK_TAB_MASK     3
-+
-+static int tcf_connmark(struct sk_buff *skb, const struct tc_action *a,
-+		       struct tcf_result *res)
-+{
-+	struct nf_conn *c;
-+	enum ip_conntrack_info ctinfo;
-+	int proto;
-+	int r;
-+
-+	if (skb->protocol == htons(ETH_P_IP)) {
-+		if (skb->len < sizeof(struct iphdr))
-+			goto out;
-+		proto = PF_INET;
-+	} else if (skb->protocol == htons(ETH_P_IPV6)) {
-+		if (skb->len < sizeof(struct ipv6hdr))
-+			goto out;
-+		proto = PF_INET6;
-+	} else
-+		goto out;
-+
-+	r = nf_conntrack_in(dev_net(skb->dev), proto, NF_INET_PRE_ROUTING, skb);
-+	if (r != NF_ACCEPT)
-+		goto out;
-+
-+	c = nf_ct_get(skb, &ctinfo);
-+	if (!c)
-+		goto out;
-+
-+	skb->mark = c->mark;
-+	nf_conntrack_put(skb->nfct);
-+	skb->nfct = NULL;
-+
-+out:
-+	return TC_ACT_PIPE;
-+}
-+
-+static int tcf_connmark_init(struct net *net, struct nlattr *nla,
-+			     struct nlattr *est, struct tc_action *a,
-+			     int ovr, int bind)
-+{
-+	int ret = 0;
-+
-+	if (!tcf_hash_check(0, a, bind)) {
-+		ret = tcf_hash_create(0, est, a, sizeof(struct tcf_common), bind);
-+		if (ret)
-+		    return ret;
-+
-+		tcf_hash_insert(a);
-+		ret = ACT_P_CREATED;
-+	} else {
-+		if (!ovr) {
-+			tcf_hash_release(a, bind);
-+			return -EEXIST;
-+		}
-+	}
-+
-+	return ret;
-+}
-+
-+static inline int tcf_connmark_dump(struct sk_buff *skb, struct tc_action *a,
-+				int bind, int ref)
-+{
-+	return skb->len;
-+}
-+
-+static struct tc_action_ops act_connmark_ops = {
-+	.kind		=	"connmark",
-+	.type		=	TCA_ACT_CONNMARK,
-+	.owner		=	THIS_MODULE,
-+	.act		=	tcf_connmark,
-+	.dump		=	tcf_connmark_dump,
-+	.init		=	tcf_connmark_init,
-+};
-+
-+MODULE_AUTHOR("Felix Fietkau <nbd@openwrt.org>");
-+MODULE_DESCRIPTION("Connection tracking mark restoring");
-+MODULE_LICENSE("GPL");
-+
-+static int __init connmark_init_module(void)
-+{
-+
-+	return tcf_register_action(&act_connmark_ops, CONNMARK_TAB_MASK);
-+}
-+
-+static void __exit connmark_cleanup_module(void)
-+{
-+	tcf_unregister_action(&act_connmark_ops);
-+}
-+
-+module_init(connmark_init_module);
-+module_exit(connmark_cleanup_module);
---- a/net/sched/Kconfig
-+++ b/net/sched/Kconfig
-@@ -729,6 +729,19 @@ config NET_ACT_VLAN
- 	  To compile this code as a module, choose M here: the
- 	  module will be called act_vlan.
- 
-+config NET_ACT_CONNMARK
-+        tristate "Connection Tracking Marking"
-+        depends on NET_CLS_ACT
-+        depends on NF_CONNTRACK
-+	 depends on NF_CONNTRACK_MARK
-+        ---help---
-+	  Say Y here to restore the connmark from a scheduler action
-+
-+	  If unsure, say N.
-+
-+	  To compile this code as a module, choose M here: the
-+	  module will be called act_connmark.
-+
- config NET_CLS_IND
- 	bool "Incoming device classification"
- 	depends on NET_CLS_U32 || NET_CLS_FW
---- a/net/sched/Makefile
-+++ b/net/sched/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_NET_ACT_PEDIT)	+= act_pedit
- obj-$(CONFIG_NET_ACT_SIMP)	+= act_simple.o
- obj-$(CONFIG_NET_ACT_SKBEDIT)	+= act_skbedit.o
- obj-$(CONFIG_NET_ACT_CSUM)	+= act_csum.o
-+obj-$(CONFIG_NET_ACT_CONNMARK)	+= act_connmark.o
- obj-$(CONFIG_NET_ACT_VLAN)	+= act_vlan.o
- obj-$(CONFIG_NET_SCH_FIFO)	+= sch_fifo.o
- obj-$(CONFIG_NET_SCH_CBQ)	+= sch_cbq.o
diff --git a/target/linux/generic/patches-4.0/645-bridge_multicast_to_unicast.patch b/target/linux/generic/patches-4.0/645-bridge_multicast_to_unicast.patch
index fb5c389..f09875c 100644
--- a/target/linux/generic/patches-4.0/645-bridge_multicast_to_unicast.patch
+++ b/target/linux/generic/patches-4.0/645-bridge_multicast_to_unicast.patch
@@ -273,7 +273,7 @@ 
  };
  
  struct net_bridge_mdb_entry
-@@ -476,7 +479,8 @@ void br_multicast_free_pg(struct rcu_hea
+@@ -480,7 +483,8 @@ void br_multicast_free_pg(struct rcu_hea
  struct net_bridge_port_group *
  br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
  			    struct net_bridge_port_group __rcu *next,
@@ -285,7 +285,7 @@ 
  void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
 --- a/net/bridge/br_mdb.c
 +++ b/net/bridge/br_mdb.c
-@@ -342,7 +342,7 @@ static int br_mdb_add_group(struct net_b
+@@ -343,7 +343,7 @@ static int br_mdb_add_group(struct net_b
  			break;
  	}
  
diff --git a/target/linux/generic/patches-4.0/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch b/target/linux/generic/patches-4.0/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
index 230c808..cf5737d 100644
--- a/target/linux/generic/patches-4.0/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
+++ b/target/linux/generic/patches-4.0/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
@@ -472,7 +472,7 @@  Signed-off-by: Steven Barth <cyrus@openwrt.org>
  	return 0;
  
  nla_put_failure:
-@@ -1769,6 +2022,7 @@ static const struct nla_policy ip6_tnl_p
+@@ -1777,6 +2030,7 @@ static const struct nla_policy ip6_tnl_p
  	[IFLA_IPTUN_FLOWINFO]		= { .type = NLA_U32 },
  	[IFLA_IPTUN_FLAGS]		= { .type = NLA_U32 },
  	[IFLA_IPTUN_PROTO]		= { .type = NLA_U8 },
diff --git a/target/linux/generic/patches-4.0/821-usb-dwc2-dualrole.patch b/target/linux/generic/patches-4.0/821-usb-dwc2-dualrole.patch
deleted file mode 100644
index 9e841cb..0000000
--- a/target/linux/generic/patches-4.0/821-usb-dwc2-dualrole.patch
+++ /dev/null
@@ -1,146 +0,0 @@ 
---- a/drivers/usb/dwc2/Kconfig
-+++ b/drivers/usb/dwc2/Kconfig
-@@ -1,6 +1,6 @@
- config USB_DWC2
--	bool "DesignWare USB2 DRD Core Support"
--	depends on USB
-+	tristate "DesignWare USB2 DRD Core Support"
-+	depends on USB || USB_GADGET
- 	help
- 	  Say Y here if your system has a Dual Role Hi-Speed USB
- 	  controller based on the DesignWare HSOTG IP Core.
-@@ -10,49 +10,61 @@ config USB_DWC2
- 	  bus interface module (if you have a PCI bus system) will be
- 	  called dwc2_pci.ko, and the platform interface module (for
- 	  controllers directly connected to the CPU) will be called
--	  dwc2_platform.ko. For gadget mode, there will be a single
--	  module called dwc2_gadget.ko.
--
--	  NOTE: The s3c-hsotg driver is now renamed to dwc2_gadget. The
--	  host and gadget drivers are still currently separate drivers.
--	  There are plans to merge the dwc2_gadget driver with the dwc2
--	  host driver in the near future to create a dual-role driver.
-+	  dwc2_platform.ko. For all modes(host, gadget and dual-role), there
-+	  will be an additional module named dwc2.ko.
- 
- if USB_DWC2
- 
-+choice
-+	bool "DWC2 Mode Selection"
-+	default USB_DWC2_DUAL_ROLE if (USB && USB_GADGET)
-+	default USB_DWC2_HOST if (USB && !USB_GADGET)
-+	default USB_DWC2_PERIPHERAL if (!USB && USB_GADGET)
-+
- config USB_DWC2_HOST
--	tristate "Host only mode"
-+	bool "Host only mode"
- 	depends on USB
- 	help
- 	  The Designware USB2.0 high-speed host controller
--	  integrated into many SoCs.
-+	  integrated into many SoCs. Select this option if you want the
-+	  driver to operate in Host-only mode.
- 
--config USB_DWC2_PLATFORM
--	bool "DWC2 Platform"
--	depends on USB_DWC2_HOST
--	default USB_DWC2_HOST
-+comment "Gadget/Dual-role mode requires USB Gadget support to be enabled"
-+
-+config USB_DWC2_PERIPHERAL
-+	bool "Gadget only mode"
-+	depends on USB_GADGET=y || USB_GADGET=USB_DWC2
-+	help
-+	  The Designware USB2.0 high-speed gadget controller
-+	  integrated into many SoCs. Select this option if you want the
-+	  driver to operate in Peripheral-only mode. This option requires
-+	  USB_GADGET to be enabled.
-+
-+config USB_DWC2_DUAL_ROLE
-+	bool "Dual Role mode"
-+	depends on (USB=y || USB=USB_DWC2) && (USB_GADGET=y || USB_GADGET=USB_DWC2)
- 	help
--	  The Designware USB2.0 platform interface module for
--	  controllers directly connected to the CPU. This is only
--	  used for host mode.
-+	  Select this option if you want the driver to work in a dual-role
-+	  mode. In this mode both host and gadget features are enabled, and
-+	  the role will be determined by the cable that gets plugged-in. This
-+	  option requires USB_GADGET to be enabled.
-+endchoice
-+
-+config USB_DWC2_PLATFORM
-+	tristate "DWC2 Platform"
-+	default USB_DWC2_HOST || USB_DWC2_PERIPHERAL
-+        help
-+          The Designware USB2.0 platform interface module for
-+          controllers directly connected to the CPU.
- 
- config USB_DWC2_PCI
--	bool "DWC2 PCI"
-+	tristate "DWC2 PCI"
- 	depends on USB_DWC2_HOST && PCI
- 	default USB_DWC2_HOST
- 	help
- 	  The Designware USB2.0 PCI interface module for controllers
- 	  connected to a PCI bus. This is only used for host mode.
- 
--comment "Gadget mode requires USB Gadget support to be enabled"
--
--config USB_DWC2_PERIPHERAL
--	tristate "Gadget only mode"
--	depends on USB_GADGET
--	help
--	  The Designware USB2.0 high-speed gadget controller
--	  integrated into many SoCs.
--
- config USB_DWC2_DEBUG
- 	bool "Enable Debugging Messages"
- 	help
---- a/drivers/usb/dwc2/Makefile
-+++ b/drivers/usb/dwc2/Makefile
-@@ -1,28 +1,28 @@
- ccflags-$(CONFIG_USB_DWC2_DEBUG)	+= -DDEBUG
- ccflags-$(CONFIG_USB_DWC2_VERBOSE)	+= -DVERBOSE_DEBUG
- 
--obj-$(CONFIG_USB_DWC2_HOST)		+= dwc2.o
-+obj-$(CONFIG_USB_DWC2)			+= dwc2.o
- dwc2-y					:= core.o core_intr.o
--dwc2-y					+= hcd.o hcd_intr.o
--dwc2-y					+= hcd_queue.o hcd_ddma.o
-+
-+ifneq ($(filter y,$(CONFIG_USB_DWC2_HOST) $(CONFIG_USB_DWC2_DUAL_ROLE)),)
-+	dwc2-y				+= hcd.o hcd_intr.o
-+	dwc2-y				+= hcd_queue.o hcd_ddma.o
-+endif
-+
-+ifneq ($(filter y,$(CONFIG_USB_DWC2_PERIPHERAL) $(CONFIG_USB_DWC2_DUAL_ROLE)),)
-+	dwc2-y       			+= gadget.o
-+endif
- 
- # NOTE: The previous s3c-hsotg peripheral mode only driver has been moved to
- # this location and renamed gadget.c. When building for dynamically linked
--# modules, dwc2_gadget.ko will get built for peripheral mode. For host mode,
--# the core module will be dwc2.ko, the PCI bus interface module will called
--# dwc2_pci.ko and the platform interface module will be called dwc2_platform.ko.
--# At present the host and gadget driver will be separate drivers, but there
--# are plans in the near future to create a dual-role driver.
-+# modules, dwc2.ko will get built for host mode, peripheral mode, and dual-role
-+# mode. The PCI bus interface module will called dwc2_pci.ko and the platform
-+# interface module will be called dwc2_platform.ko.
- 
- ifneq ($(CONFIG_USB_DWC2_PCI),)
--	obj-$(CONFIG_USB_DWC2_HOST)	+= dwc2_pci.o
-+	obj-$(CONFIG_USB_DWC2)		+= dwc2_pci.o
- 	dwc2_pci-y			:= pci.o
- endif
- 
--ifneq ($(CONFIG_USB_DWC2_PLATFORM),)
--	obj-$(CONFIG_USB_DWC2_HOST)	+= dwc2_platform.o
--	dwc2_platform-y			:= platform.o
--endif
--
--obj-$(CONFIG_USB_DWC2_PERIPHERAL)	+= dwc2_gadget.o
--dwc2_gadget-y				:= gadget.o
-+obj-$(CONFIG_USB_DWC2_PLATFORM)		+= dwc2_platform.o
-+dwc2_platform-y				:= platform.o
diff --git a/target/linux/generic/patches-4.0/862-gpio_spi_driver.patch b/target/linux/generic/patches-4.0/862-gpio_spi_driver.patch
index 8ffea82..be05938 100644
--- a/target/linux/generic/patches-4.0/862-gpio_spi_driver.patch
+++ b/target/linux/generic/patches-4.0/862-gpio_spi_driver.patch
@@ -345,7 +345,7 @@  Please use the new mainline SPI-GPIO driver, as of 2.6.29.
 +MODULE_LICENSE("GPL v2");
 --- a/drivers/spi/Kconfig
 +++ b/drivers/spi/Kconfig
-@@ -232,6 +232,15 @@ config SPI_IMG_SPFI
+@@ -242,6 +242,15 @@ config SPI_IMG_SPFI
  	  This enables support for the SPFI master controller found on
  	  IMG SoCs.
  
@@ -363,7 +363,7 @@  Please use the new mainline SPI-GPIO driver, as of 2.6.29.
  	depends on ARCH_MXC || COMPILE_TEST
 --- a/drivers/spi/Makefile
 +++ b/drivers/spi/Makefile
-@@ -40,6 +40,7 @@ obj-$(CONFIG_SPI_FSL_LIB)		+= spi-fsl-li
+@@ -41,6 +41,7 @@ obj-$(CONFIG_SPI_FSL_LIB)		+= spi-fsl-li
  obj-$(CONFIG_SPI_FSL_ESPI)		+= spi-fsl-espi.o
  obj-$(CONFIG_SPI_FSL_SPI)		+= spi-fsl-spi.o
  obj-$(CONFIG_SPI_GPIO)			+= spi-gpio.o