diff options
Diffstat (limited to 'target/linux/generic/patches-4.4')
33 files changed, 99 insertions, 638 deletions
diff --git a/target/linux/generic/patches-4.4/030-1-smsc95xx-Use-skb_cow_head-to-deal-with-cloned-skbs.patch b/target/linux/generic/patches-4.4/030-1-smsc95xx-Use-skb_cow_head-to-deal-with-cloned-skbs.patch index 36fb936e32..a75ddfc4d9 100644 --- a/target/linux/generic/patches-4.4/030-1-smsc95xx-Use-skb_cow_head-to-deal-with-cloned-skbs.patch +++ b/target/linux/generic/patches-4.4/030-1-smsc95xx-Use-skb_cow_head-to-deal-with-cloned-skbs.patch @@ -18,7 +18,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net> --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c -@@ -1835,13 +1835,13 @@ static struct sk_buff *smsc95xx_tx_fixup +@@ -1838,13 +1838,13 @@ static struct sk_buff *smsc95xx_tx_fixup /* We do not advertise SG, so skbs should be already linearized */ BUG_ON(skb_shinfo(skb)->nr_frags); diff --git a/target/linux/generic/patches-4.4/043-mtd-spi-nor-mx25l3205d-mx25l6405d-append-SECT_4K.patch b/target/linux/generic/patches-4.4/043-mtd-spi-nor-mx25l3205d-mx25l6405d-append-SECT_4K.patch index b7fd046a23..6388c9afea 100644 --- a/target/linux/generic/patches-4.4/043-mtd-spi-nor-mx25l3205d-mx25l6405d-append-SECT_4K.patch +++ b/target/linux/generic/patches-4.4/043-mtd-spi-nor-mx25l3205d-mx25l6405d-append-SECT_4K.patch @@ -13,7 +13,7 @@ Signed-off-by: Brian Norris <computersforpeace@gmail.com> --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -715,9 +715,9 @@ static const struct flash_info spi_nor_i +@@ -721,9 +721,9 @@ static const struct flash_info spi_nor_i { "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) }, { "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, 0) }, { "mx25l1606e", INFO(0xc22015, 0, 64 * 1024, 32, SECT_4K) }, diff --git a/target/linux/generic/patches-4.4/046-ubifs-silence-error-output-if-MS_SILENT-is-set.patch b/target/linux/generic/patches-4.4/046-ubifs-silence-error-output-if-MS_SILENT-is-set.patch index 9b1e9fe57d..dc552e46d1 100644 --- a/target/linux/generic/patches-4.4/046-ubifs-silence-error-output-if-MS_SILENT-is-set.patch +++ b/target/linux/generic/patches-4.4/046-ubifs-silence-error-output-if-MS_SILENT-is-set.patch @@ -18,7 +18,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> --- a/fs/ubifs/super.c +++ b/fs/ubifs/super.c -@@ -2113,8 +2113,9 @@ static struct dentry *ubifs_mount(struct +@@ -2116,8 +2116,9 @@ static struct dentry *ubifs_mount(struct */ ubi = open_ubi(name, UBI_READONLY); if (IS_ERR(ubi)) { diff --git a/target/linux/generic/patches-4.4/048-mtd-spi-nor-backport-SPI_NOR_HAS_LOCK-flag.patch b/target/linux/generic/patches-4.4/048-mtd-spi-nor-backport-SPI_NOR_HAS_LOCK-flag.patch index 69a5432fa7..b8a64b66d6 100644 --- a/target/linux/generic/patches-4.4/048-mtd-spi-nor-backport-SPI_NOR_HAS_LOCK-flag.patch +++ b/target/linux/generic/patches-4.4/048-mtd-spi-nor-backport-SPI_NOR_HAS_LOCK-flag.patch @@ -25,7 +25,7 @@ Tested-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> }; #define JEDEC_MFR(info) ((info)->id[0]) -@@ -1163,7 +1164,8 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -1169,7 +1170,8 @@ int spi_nor_scan(struct spi_nor *nor, co if (JEDEC_MFR(info) == SNOR_MFR_ATMEL || JEDEC_MFR(info) == SNOR_MFR_INTEL || @@ -35,7 +35,7 @@ Tested-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> write_enable(nor); write_sr(nor, 0); } -@@ -1179,7 +1181,8 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -1185,7 +1187,8 @@ int spi_nor_scan(struct spi_nor *nor, co mtd->_read = spi_nor_read; /* NOR protection support for STmicro/Micron chips and similar */ diff --git a/target/linux/generic/patches-4.4/051-0001-ovl-rename-is_merge-to-is_lowest.patch b/target/linux/generic/patches-4.4/051-0001-ovl-rename-is_merge-to-is_lowest.patch deleted file mode 100644 index 8ba4522bf2..0000000000 --- a/target/linux/generic/patches-4.4/051-0001-ovl-rename-is_merge-to-is_lowest.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 56656e960b555cb98bc414382566dcb59aae99a2 Mon Sep 17 00:00:00 2001 -From: Miklos Szeredi <mszeredi@redhat.com> -Date: Mon, 21 Mar 2016 17:31:46 +0100 -Subject: [PATCH] ovl: rename is_merge to is_lowest - -The 'is_merge' is an historical naming from when only a single lower layer -could exist. With the introduction of multiple lower layers the meaning of -this flag was changed to mean only the "lowest layer" (while all lower -layers were being merged). - -So now 'is_merge' is inaccurate and hence renaming to 'is_lowest' - -Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> ---- - fs/overlayfs/readdir.c | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - ---- a/fs/overlayfs/readdir.c -+++ b/fs/overlayfs/readdir.c -@@ -36,7 +36,7 @@ struct ovl_dir_cache { - - struct ovl_readdir_data { - struct dir_context ctx; -- bool is_merge; -+ bool is_lowest; - struct rb_root root; - struct list_head *list; - struct list_head middle; -@@ -140,9 +140,9 @@ static int ovl_cache_entry_add_rb(struct - return 0; - } - --static int ovl_fill_lower(struct ovl_readdir_data *rdd, -- const char *name, int namelen, -- loff_t offset, u64 ino, unsigned int d_type) -+static int ovl_fill_lowest(struct ovl_readdir_data *rdd, -+ const char *name, int namelen, -+ loff_t offset, u64 ino, unsigned int d_type) - { - struct ovl_cache_entry *p; - -@@ -194,10 +194,10 @@ static int ovl_fill_merge(struct dir_con - container_of(ctx, struct ovl_readdir_data, ctx); - - rdd->count++; -- if (!rdd->is_merge) -+ if (!rdd->is_lowest) - return ovl_cache_entry_add_rb(rdd, name, namelen, ino, d_type); - else -- return ovl_fill_lower(rdd, name, namelen, offset, ino, d_type); -+ return ovl_fill_lowest(rdd, name, namelen, offset, ino, d_type); - } - - static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd) -@@ -290,7 +290,7 @@ static int ovl_dir_read_merged(struct de - .ctx.actor = ovl_fill_merge, - .list = list, - .root = RB_ROOT, -- .is_merge = false, -+ .is_lowest = false, - }; - int idx, next; - -@@ -307,7 +307,7 @@ static int ovl_dir_read_merged(struct de - * allows offsets to be reasonably constant - */ - list_add(&rdd.middle, rdd.list); -- rdd.is_merge = true; -+ rdd.is_lowest = true; - err = ovl_dir_read(&realpath, &rdd); - list_del(&rdd.middle); - } diff --git a/target/linux/generic/patches-4.4/051-0002-ovl-override-creds-with-the-ones-from-the-superblock.patch b/target/linux/generic/patches-4.4/051-0002-ovl-override-creds-with-the-ones-from-the-superblock.patch deleted file mode 100644 index 2d40c7e86c..0000000000 --- a/target/linux/generic/patches-4.4/051-0002-ovl-override-creds-with-the-ones-from-the-superblock.patch +++ /dev/null @@ -1,336 +0,0 @@ -From 3fe6e52f062643676eb4518d68cee3bc1272091b Mon Sep 17 00:00:00 2001 -From: Antonio Murdaca <amurdaca@redhat.com> -Date: Thu, 7 Apr 2016 15:48:25 +0200 -Subject: [PATCH] ovl: override creds with the ones from the superblock mounter - -In user namespace the whiteout creation fails with -EPERM because the -current process isn't capable(CAP_SYS_ADMIN) when setting xattr. - -A simple reproducer: - -$ mkdir upper lower work merged lower/dir -$ sudo mount -t overlay overlay -olowerdir=lower,upperdir=upper,workdir=work merged -$ unshare -m -p -f -U -r bash - -Now as root in the user namespace: - -\# touch merged/dir/{1,2,3} # this will force a copy up of lower/dir -\# rm -fR merged/* - -This ends up failing with -EPERM after the files in dir has been -correctly deleted: - -unlinkat(4, "2", 0) = 0 -unlinkat(4, "1", 0) = 0 -unlinkat(4, "3", 0) = 0 -close(4) = 0 -unlinkat(AT_FDCWD, "merged/dir", AT_REMOVEDIR) = -1 EPERM (Operation not -permitted) - -Interestingly, if you don't place files in merged/dir you can remove it, -meaning if upper/dir does not exist, creating the char device file works -properly in that same location. - -This patch uses ovl_sb_creator_cred() to get the cred struct from the -superblock mounter and override the old cred with these new ones so that -the whiteout creation is possible because overlay is wrong in assuming that -the creds it will get with prepare_creds will be in the initial user -namespace. The old cap_raise game is removed in favor of just overriding -the old cred struct. - -This patch also drops from ovl_copy_up_one() the following two lines: - -override_cred->fsuid = stat->uid; -override_cred->fsgid = stat->gid; - -This is because the correct uid and gid are taken directly with the stat -struct and correctly set with ovl_set_attr(). - -Signed-off-by: Antonio Murdaca <runcom@redhat.com> -Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> ---- - fs/overlayfs/copy_up.c | 26 +------------------ - fs/overlayfs/dir.c | 67 ++++-------------------------------------------- - fs/overlayfs/overlayfs.h | 1 + - fs/overlayfs/readdir.c | 14 +++------- - fs/overlayfs/super.c | 18 ++++++++++++- - 5 files changed, 27 insertions(+), 99 deletions(-) - ---- a/fs/overlayfs/copy_up.c -+++ b/fs/overlayfs/copy_up.c -@@ -317,7 +317,6 @@ int ovl_copy_up_one(struct dentry *paren - struct dentry *upperdir; - struct dentry *upperdentry; - const struct cred *old_cred; -- struct cred *override_cred; - char *link = NULL; - - if (WARN_ON(!workdir)) -@@ -336,28 +335,7 @@ int ovl_copy_up_one(struct dentry *paren - return PTR_ERR(link); - } - -- err = -ENOMEM; -- override_cred = prepare_creds(); -- if (!override_cred) -- goto out_free_link; -- -- override_cred->fsuid = stat->uid; -- override_cred->fsgid = stat->gid; -- /* -- * CAP_SYS_ADMIN for copying up extended attributes -- * CAP_DAC_OVERRIDE for create -- * CAP_FOWNER for chmod, timestamp update -- * CAP_FSETID for chmod -- * CAP_CHOWN for chown -- * CAP_MKNOD for mknod -- */ -- cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); -- cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); -- cap_raise(override_cred->cap_effective, CAP_FOWNER); -- cap_raise(override_cred->cap_effective, CAP_FSETID); -- cap_raise(override_cred->cap_effective, CAP_CHOWN); -- cap_raise(override_cred->cap_effective, CAP_MKNOD); -- old_cred = override_creds(override_cred); -+ old_cred = ovl_override_creds(dentry->d_sb); - - err = -EIO; - if (lock_rename(workdir, upperdir) != NULL) { -@@ -380,9 +358,7 @@ int ovl_copy_up_one(struct dentry *paren - out_unlock: - unlock_rename(workdir, upperdir); - revert_creds(old_cred); -- put_cred(override_cred); - --out_free_link: - if (link) - free_page((unsigned long) link); - ---- a/fs/overlayfs/dir.c -+++ b/fs/overlayfs/dir.c -@@ -408,28 +408,13 @@ static int ovl_create_or_link(struct den - err = ovl_create_upper(dentry, inode, &stat, link, hardlink); - } else { - const struct cred *old_cred; -- struct cred *override_cred; - -- err = -ENOMEM; -- override_cred = prepare_creds(); -- if (!override_cred) -- goto out_iput; -- -- /* -- * CAP_SYS_ADMIN for setting opaque xattr -- * CAP_DAC_OVERRIDE for create in workdir, rename -- * CAP_FOWNER for removing whiteout from sticky dir -- */ -- cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); -- cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); -- cap_raise(override_cred->cap_effective, CAP_FOWNER); -- old_cred = override_creds(override_cred); -+ old_cred = ovl_override_creds(dentry->d_sb); - - err = ovl_create_over_whiteout(dentry, inode, &stat, link, - hardlink); - - revert_creds(old_cred); -- put_cred(override_cred); - } - - if (!err) -@@ -659,32 +644,11 @@ static int ovl_do_remove(struct dentry * - if (OVL_TYPE_PURE_UPPER(type)) { - err = ovl_remove_upper(dentry, is_dir); - } else { -- const struct cred *old_cred; -- struct cred *override_cred; -- -- err = -ENOMEM; -- override_cred = prepare_creds(); -- if (!override_cred) -- goto out_drop_write; -- -- /* -- * CAP_SYS_ADMIN for setting xattr on whiteout, opaque dir -- * CAP_DAC_OVERRIDE for create in workdir, rename -- * CAP_FOWNER for removing whiteout from sticky dir -- * CAP_FSETID for chmod of opaque dir -- * CAP_CHOWN for chown of opaque dir -- */ -- cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); -- cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); -- cap_raise(override_cred->cap_effective, CAP_FOWNER); -- cap_raise(override_cred->cap_effective, CAP_FSETID); -- cap_raise(override_cred->cap_effective, CAP_CHOWN); -- old_cred = override_creds(override_cred); -+ const struct cred *old_cred = ovl_override_creds(dentry->d_sb); - - err = ovl_remove_and_whiteout(dentry, is_dir); - - revert_creds(old_cred); -- put_cred(override_cred); - } - out_drop_write: - ovl_drop_write(dentry); -@@ -723,7 +687,6 @@ static int ovl_rename2(struct inode *old - bool new_is_dir = false; - struct dentry *opaquedir = NULL; - const struct cred *old_cred = NULL; -- struct cred *override_cred = NULL; - - err = -EINVAL; - if (flags & ~(RENAME_EXCHANGE | RENAME_NOREPLACE)) -@@ -792,26 +755,8 @@ static int ovl_rename2(struct inode *old - old_opaque = !OVL_TYPE_PURE_UPPER(old_type); - new_opaque = !OVL_TYPE_PURE_UPPER(new_type); - -- if (old_opaque || new_opaque) { -- err = -ENOMEM; -- override_cred = prepare_creds(); -- if (!override_cred) -- goto out_drop_write; -- -- /* -- * CAP_SYS_ADMIN for setting xattr on whiteout, opaque dir -- * CAP_DAC_OVERRIDE for create in workdir -- * CAP_FOWNER for removing whiteout from sticky dir -- * CAP_FSETID for chmod of opaque dir -- * CAP_CHOWN for chown of opaque dir -- */ -- cap_raise(override_cred->cap_effective, CAP_SYS_ADMIN); -- cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); -- cap_raise(override_cred->cap_effective, CAP_FOWNER); -- cap_raise(override_cred->cap_effective, CAP_FSETID); -- cap_raise(override_cred->cap_effective, CAP_CHOWN); -- old_cred = override_creds(override_cred); -- } -+ if (old_opaque || new_opaque) -+ old_cred = ovl_override_creds(old->d_sb); - - if (overwrite && OVL_TYPE_MERGE_OR_LOWER(new_type) && new_is_dir) { - opaquedir = ovl_check_empty_and_clear(new); -@@ -942,10 +887,8 @@ out_dput_old: - out_unlock: - unlock_rename(new_upperdir, old_upperdir); - out_revert_creds: -- if (old_opaque || new_opaque) { -+ if (old_opaque || new_opaque) - revert_creds(old_cred); -- put_cred(override_cred); -- } - out_drop_write: - ovl_drop_write(old); - out: ---- a/fs/overlayfs/overlayfs.h -+++ b/fs/overlayfs/overlayfs.h -@@ -150,6 +150,7 @@ void ovl_drop_write(struct dentry *dentr - bool ovl_dentry_is_opaque(struct dentry *dentry); - void ovl_dentry_set_opaque(struct dentry *dentry, bool opaque); - bool ovl_is_whiteout(struct dentry *dentry); -+const struct cred *ovl_override_creds(struct super_block *sb); - void ovl_dentry_update(struct dentry *dentry, struct dentry *upperdentry); - struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry, - unsigned int flags); ---- a/fs/overlayfs/readdir.c -+++ b/fs/overlayfs/readdir.c -@@ -36,6 +36,7 @@ struct ovl_dir_cache { - - struct ovl_readdir_data { - struct dir_context ctx; -+ struct dentry *dentry; - bool is_lowest; - struct rb_root root; - struct list_head *list; -@@ -206,17 +207,8 @@ static int ovl_check_whiteouts(struct de - struct ovl_cache_entry *p; - struct dentry *dentry; - const struct cred *old_cred; -- struct cred *override_cred; -- -- override_cred = prepare_creds(); -- if (!override_cred) -- return -ENOMEM; - -- /* -- * CAP_DAC_OVERRIDE for lookup -- */ -- cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE); -- old_cred = override_creds(override_cred); -+ old_cred = ovl_override_creds(rdd->dentry->d_sb); - - err = mutex_lock_killable(&dir->d_inode->i_mutex); - if (!err) { -@@ -232,7 +224,6 @@ static int ovl_check_whiteouts(struct de - mutex_unlock(&dir->d_inode->i_mutex); - } - revert_creds(old_cred); -- put_cred(override_cred); - - return err; - } -@@ -288,6 +279,7 @@ static int ovl_dir_read_merged(struct de - struct path realpath; - struct ovl_readdir_data rdd = { - .ctx.actor = ovl_fill_merge, -+ .dentry = dentry, - .list = list, - .root = RB_ROOT, - .is_lowest = false, ---- a/fs/overlayfs/super.c -+++ b/fs/overlayfs/super.c -@@ -42,6 +42,8 @@ struct ovl_fs { - long lower_namelen; - /* pathnames of lower and upper dirs, for show_options */ - struct ovl_config config; -+ /* creds of process who forced instantiation of super block */ -+ const struct cred *creator_cred; - }; - - struct ovl_dir_cache; -@@ -246,6 +248,13 @@ bool ovl_is_whiteout(struct dentry *dent - return inode && IS_WHITEOUT(inode); - } - -+const struct cred *ovl_override_creds(struct super_block *sb) -+{ -+ struct ovl_fs *ofs = sb->s_fs_info; -+ -+ return override_creds(ofs->creator_cred); -+} -+ - static bool ovl_is_opaquedir(struct dentry *dentry) - { - int res; -@@ -587,6 +596,7 @@ static void ovl_put_super(struct super_b - kfree(ufs->config.lowerdir); - kfree(ufs->config.upperdir); - kfree(ufs->config.workdir); -+ put_cred(ufs->creator_cred); - kfree(ufs); - } - -@@ -1107,10 +1117,14 @@ static int ovl_fill_super(struct super_b - else - sb->s_d_op = &ovl_dentry_operations; - -+ ufs->creator_cred = prepare_creds(); -+ if (!ufs->creator_cred) -+ goto out_put_lower_mnt; -+ - err = -ENOMEM; - oe = ovl_alloc_entry(numlower); - if (!oe) -- goto out_put_lower_mnt; -+ goto out_put_cred; - - root_dentry = d_make_root(ovl_new_inode(sb, S_IFDIR, oe)); - if (!root_dentry) -@@ -1143,6 +1157,8 @@ static int ovl_fill_super(struct super_b - - out_free_oe: - kfree(oe); -+out_put_cred: -+ put_cred(ufs->creator_cred); - out_put_lower_mnt: - for (i = 0; i < ufs->numlower; i++) - mntput(ufs->lower_mnt[i]); diff --git a/target/linux/generic/patches-4.4/051-0005-ovl-proper-cleanup-of-workdir.patch b/target/linux/generic/patches-4.4/051-0005-ovl-proper-cleanup-of-workdir.patch deleted file mode 100644 index 627e19ea96..0000000000 --- a/target/linux/generic/patches-4.4/051-0005-ovl-proper-cleanup-of-workdir.patch +++ /dev/null @@ -1,131 +0,0 @@ -From eea2fb4851e9dcbab6b991aaf47e2e024f1f55a0 Mon Sep 17 00:00:00 2001 -From: Miklos Szeredi <mszeredi@redhat.com> -Date: Thu, 1 Sep 2016 11:11:59 +0200 -Subject: [PATCH] ovl: proper cleanup of workdir - -When mounting overlayfs it needs a clean "work" directory under the -supplied workdir. - -Previously the mount code removed this directory if it already existed and -created a new one. If the removal failed (e.g. directory was not empty) -then it fell back to a read-only mount not using the workdir. - -While this has never been reported, it is possible to get a non-empty -"work" dir from a previous mount of overlayfs in case of crash in the -middle of an operation using the work directory. - -In this case the left over state should be discarded and the overlay -filesystem will be consistent, guaranteed by the atomicity of operations on -moving to/from the workdir to the upper layer. - -This patch implements cleaning out any files left in workdir. It is -implemented using real recursion for simplicity, but the depth is limited -to 2, because the worst case is that of a directory containing whiteouts -under "work". - -Signed-off-by: Miklos Szeredi <mszeredi@redhat.com> -Cc: <stable@vger.kernel.org> ---- - fs/overlayfs/overlayfs.h | 2 ++ - fs/overlayfs/readdir.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++- - fs/overlayfs/super.c | 2 +- - 3 files changed, 65 insertions(+), 2 deletions(-) - ---- a/fs/overlayfs/overlayfs.h -+++ b/fs/overlayfs/overlayfs.h -@@ -165,6 +165,8 @@ int ovl_check_empty_dir(struct dentry *d - void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list); - void ovl_cache_free(struct list_head *list); - int ovl_check_d_type_supported(struct path *realpath); -+void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, -+ struct dentry *dentry, int level); - - /* inode.c */ - int ovl_setattr(struct dentry *dentry, struct iattr *attr); ---- a/fs/overlayfs/readdir.c -+++ b/fs/overlayfs/readdir.c -@@ -248,7 +248,7 @@ static inline int ovl_dir_read(struct pa - err = rdd->err; - } while (!err && rdd->count); - -- if (!err && rdd->first_maybe_whiteout) -+ if (!err && rdd->first_maybe_whiteout && rdd->dentry) - err = ovl_check_whiteouts(realpath->dentry, rdd); - - fput(realfile); -@@ -610,3 +610,64 @@ int ovl_check_d_type_supported(struct pa - - return rdd.d_type_supported; - } -+ -+static void ovl_workdir_cleanup_recurse(struct path *path, int level) -+{ -+ int err; -+ struct inode *dir = path->dentry->d_inode; -+ LIST_HEAD(list); -+ struct ovl_cache_entry *p; -+ struct ovl_readdir_data rdd = { -+ .ctx.actor = ovl_fill_merge, -+ .dentry = NULL, -+ .list = &list, -+ .root = RB_ROOT, -+ .is_lowest = false, -+ }; -+ -+ err = ovl_dir_read(path, &rdd); -+ if (err) -+ goto out; -+ -+ mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); -+ list_for_each_entry(p, &list, l_node) { -+ struct dentry *dentry; -+ -+ if (p->name[0] == '.') { -+ if (p->len == 1) -+ continue; -+ if (p->len == 2 && p->name[1] == '.') -+ continue; -+ } -+ dentry = lookup_one_len(p->name, path->dentry, p->len); -+ if (IS_ERR(dentry)) -+ continue; -+ if (dentry->d_inode) -+ ovl_workdir_cleanup(dir, path->mnt, dentry, level); -+ dput(dentry); -+ } -+ mutex_unlock(&dir->i_mutex); -+out: -+ ovl_cache_free(&list); -+} -+ -+void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt, -+ struct dentry *dentry, int level) -+{ -+ int err; -+ -+ if (!d_is_dir(dentry) || level > 1) { -+ ovl_cleanup(dir, dentry); -+ return; -+ } -+ -+ err = ovl_do_rmdir(dir, dentry); -+ if (err) { -+ struct path path = { .mnt = mnt, .dentry = dentry }; -+ -+ mutex_unlock(&dir->i_mutex); -+ ovl_workdir_cleanup_recurse(&path, level + 1); -+ mutex_lock_nested(&dir->i_mutex, I_MUTEX_PARENT); -+ ovl_cleanup(dir, dentry); -+ } -+} ---- a/fs/overlayfs/super.c -+++ b/fs/overlayfs/super.c -@@ -784,7 +784,7 @@ retry: - goto out_dput; - - retried = true; -- ovl_cleanup(dir, work); -+ ovl_workdir_cleanup(dir, mnt, work, 0); - dput(work); - goto retry; - } diff --git a/target/linux/generic/patches-4.4/052-02-ubifs-Implement-RENAME_WHITEOUT.patch b/target/linux/generic/patches-4.4/052-02-ubifs-Implement-RENAME_WHITEOUT.patch index c2ec904939..6d6ad28e96 100644 --- a/target/linux/generic/patches-4.4/052-02-ubifs-Implement-RENAME_WHITEOUT.patch +++ b/target/linux/generic/patches-4.4/052-02-ubifs-Implement-RENAME_WHITEOUT.patch @@ -244,7 +244,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> .setxattr = ubifs_setxattr, --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c -@@ -917,14 +917,15 @@ int ubifs_jnl_delete_inode(struct ubifs_ +@@ -922,14 +922,15 @@ int ubifs_jnl_delete_inode(struct ubifs_ * @sync: non-zero if the write-buffer has to be synchronized * * This function implements the re-name operation which may involve writing up @@ -262,7 +262,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> { void *p; union ubifs_key key; -@@ -980,13 +981,19 @@ int ubifs_jnl_rename(struct ubifs_info * +@@ -985,13 +986,19 @@ int ubifs_jnl_rename(struct ubifs_info * zero_dent_node_unused(dent); ubifs_prep_grp_node(c, dent, dlen1, 0); @@ -285,7 +285,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> dent2->nlen = cpu_to_le16(old_dentry->d_name.len); memcpy(dent2->name, old_dentry->d_name.name, old_dentry->d_name.len); dent2->name[old_dentry->d_name.len] = '\0'; -@@ -1035,16 +1042,26 @@ int ubifs_jnl_rename(struct ubifs_info * +@@ -1040,16 +1047,26 @@ int ubifs_jnl_rename(struct ubifs_info * if (err) goto out_ro; diff --git a/target/linux/generic/patches-4.4/052-03-ubifs-Implement-RENAME_EXCHANGE.patch b/target/linux/generic/patches-4.4/052-03-ubifs-Implement-RENAME_EXCHANGE.patch index 1830cd0eeb..97e0f66f24 100644 --- a/target/linux/generic/patches-4.4/052-03-ubifs-Implement-RENAME_EXCHANGE.patch +++ b/target/linux/generic/patches-4.4/052-03-ubifs-Implement-RENAME_EXCHANGE.patch @@ -104,7 +104,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> .setxattr = ubifs_setxattr, --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c -@@ -908,6 +908,147 @@ int ubifs_jnl_delete_inode(struct ubifs_ +@@ -913,6 +913,147 @@ int ubifs_jnl_delete_inode(struct ubifs_ } /** diff --git a/target/linux/generic/patches-4.4/052-04-ubifs-Use-move-variable-in-ubifs_rename.patch b/target/linux/generic/patches-4.4/052-04-ubifs-Use-move-variable-in-ubifs_rename.patch index 81129359d3..389af40b27 100644 --- a/target/linux/generic/patches-4.4/052-04-ubifs-Use-move-variable-in-ubifs_rename.patch +++ b/target/linux/generic/patches-4.4/052-04-ubifs-Use-move-variable-in-ubifs_rename.patch @@ -10,7 +10,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> --- a/fs/ubifs/journal.c +++ b/fs/ubifs/journal.c -@@ -1100,7 +1100,7 @@ int ubifs_jnl_rename(struct ubifs_info * +@@ -1105,7 +1105,7 @@ int ubifs_jnl_rename(struct ubifs_info * aligned_dlen1 = ALIGN(dlen1, 8); aligned_dlen2 = ALIGN(dlen2, 8); len = aligned_dlen1 + aligned_dlen2 + ALIGN(ilen, 8) + ALIGN(plen, 8); @@ -19,7 +19,7 @@ Signed-off-by: Richard Weinberger <richard@nod.at> len += plen; dent = kmalloc(len, GFP_NOFS); if (!dent) -@@ -1216,7 +1216,7 @@ int ubifs_jnl_rename(struct ubifs_info * +@@ -1221,7 +1221,7 @@ int ubifs_jnl_rename(struct ubifs_info * if (err) goto out_ro; diff --git a/target/linux/generic/patches-4.4/082-0001-USB-core-let-USB-device-know-device-node.patch b/target/linux/generic/patches-4.4/082-0001-USB-core-let-USB-device-know-device-node.patch index 901cdf7e83..1c8787907f 100644 --- a/target/linux/generic/patches-4.4/082-0001-USB-core-let-USB-device-know-device-node.patch +++ b/target/linux/generic/patches-4.4/082-0001-USB-core-let-USB-device-know-device-node.patch @@ -131,7 +131,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> #include <asm/io.h> #include <linux/scatterlist.h> -@@ -469,6 +470,7 @@ struct usb_device *usb_alloc_dev(struct +@@ -471,6 +472,7 @@ struct usb_device *usb_alloc_dev(struct dev->route = 0; dev->dev.parent = bus->controller; @@ -139,7 +139,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> dev_set_name(&dev->dev, "usb%d", bus->busnum); root_hub = 1; } else { -@@ -493,6 +495,14 @@ struct usb_device *usb_alloc_dev(struct +@@ -495,6 +497,14 @@ struct usb_device *usb_alloc_dev(struct dev->dev.parent = &parent->dev; dev_set_name(&dev->dev, "%d-%s", bus->busnum, dev->devpath); diff --git a/target/linux/generic/patches-4.4/082-0002-usb-core-usb_alloc_dev-fix-setting-of-portnum.patch b/target/linux/generic/patches-4.4/082-0002-usb-core-usb_alloc_dev-fix-setting-of-portnum.patch index 15cf4cae56..bbb64e65be 100644 --- a/target/linux/generic/patches-4.4/082-0002-usb-core-usb_alloc_dev-fix-setting-of-portnum.patch +++ b/target/linux/generic/patches-4.4/082-0002-usb-core-usb_alloc_dev-fix-setting-of-portnum.patch @@ -84,7 +84,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c -@@ -423,6 +423,7 @@ struct usb_device *usb_alloc_dev(struct +@@ -425,6 +425,7 @@ struct usb_device *usb_alloc_dev(struct struct usb_device *dev; struct usb_hcd *usb_hcd = bus_to_hcd(bus); unsigned root_hub = 0; @@ -92,7 +92,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) -@@ -497,11 +498,11 @@ struct usb_device *usb_alloc_dev(struct +@@ -499,11 +500,11 @@ struct usb_device *usb_alloc_dev(struct if (!parent->parent) { /* device under root hub's port */ diff --git a/target/linux/generic/patches-4.4/085-0004-leds-core-add-OF-variants-of-LED-registering-functio.patch b/target/linux/generic/patches-4.4/085-0004-leds-core-add-OF-variants-of-LED-registering-functio.patch index e02984041a..18da7f951a 100644 --- a/target/linux/generic/patches-4.4/085-0004-leds-core-add-OF-variants-of-LED-registering-functio.patch +++ b/target/linux/generic/patches-4.4/085-0004-leds-core-add-OF-variants-of-LED-registering-functio.patch @@ -58,7 +58,7 @@ Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> /** * led_classdev_unregister - unregisters a object of led_properties class. -@@ -269,12 +273,14 @@ static void devm_led_classdev_release(st +@@ -270,12 +274,14 @@ static void devm_led_classdev_release(st } /** @@ -77,7 +77,7 @@ Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> { struct led_classdev **dr; int rc; -@@ -283,7 +289,7 @@ int devm_led_classdev_register(struct de +@@ -284,7 +290,7 @@ int devm_led_classdev_register(struct de if (!dr) return -ENOMEM; @@ -86,7 +86,7 @@ Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> if (rc) { devres_free(dr); return rc; -@@ -294,7 +300,7 @@ int devm_led_classdev_register(struct de +@@ -295,7 +301,7 @@ int devm_led_classdev_register(struct de return 0; } diff --git a/target/linux/generic/patches-4.4/086-0001-thermal-of-thermal-Add-devm-version-of-thermal_zone_.patch b/target/linux/generic/patches-4.4/086-0001-thermal-of-thermal-Add-devm-version-of-thermal_zone_.patch index b551bac69d..4eb5711373 100644 --- a/target/linux/generic/patches-4.4/086-0001-thermal-of-thermal-Add-devm-version-of-thermal_zone_.patch +++ b/target/linux/generic/patches-4.4/086-0001-thermal-of-thermal-Add-devm-version-of-thermal_zone_.patch @@ -19,7 +19,7 @@ Signed-off-by: Eduardo Valentin <edubezval@gmail.com> --- a/drivers/thermal/of-thermal.c +++ b/drivers/thermal/of-thermal.c -@@ -559,6 +559,87 @@ void thermal_zone_of_sensor_unregister(s +@@ -562,6 +562,87 @@ void thermal_zone_of_sensor_unregister(s } EXPORT_SYMBOL_GPL(thermal_zone_of_sensor_unregister); diff --git a/target/linux/generic/patches-4.4/090-MIPS-c-r4k-Use-IPI-calls-for-CM-indexed-cache-ops.patch b/target/linux/generic/patches-4.4/090-MIPS-c-r4k-Use-IPI-calls-for-CM-indexed-cache-ops.patch index 0c1c0a4509..e45e5b884f 100644 --- a/target/linux/generic/patches-4.4/090-MIPS-c-r4k-Use-IPI-calls-for-CM-indexed-cache-ops.patch +++ b/target/linux/generic/patches-4.4/090-MIPS-c-r4k-Use-IPI-calls-for-CM-indexed-cache-ops.patch @@ -256,7 +256,7 @@ Cc: linux-mips@linux-mips.org instruction_hazard(); } -@@ -823,7 +901,12 @@ static void local_r4k_flush_cache_sigtra +@@ -825,7 +903,12 @@ static void local_r4k_flush_cache_sigtra static void r4k_flush_cache_sigtramp(unsigned long addr) { @@ -270,7 +270,7 @@ Cc: linux-mips@linux-mips.org } static void r4k_flush_icache_all(void) -@@ -837,6 +920,15 @@ struct flush_kernel_vmap_range_args { +@@ -839,6 +922,15 @@ struct flush_kernel_vmap_range_args { int size; }; @@ -286,7 +286,7 @@ Cc: linux-mips@linux-mips.org static inline void local_r4k_flush_kernel_vmap_range(void *args) { struct flush_kernel_vmap_range_args *vmra = args; -@@ -847,12 +939,8 @@ static inline void local_r4k_flush_kerne +@@ -849,12 +941,8 @@ static inline void local_r4k_flush_kerne * Aliases only affect the primary caches so don't bother with * S-caches or T-caches. */ @@ -301,7 +301,7 @@ Cc: linux-mips@linux-mips.org } static void r4k_flush_kernel_vmap_range(unsigned long vaddr, int size) -@@ -862,7 +950,12 @@ static void r4k_flush_kernel_vmap_range( +@@ -864,7 +952,12 @@ static void r4k_flush_kernel_vmap_range( args.vaddr = (unsigned long) vaddr; args.size = size; diff --git a/target/linux/generic/patches-4.4/093-MIPS-store-the-appended-dtb-address-in-a-variable.patch b/target/linux/generic/patches-4.4/093-MIPS-store-the-appended-dtb-address-in-a-variable.patch index d868d210aa..7b011d444c 100644 --- a/target/linux/generic/patches-4.4/093-MIPS-store-the-appended-dtb-address-in-a-variable.patch +++ b/target/linux/generic/patches-4.4/093-MIPS-store-the-appended-dtb-address-in-a-variable.patch @@ -36,7 +36,7 @@ Signed-off-by: Ralf Baechle <ralf@linux-mips.org> --- a/arch/mips/ath79/setup.c +++ b/arch/mips/ath79/setup.c -@@ -207,6 +207,8 @@ void __init plat_mem_setup(void) +@@ -208,6 +208,8 @@ void __init plat_mem_setup(void) fdt_start = fw_getenvl("fdt_start"); if (fdt_start) __dt_setup_arch((void *)KSEG0ADDR(fdt_start)); diff --git a/target/linux/generic/patches-4.4/160-usb-gadget-udc-net2280-add-usb2380-support.patch b/target/linux/generic/patches-4.4/160-usb-gadget-udc-net2280-add-usb2380-support.patch index 94f78102b7..0ad684fcea 100644 --- a/target/linux/generic/patches-4.4/160-usb-gadget-udc-net2280-add-usb2380-support.patch +++ b/target/linux/generic/patches-4.4/160-usb-gadget-udc-net2280-add-usb2380-support.patch @@ -112,7 +112,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> !list_empty(&ep->queue) && ep->td_dma) restart_dma(ep); ep->wedged = 0; -@@ -2394,7 +2394,7 @@ static int net2280_start(struct usb_gadg +@@ -2397,7 +2397,7 @@ static int net2280_start(struct usb_gadg */ net2280_led_active(dev, 1); @@ -121,7 +121,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> defect7374_enable_data_eps_zero(dev); ep0_start(dev); -@@ -3060,7 +3060,7 @@ static void handle_stat0_irqs(struct net +@@ -3066,7 +3066,7 @@ static void handle_stat0_irqs(struct net } ep->stopped = 0; dev->protocol_stall = 0; @@ -130,7 +130,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> if (ep->dev->quirks & PLX_2280) tmp = BIT(FIFO_OVERFLOW) | BIT(FIFO_UNDERFLOW); -@@ -3087,7 +3087,7 @@ static void handle_stat0_irqs(struct net +@@ -3093,7 +3093,7 @@ static void handle_stat0_irqs(struct net cpu_to_le32s(&u.raw[0]); cpu_to_le32s(&u.raw[1]); @@ -139,7 +139,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> defect7374_workaround(dev, u.r); tmp = 0; -@@ -3170,7 +3170,7 @@ static void handle_stat0_irqs(struct net +@@ -3176,7 +3176,7 @@ static void handle_stat0_irqs(struct net } else { ep_vdbg(dev, "%s clear halt\n", e->ep.name); clear_halt(e); @@ -148,7 +148,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> !list_empty(&e->queue) && e->td_dma) restart_dma(e); } -@@ -3192,7 +3192,7 @@ static void handle_stat0_irqs(struct net +@@ -3198,7 +3198,7 @@ static void handle_stat0_irqs(struct net if (e->ep.name == ep0name) goto do_stall; set_halt(e); @@ -157,7 +157,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> abort_dma(e); allow_status(ep); ep_vdbg(dev, "%s set halt\n", ep->ep.name); -@@ -3231,7 +3231,7 @@ do_stall: +@@ -3237,7 +3237,7 @@ do_stall: #undef w_length next_endpoints: @@ -166,7 +166,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> u32 mask = (BIT(ENDPOINT_0_INTERRUPT) | USB3380_IRQSTAT0_EP_INTR_MASK_IN | USB3380_IRQSTAT0_EP_INTR_MASK_OUT); -@@ -3392,7 +3392,7 @@ static void handle_stat1_irqs(struct net +@@ -3404,7 +3404,7 @@ __acquires(dev->lock) writel(tmp, &dma->dmastat); /* dma sync*/ @@ -175,7 +175,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> u32 r_dmacount = readl(&dma->dmacount); if (!ep->is_in && (r_dmacount & 0x00FFFFFF) && (tmp & BIT(DMA_TRANSACTION_DONE_INTERRUPT))) -@@ -3461,7 +3461,7 @@ static irqreturn_t net2280_irq(int irq, +@@ -3473,7 +3473,7 @@ static irqreturn_t net2280_irq(int irq, /* control requests and PIO */ handle_stat0_irqs(dev, readl(&dev->regs->irqstat0)); @@ -184,7 +184,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> /* re-enable interrupt to trigger any possible new interrupt */ u32 pciirqenb1 = readl(&dev->regs->pciirqenb1); writel(pciirqenb1 & 0x7FFFFFFF, &dev->regs->pciirqenb1); -@@ -3506,7 +3506,7 @@ static void net2280_remove(struct pci_de +@@ -3518,7 +3518,7 @@ static void net2280_remove(struct pci_de } if (dev->got_irq) free_irq(pdev->irq, dev); @@ -193,7 +193,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> pci_disable_msi(pdev); if (dev->regs) iounmap(dev->regs); -@@ -3586,7 +3586,7 @@ static int net2280_probe(struct pci_dev +@@ -3598,7 +3598,7 @@ static int net2280_probe(struct pci_dev dev->dep = (struct net2280_dep_regs __iomem *) (base + 0x0200); dev->epregs = (struct net2280_ep_regs __iomem *) (base + 0x0300); @@ -202,7 +202,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> u32 fsmvalue; u32 usbstat; dev->usb_ext = (struct usb338x_usb_ext_regs __iomem *) -@@ -3630,7 +3630,7 @@ static int net2280_probe(struct pci_dev +@@ -3642,7 +3642,7 @@ static int net2280_probe(struct pci_dev goto done; } @@ -211,7 +211,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> if (pci_enable_msi(pdev)) ep_err(dev, "Failed to enable MSI mode\n"); -@@ -3748,10 +3748,19 @@ static const struct pci_device_id pci_id +@@ -3760,10 +3760,19 @@ static const struct pci_device_id pci_id .class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe), .class_mask = ~0, .vendor = PCI_VENDOR_ID_PLX, @@ -232,7 +232,7 @@ Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> }, { .class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe), -@@ -3760,7 +3769,7 @@ static const struct pci_device_id pci_id +@@ -3772,7 +3781,7 @@ static const struct pci_device_id pci_id .device = 0x3382, .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, diff --git a/target/linux/generic/patches-4.4/201-extra_optimization.patch b/target/linux/generic/patches-4.4/201-extra_optimization.patch index f5f542e062..d9d24263f7 100644 --- a/target/linux/generic/patches-4.4/201-extra_optimization.patch +++ b/target/linux/generic/patches-4.4/201-extra_optimization.patch @@ -1,11 +1,11 @@ --- a/Makefile +++ b/Makefile -@@ -628,12 +628,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni +@@ -639,12 +639,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias) ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE --KBUILD_CFLAGS += -Os -+KBUILD_CFLAGS += -Os $(EXTRA_OPTIMIZATION) +-KBUILD_CFLAGS += $(call cc-option,-Oz,-Os) ++KBUILD_CFLAGS += $(call cc-option,-Oz,-Os) $(EXTRA_OPTIMIZATION) else ifdef CONFIG_PROFILE_ALL_BRANCHES -KBUILD_CFLAGS += -O2 diff --git a/target/linux/generic/patches-4.4/202-reduce_module_size.patch b/target/linux/generic/patches-4.4/202-reduce_module_size.patch index 1aabf3e722..b46600537f 100644 --- a/target/linux/generic/patches-4.4/202-reduce_module_size.patch +++ b/target/linux/generic/patches-4.4/202-reduce_module_size.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -405,7 +405,7 @@ KBUILD_CFLAGS_KERNEL := +@@ -400,7 +400,7 @@ KBUILD_CFLAGS_KERNEL := KBUILD_AFLAGS := -D__ASSEMBLY__ $(call cc-option,-fno-PIE) KBUILD_AFLAGS_MODULE := -DMODULE KBUILD_CFLAGS_MODULE := -DMODULE diff --git a/target/linux/generic/patches-4.4/221-module_exports.patch b/target/linux/generic/patches-4.4/221-module_exports.patch index 44c0a6dec6..bd7022f20b 100644 --- a/target/linux/generic/patches-4.4/221-module_exports.patch +++ b/target/linux/generic/patches-4.4/221-module_exports.patch @@ -54,7 +54,7 @@ } --- a/scripts/Makefile.build +++ b/scripts/Makefile.build -@@ -372,7 +372,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $( +@@ -380,7 +380,7 @@ targets += $(extra-y) $(MAKECMDGOALS) $( # Linker scripts preprocessor (.lds.S -> .lds) # --------------------------------------------------------------------------- quiet_cmd_cpp_lds_S = LDS $@ diff --git a/target/linux/generic/patches-4.4/304-mips_disable_fpu.patch b/target/linux/generic/patches-4.4/304-mips_disable_fpu.patch index a08564dcea..60b576c1a4 100644 --- a/target/linux/generic/patches-4.4/304-mips_disable_fpu.patch +++ b/target/linux/generic/patches-4.4/304-mips_disable_fpu.patch @@ -86,21 +86,21 @@ v2: incorporated changes suggested by Jonas Gorski extern int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx, int has_fpu, void *__user *fault_addr); -+#else /* no CONFIG_MIPS_FPU_EMULATOR */ ++#else /* no CONFIG_MIPS_FPU_EMULATOR */ +static inline int do_dsemulret(struct pt_regs *xcp) +{ -+ return 0; /* 0 means error, should never get here anyway */ ++ return 0; /* 0 means error, should never get here anyway */ +} + +static inline int fpu_emulator_cop1Handler(struct pt_regs *xcp, -+ struct mips_fpu_struct *ctx, int has_fpu, -+ void *__user *fault_addr) ++ struct mips_fpu_struct *ctx, int has_fpu, ++ void *__user *fault_addr) +{ + *fault_addr = NULL; -+ return SIGILL; /* we don't speak MIPS FPU */ ++ return SIGILL; /* we don't speak MIPS FPU */ +} -+#endif /* CONFIG_MIPS_FPU_EMULATOR */ ++#endif /* CONFIG_MIPS_FPU_EMULATOR */ + + void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr, + struct task_struct *tsk); int process_fpemu_return(int sig, void __user *fault_addr, - unsigned long fcr31); - int mm_isBranchInstr(struct pt_regs *regs, struct mm_decoded_insn dec_insn, diff --git a/target/linux/generic/patches-4.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch b/target/linux/generic/patches-4.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch index a69d197e62..3a09572bde 100644 --- a/target/linux/generic/patches-4.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch +++ b/target/linux/generic/patches-4.4/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch @@ -210,7 +210,7 @@ Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com> /* * The generic kexec code builds a page list with physical -@@ -98,15 +210,16 @@ machine_kexec(struct kimage *image) +@@ -101,15 +213,16 @@ machine_kexec(struct kimage *image) /* * we do not want to be bothered. */ diff --git a/target/linux/generic/patches-4.4/465-m25p80-mx-disable-software-protection.patch b/target/linux/generic/patches-4.4/465-m25p80-mx-disable-software-protection.patch index e81ebbb3fa..6782b1d380 100644 --- a/target/linux/generic/patches-4.4/465-m25p80-mx-disable-software-protection.patch +++ b/target/linux/generic/patches-4.4/465-m25p80-mx-disable-software-protection.patch @@ -4,7 +4,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1166,6 +1166,7 @@ int spi_nor_scan(struct spi_nor *nor, co +@@ -1172,6 +1172,7 @@ int spi_nor_scan(struct spi_nor *nor, co if (JEDEC_MFR(info) == SNOR_MFR_ATMEL || JEDEC_MFR(info) == SNOR_MFR_INTEL || diff --git a/target/linux/generic/patches-4.4/475-mtd-spi-nor-add-macronix-mx25u25635f.patch b/target/linux/generic/patches-4.4/475-mtd-spi-nor-add-macronix-mx25u25635f.patch index d868a7da25..c21d19bf54 100644 --- a/target/linux/generic/patches-4.4/475-mtd-spi-nor-add-macronix-mx25u25635f.patch +++ b/target/linux/generic/patches-4.4/475-mtd-spi-nor-add-macronix-mx25u25635f.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -725,6 +725,7 @@ static const struct flash_info spi_nor_i +@@ -731,6 +731,7 @@ static const struct flash_info spi_nor_i { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) }, { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, 0) }, diff --git a/target/linux/generic/patches-4.4/477-mtd-add-spi-nor-add-mx25u3235f.patch b/target/linux/generic/patches-4.4/477-mtd-add-spi-nor-add-mx25u3235f.patch index fa1ab3fa06..1be68e1b83 100644 --- a/target/linux/generic/patches-4.4/477-mtd-add-spi-nor-add-mx25u3235f.patch +++ b/target/linux/generic/patches-4.4/477-mtd-add-spi-nor-add-mx25u3235f.patch @@ -1,6 +1,6 @@ --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -722,6 +722,7 @@ static const struct flash_info spi_nor_i +@@ -728,6 +728,7 @@ static const struct flash_info spi_nor_i { "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, SECT_4K) }, { "mx25l3255e", INFO(0xc29e16, 0, 64 * 1024, 64, SECT_4K) }, { "mx25l6405d", INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K) }, diff --git a/target/linux/generic/patches-4.4/530-jffs2_make_lzma_available.patch b/target/linux/generic/patches-4.4/530-jffs2_make_lzma_available.patch index 1a4b043508..bde7a986c7 100644 --- a/target/linux/generic/patches-4.4/530-jffs2_make_lzma_available.patch +++ b/target/linux/generic/patches-4.4/530-jffs2_make_lzma_available.patch @@ -206,7 +206,7 @@ +} --- a/fs/jffs2/super.c +++ b/fs/jffs2/super.c -@@ -375,14 +375,41 @@ static int __init init_jffs2_fs(void) +@@ -373,14 +373,41 @@ static int __init init_jffs2_fs(void) BUILD_BUG_ON(sizeof(struct jffs2_raw_inode) != 68); BUILD_BUG_ON(sizeof(struct jffs2_raw_summary) != 32); diff --git a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch index f1c7ab1d9c..ca23150d7d 100644 --- a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch +++ b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch @@ -172,7 +172,7 @@ Implement optinal multicast->unicast conversion for igmp snooping if (err) break; } -@@ -1432,7 +1458,8 @@ br_multicast_leave_group(struct net_brid +@@ -1439,7 +1465,8 @@ br_multicast_leave_group(struct net_brid struct net_bridge_port *port, struct br_ip *group, struct bridge_mcast_other_query *other_query, @@ -182,7 +182,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct net_bridge_mdb_htable *mdb; struct net_bridge_mdb_entry *mp; -@@ -1456,7 +1483,7 @@ br_multicast_leave_group(struct net_brid +@@ -1463,7 +1490,7 @@ br_multicast_leave_group(struct net_brid for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL; pp = &p->next) { @@ -191,7 +191,7 @@ Implement optinal multicast->unicast conversion for igmp snooping continue; rcu_assign_pointer(*pp, p->next); -@@ -1519,7 +1546,7 @@ br_multicast_leave_group(struct net_brid +@@ -1526,7 +1553,7 @@ br_multicast_leave_group(struct net_brid for (p = mlock_dereference(mp->ports, br); p != NULL; p = mlock_dereference(p->next, br)) { @@ -200,7 +200,7 @@ Implement optinal multicast->unicast conversion for igmp snooping continue; if (!hlist_unhashed(&p->mglist) && -@@ -1537,8 +1564,8 @@ out: +@@ -1544,8 +1571,8 @@ out: static void br_ip4_multicast_leave_group(struct net_bridge *br, struct net_bridge_port *port, @@ -211,7 +211,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; struct bridge_mcast_own_query *own_query; -@@ -1553,14 +1580,14 @@ static void br_ip4_multicast_leave_group +@@ -1560,14 +1587,14 @@ static void br_ip4_multicast_leave_group br_group.vid = vid; br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query, @@ -228,7 +228,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; struct bridge_mcast_own_query *own_query; -@@ -1575,7 +1602,7 @@ static void br_ip6_multicast_leave_group +@@ -1582,7 +1609,7 @@ static void br_ip6_multicast_leave_group br_group.vid = vid; br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query, @@ -237,7 +237,7 @@ Implement optinal multicast->unicast conversion for igmp snooping } #endif -@@ -1584,6 +1611,7 @@ static int br_multicast_ipv4_rcv(struct +@@ -1591,6 +1618,7 @@ static int br_multicast_ipv4_rcv(struct struct sk_buff *skb, u16 vid) { @@ -245,7 +245,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct sk_buff *skb_trimmed = NULL; struct igmphdr *ih; int err; -@@ -1600,12 +1628,13 @@ static int br_multicast_ipv4_rcv(struct +@@ -1607,12 +1635,13 @@ static int br_multicast_ipv4_rcv(struct BR_INPUT_SKB_CB(skb)->igmp = 1; ih = igmp_hdr(skb); @@ -260,7 +260,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; case IGMPV3_HOST_MEMBERSHIP_REPORT: err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid); -@@ -1614,7 +1643,7 @@ static int br_multicast_ipv4_rcv(struct +@@ -1621,7 +1650,7 @@ static int br_multicast_ipv4_rcv(struct err = br_ip4_multicast_query(br, port, skb_trimmed, vid); break; case IGMP_HOST_LEAVE_MESSAGE: @@ -269,7 +269,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; } -@@ -1630,6 +1659,7 @@ static int br_multicast_ipv6_rcv(struct +@@ -1637,6 +1666,7 @@ static int br_multicast_ipv6_rcv(struct struct sk_buff *skb, u16 vid) { @@ -277,7 +277,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct sk_buff *skb_trimmed = NULL; struct mld_msg *mld; int err; -@@ -1649,8 +1679,9 @@ static int br_multicast_ipv6_rcv(struct +@@ -1656,8 +1686,9 @@ static int br_multicast_ipv6_rcv(struct switch (mld->mld_type) { case ICMPV6_MGM_REPORT: @@ -288,7 +288,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; case ICMPV6_MLD2_REPORT: err = br_ip6_multicast_mld2_report(br, port, skb_trimmed, vid); -@@ -1659,7 +1690,8 @@ static int br_multicast_ipv6_rcv(struct +@@ -1666,7 +1697,8 @@ static int br_multicast_ipv6_rcv(struct err = br_ip6_multicast_query(br, port, skb_trimmed, vid); break; case ICMPV6_MGM_REDUCTION: diff --git a/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch b/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch index eb7c4d8fd4..9350503415 100644 --- a/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch +++ b/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch @@ -296,15 +296,15 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> __skb_tunnel_rx(skb, t->dev, t->net); -@@ -1148,6 +1285,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str +@@ -1153,6 +1290,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str __u32 mtu; u8 tproto; int err; + struct __ip6_tnl_fmr *fmr; - tproto = ACCESS_ONCE(t->parms.proto); - if ((tproto != IPPROTO_IPV6 && tproto != 0) || -@@ -1178,6 +1316,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str + if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) + return -1; +@@ -1187,6 +1325,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) fl6.flowi6_mark = skb->mark; @@ -323,7 +323,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu); if (err != 0) { if (err == -EMSGSIZE) -@@ -1292,6 +1442,14 @@ ip6_tnl_change(struct ip6_tnl *t, const +@@ -1301,6 +1451,14 @@ ip6_tnl_change(struct ip6_tnl *t, const t->parms.flowinfo = p->flowinfo; t->parms.link = p->link; t->parms.proto = p->proto; @@ -338,7 +338,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> dst_cache_reset(&t->dst_cache); ip6_tnl_link_config(t); return 0; -@@ -1330,6 +1488,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ +@@ -1339,6 +1497,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ p->flowinfo = u->flowinfo; p->link = u->link; p->proto = u->proto; @@ -346,7 +346,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> memcpy(p->name, u->name, sizeof(u->name)); } -@@ -1625,6 +1784,15 @@ static int ip6_tnl_validate(struct nlatt +@@ -1634,6 +1793,15 @@ static int ip6_tnl_validate(struct nlatt return 0; } @@ -362,7 +362,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> static void ip6_tnl_netlink_parms(struct nlattr *data[], struct __ip6_tnl_parm *parms) { -@@ -1656,6 +1824,46 @@ static void ip6_tnl_netlink_parms(struct +@@ -1665,6 +1833,46 @@ static void ip6_tnl_netlink_parms(struct if (data[IFLA_IPTUN_PROTO]) parms->proto = nla_get_u8(data[IFLA_IPTUN_PROTO]); @@ -409,7 +409,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> } static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev, -@@ -1708,6 +1916,12 @@ static void ip6_tnl_dellink(struct net_d +@@ -1717,6 +1925,12 @@ static void ip6_tnl_dellink(struct net_d static size_t ip6_tnl_get_size(const struct net_device *dev) { @@ -422,7 +422,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> return /* IFLA_IPTUN_LINK */ nla_total_size(4) + -@@ -1725,6 +1939,24 @@ static size_t ip6_tnl_get_size(const str +@@ -1734,6 +1948,24 @@ static size_t ip6_tnl_get_size(const str nla_total_size(4) + /* IFLA_IPTUN_PROTO */ nla_total_size(1) + @@ -447,7 +447,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> 0; } -@@ -1732,6 +1964,9 @@ static int ip6_tnl_fill_info(struct sk_b +@@ -1741,6 +1973,9 @@ static int ip6_tnl_fill_info(struct sk_b { struct ip6_tnl *tunnel = netdev_priv(dev); struct __ip6_tnl_parm *parm = &tunnel->parms; @@ -457,7 +457,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) || nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) || -@@ -1740,8 +1975,27 @@ static int ip6_tnl_fill_info(struct sk_b +@@ -1749,8 +1984,27 @@ static int ip6_tnl_fill_info(struct sk_b nla_put_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) || nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) || nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) || @@ -486,7 +486,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org> return 0; nla_put_failure: -@@ -1765,6 +2019,7 @@ static const struct nla_policy ip6_tnl_p +@@ -1774,6 +2028,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.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch b/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch index 76e235a8fa..1d33e421ff 100644 --- a/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch +++ b/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch @@ -143,7 +143,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> static const struct rt6_info ip6_blk_hole_entry_template = { .dst = { .__refcnt = ATOMIC_INIT(1), -@@ -1902,6 +1919,11 @@ static struct rt6_info *ip6_route_info_c +@@ -1906,6 +1923,11 @@ static struct rt6_info *ip6_route_info_c rt->dst.output = ip6_pkt_prohibit_out; rt->dst.input = ip6_pkt_prohibit; break; @@ -155,7 +155,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> case RTN_THROW: case RTN_UNREACHABLE: default: -@@ -2505,6 +2527,17 @@ static int ip6_pkt_prohibit_out(struct n +@@ -2509,6 +2531,17 @@ static int ip6_pkt_prohibit_out(struct n return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); } @@ -173,7 +173,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> /* * Allocate a dst for local (unicast / anycast) address. */ -@@ -2749,7 +2782,8 @@ static int rtm_to_fib6_config(struct sk_ +@@ -2753,7 +2786,8 @@ static int rtm_to_fib6_config(struct sk_ if (rtm->rtm_type == RTN_UNREACHABLE || rtm->rtm_type == RTN_BLACKHOLE || rtm->rtm_type == RTN_PROHIBIT || @@ -183,7 +183,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> cfg->fc_flags |= RTF_REJECT; if (rtm->rtm_type == RTN_LOCAL) -@@ -3102,6 +3136,9 @@ static int rt6_fill_node(struct net *net +@@ -3106,6 +3140,9 @@ static int rt6_fill_node(struct net *net case -EACCES: rtm->rtm_type = RTN_PROHIBIT; break; @@ -193,7 +193,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> case -EAGAIN: rtm->rtm_type = RTN_THROW; break; -@@ -3381,6 +3418,8 @@ static int ip6_route_dev_notify(struct n +@@ -3385,6 +3422,8 @@ static int ip6_route_dev_notify(struct n #ifdef CONFIG_IPV6_MULTIPLE_TABLES net->ipv6.ip6_prohibit_entry->dst.dev = dev; net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); @@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> net->ipv6.ip6_blk_hole_entry->dst.dev = dev; net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); #endif -@@ -3392,6 +3431,7 @@ static int ip6_route_dev_notify(struct n +@@ -3396,6 +3435,7 @@ static int ip6_route_dev_notify(struct n in6_dev_put(net->ipv6.ip6_null_entry->rt6i_idev); #ifdef CONFIG_IPV6_MULTIPLE_TABLES in6_dev_put(net->ipv6.ip6_prohibit_entry->rt6i_idev); @@ -210,7 +210,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> in6_dev_put(net->ipv6.ip6_blk_hole_entry->rt6i_idev); #endif } -@@ -3607,6 +3647,17 @@ static int __net_init ip6_route_net_init +@@ -3611,6 +3651,17 @@ static int __net_init ip6_route_net_init net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, ip6_template_metrics, true); @@ -228,7 +228,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> #endif net->ipv6.sysctl.flush_delay = 0; -@@ -3625,6 +3676,8 @@ out: +@@ -3629,6 +3680,8 @@ out: return ret; #ifdef CONFIG_IPV6_MULTIPLE_TABLES @@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> out_ip6_prohibit_entry: kfree(net->ipv6.ip6_prohibit_entry); out_ip6_null_entry: -@@ -3642,6 +3695,7 @@ static void __net_exit ip6_route_net_exi +@@ -3646,6 +3699,7 @@ static void __net_exit ip6_route_net_exi #ifdef CONFIG_IPV6_MULTIPLE_TABLES kfree(net->ipv6.ip6_prohibit_entry); kfree(net->ipv6.ip6_blk_hole_entry); @@ -245,7 +245,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org> #endif dst_entries_destroy(&net->ipv6.ip6_dst_ops); } -@@ -3715,6 +3769,9 @@ void __init ip6_route_init_special_entri +@@ -3719,6 +3773,9 @@ void __init ip6_route_init_special_entri init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); diff --git a/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch b/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch index be4d032f27..0734bfc5af 100644 --- a/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch +++ b/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4278,6 +4278,9 @@ static enum gro_result dev_gro_receive(s +@@ -4300,6 +4300,9 @@ static enum gro_result dev_gro_receive(s enum gro_result ret; int grow; @@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!(skb->dev->features & NETIF_F_GRO)) goto normal; -@@ -5444,6 +5447,48 @@ static void __netdev_adjacent_dev_unlink +@@ -5470,6 +5473,48 @@ static void __netdev_adjacent_dev_unlink &upper_dev->adj_list.lower); } @@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static int __netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev, bool master, void *private) -@@ -5515,6 +5560,7 @@ static int __netdev_upper_dev_link(struc +@@ -5541,6 +5586,7 @@ static int __netdev_upper_dev_link(struc goto rollback_lower_mesh; } @@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, &changeupper_info.info); return 0; -@@ -5641,6 +5687,7 @@ void netdev_upper_dev_unlink(struct net_ +@@ -5667,6 +5713,7 @@ void netdev_upper_dev_unlink(struct net_ list_for_each_entry(i, &upper_dev->all_adj_list.upper, list) __netdev_adjacent_dev_unlink(dev, i->dev, i->ref_nr); @@ -92,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, &changeupper_info.info); } -@@ -6181,6 +6228,7 @@ int dev_set_mac_address(struct net_devic +@@ -6209,6 +6256,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/patches-4.4/721-phy_packets.patch b/target/linux/generic/patches-4.4/721-phy_packets.patch index 39dc5ccbfc..f17c7bd556 100644 --- a/target/linux/generic/patches-4.4/721-phy_packets.patch +++ b/target/linux/generic/patches-4.4/721-phy_packets.patch @@ -52,7 +52,7 @@ /** * pskb_trim_unique - remove end from a paged unique (not cloned) buffer * @skb: buffer to alter -@@ -2312,16 +2316,6 @@ static inline struct sk_buff *dev_alloc_ +@@ -2314,16 +2318,6 @@ static inline struct sk_buff *dev_alloc_ } @@ -86,7 +86,7 @@ help --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -2754,10 +2754,20 @@ static int xmit_one(struct sk_buff *skb, +@@ -2776,10 +2776,20 @@ static int xmit_one(struct sk_buff *skb, if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all)) dev_queue_xmit_nit(skb, dev); diff --git a/target/linux/generic/patches-4.4/810-pci_disable_common_quirks.patch b/target/linux/generic/patches-4.4/810-pci_disable_common_quirks.patch index e5c9043065..8e9b6e857c 100644 --- a/target/linux/generic/patches-4.4/810-pci_disable_common_quirks.patch +++ b/target/linux/generic/patches-4.4/810-pci_disable_common_quirks.patch @@ -40,7 +40,7 @@ /* * Some BIOS implementations leave the Intel GPU interrupts enabled, * even though no one is handling them (f.e. i915 driver is never loaded). -@@ -3065,6 +3069,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN +@@ -3069,6 +3073,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IN DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0152, disable_igfx_irq); diff --git a/target/linux/generic/patches-4.4/902-debloat_proc.patch b/target/linux/generic/patches-4.4/902-debloat_proc.patch index a385e45aa7..d367577cbf 100644 --- a/target/linux/generic/patches-4.4/902-debloat_proc.patch +++ b/target/linux/generic/patches-4.4/902-debloat_proc.patch @@ -133,7 +133,7 @@ } --- a/mm/vmstat.c +++ b/mm/vmstat.c -@@ -1558,10 +1558,12 @@ static int __init setup_vmstat(void) +@@ -1560,10 +1560,12 @@ static int __init setup_vmstat(void) cpu_notifier_register_done(); #endif #ifdef CONFIG_PROC_FS |