diff options
22 files changed, 120 insertions, 107 deletions
diff --git a/include/kernel-version.mk b/include/kernel-version.mk index 1911176..340cb4d 100644 --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -17,6 +17,9 @@ endif ifeq ($(LINUX_VERSION),3.9.8) LINUX_KERNEL_MD5SUM:=04d74575ef1c484ad00be61f32bb4557 endif +ifeq ($(LINUX_VERSION),3.10) + LINUX_KERNEL_MD5SUM:=4f25cd5bec5f8d5a7d935b3f2ccb8481 +endif # disable the md5sum check for unknown kernel versions LINUX_KERNEL_MD5SUM?=x diff --git a/target/linux/generic/config-3.10 b/target/linux/generic/config-3.10 index 1e40bdb..7c65537 100644 --- a/target/linux/generic/config-3.10 +++ b/target/linux/generic/config-3.10 @@ -32,6 +32,7 @@ CONFIG_AIO=y # CONFIG_ALCHEMY_GPIO_INDIRECT is not set # CONFIG_ALIM7101_WDT is not set # CONFIG_ALTERA_STAPL is not set +# CONFIG_ALX is not set # CONFIG_AMD8111_ETH is not set # CONFIG_AMD_PHY is not set # CONFIG_AMIGA_PARTITION is not set diff --git a/target/linux/generic/patches-3.10/100-overlayfs.patch b/target/linux/generic/patches-3.10/100-overlayfs.patch index e8896aa..5d1c5f6 100644 --- a/target/linux/generic/patches-3.10/100-overlayfs.patch +++ b/target/linux/generic/patches-3.10/100-overlayfs.patch @@ -243,7 +243,7 @@ will be called when part or all of the page is to be removed --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -6009,6 +6009,13 @@ F: drivers/scsi/osd/ +@@ -6019,6 +6019,13 @@ F: drivers/scsi/osd/ F: include/scsi/osd_* F: fs/exofs/ @@ -287,7 +287,7 @@ + + rc = -EINVAL; + if (s->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { -+ printk(KERN_ERR "eCryptfs: maximum fs stacking depth exceeded\n"); ++ pr_err("eCryptfs: maximum fs stacking depth exceeded\n"); + goto out_free; + } @@ -307,6 +307,19 @@ * namespace.c */ extern int copy_mount_options(const void __user *, unsigned long *); +@@ -132,12 +127,6 @@ extern struct dentry *__d_alloc(struct s + extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *); + + /* +- * splice.c +- */ +-extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, +- loff_t *opos, size_t len, unsigned int flags); +- +-/* + * pipe.c + */ + extern const struct file_operations pipefifo_fops; --- a/fs/namei.c +++ b/fs/namei.c @@ -402,6 +402,7 @@ int __inode_permission(struct inode *ino @@ -335,10 +348,19 @@ goto out; --- a/fs/namespace.c +++ b/fs/namespace.c -@@ -1442,6 +1442,24 @@ void drop_collected_mounts(struct vfsmou +@@ -1442,6 +1442,33 @@ void drop_collected_mounts(struct vfsmou namespace_unlock(); } ++/** ++ * clone_private_mount - create a private clone of a path ++ * ++ * This creates a new vfsmount, which will be the clone of @path. The new will ++ * not be attached anywhere in the namespace and will be private (i.e. changes ++ * to the originating mount won't be propagated into this). ++ * ++ * Release with mntput(). ++ */ +struct vfsmount *clone_private_mount(struct path *path) +{ + struct mount *old_mnt = real_mount(path->mnt); @@ -350,8 +372,8 @@ + down_read(&namespace_sem); + new_mnt = clone_mnt(old_mnt, path->dentry, CL_PRIVATE); + up_read(&namespace_sem); -+ if (!new_mnt) -+ return ERR_PTR(-ENOMEM); ++ if (IS_ERR(new_mnt)) ++ return ERR_CAST(new_mnt); + + return &new_mnt->mnt; +} @@ -401,11 +423,17 @@ int lookup_flags = 0; --- /dev/null +++ b/fs/overlayfs/Kconfig -@@ -0,0 +1,4 @@ +@@ -0,0 +1,10 @@ +config OVERLAYFS_FS + tristate "Overlay filesystem support" + help -+ Add support for overlay filesystem. ++ An overlay filesystem combines two filesystems - an 'upper' filesystem ++ and a 'lower' filesystem. When a name exists in both filesystems, the ++ object in the 'upper' filesystem is visible while the object in the ++ 'lower' filesystem is either hidden or, in the case of directories, ++ merged with the 'upper' object. ++ ++ For more information see Documentation/filesystems/overlayfs.txt --- /dev/null +++ b/fs/overlayfs/Makefile @@ -0,0 +1,7 @@ @@ -418,7 +446,7 @@ +overlayfs-objs := super.o inode.o dir.o readdir.o copy_up.o --- /dev/null +++ b/fs/overlayfs/copy_up.c -@@ -0,0 +1,385 @@ +@@ -0,0 +1,387 @@ +/* + * + * Copyright (C) 2011 Novell Inc. @@ -494,6 +522,8 @@ +{ + struct file *old_file; + struct file *new_file; ++ loff_t old_pos = 0; ++ loff_t new_pos = 0; + int error = 0; + + if (len == 0) @@ -511,7 +541,6 @@ + + /* FIXME: copy up sparse files efficiently */ + while (len) { -+ loff_t offset = new_file->f_pos; + size_t this_len = OVL_COPY_UP_CHUNK_SIZE; + long bytes; + @@ -523,8 +552,9 @@ + break; + } + -+ bytes = do_splice_direct(old_file, &offset, new_file, this_len, -+ SPLICE_F_MOVE); ++ bytes = do_splice_direct(old_file, &old_pos, ++ new_file, &new_pos, ++ this_len, SPLICE_F_MOVE); + if (bytes <= 0) { + error = bytes; + break; @@ -806,7 +836,7 @@ +} --- /dev/null +++ b/fs/overlayfs/dir.c -@@ -0,0 +1,604 @@ +@@ -0,0 +1,605 @@ +/* + * + * Copyright (C) 2011 Novell Inc. @@ -881,7 +911,7 @@ + * There's no way to recover from failure to whiteout. + * What should we do? Log a big fat error and... ? + */ -+ printk(KERN_ERR "overlayfs: ERROR - failed to whiteout '%s'\n", ++ pr_err("overlayfs: ERROR - failed to whiteout '%s'\n", + dentry->d_name.name); + } + @@ -1254,8 +1284,10 @@ + } + newinode = ovl_new_inode(old->d_sb, newdentry->d_inode->i_mode, + new->d_fsdata); -+ if (!newinode) ++ if (!newinode) { ++ err = -ENOMEM; + goto link_fail; ++ } + ovl_copyattr(upperdir->d_inode, newinode); + + ovl_dentry_version_inc(new->d_parent); @@ -1272,7 +1304,6 @@ + mutex_unlock(&upperdir->d_inode->i_mutex); +out: + return err; -+ +} + +static int ovl_rename(struct inode *olddir, struct dentry *old, @@ -2218,7 +2249,7 @@ + loff_t res; + struct ovl_dir_file *od = file->private_data; + -+ mutex_lock(&file->f_dentry->d_inode->i_mutex); ++ mutex_lock(&file_inode(file)->i_mutex); + if (!file->f_pos) + ovl_dir_reset(file); + @@ -2248,7 +2279,7 @@ + res = offset; + } +out_unlock: -+ mutex_unlock(&file->f_dentry->d_inode->i_mutex); ++ mutex_unlock(&file_inode(file)->i_mutex); + + return res; +} @@ -2394,7 +2425,7 @@ + + dentry = lookup_one_len(p->name, upperdir, p->len); + if (IS_ERR(dentry)) { -+ printk(KERN_WARNING ++ pr_warn( + "overlayfs: failed to lookup whiteout %.*s: %li\n", + p->len, p->name, PTR_ERR(dentry)); + continue; @@ -2402,7 +2433,7 @@ + ret = vfs_unlink(upperdir->d_inode, dentry); + dput(dentry); + if (ret) -+ printk(KERN_WARNING ++ pr_warn( + "overlayfs: failed to unlink whiteout %.*s: %i\n", + p->len, p->name, ret); + } @@ -2818,7 +2849,6 @@ + +struct file *ovl_path_open(struct path *path, int flags) +{ -+ path_get(path); + return dentry_open(path, flags, current_cred()); +} + @@ -2906,15 +2936,15 @@ +}; + +enum { -+ Opt_lowerdir, -+ Opt_upperdir, -+ Opt_err, ++ OPT_LOWERDIR, ++ OPT_UPPERDIR, ++ OPT_ERR, +}; + +static const match_table_t ovl_tokens = { -+ {Opt_lowerdir, "lowerdir=%s"}, -+ {Opt_upperdir, "upperdir=%s"}, -+ {Opt_err, NULL} ++ {OPT_LOWERDIR, "lowerdir=%s"}, ++ {OPT_UPPERDIR, "upperdir=%s"}, ++ {OPT_ERR, NULL} +}; + +static int ovl_parse_opt(char *opt, struct ovl_config *config) @@ -2933,14 +2963,14 @@ + + token = match_token(p, ovl_tokens, args); + switch (token) { -+ case Opt_upperdir: ++ case OPT_UPPERDIR: + kfree(config->upperdir); + config->upperdir = match_strdup(&args[0]); + if (!config->upperdir) + return -ENOMEM; + break; + -+ case Opt_lowerdir: ++ case OPT_LOWERDIR: + kfree(config->lowerdir); + config->lowerdir = match_strdup(&args[0]); + if (!config->lowerdir) @@ -2976,7 +3006,7 @@ + + err = -EINVAL; + if (!ufs->config.upperdir || !ufs->config.lowerdir) { -+ printk(KERN_ERR "overlayfs: missing upperdir or lowerdir\n"); ++ pr_err("overlayfs: missing upperdir or lowerdir\n"); + goto out_free_config; + } + @@ -2999,7 +3029,7 @@ + + err = vfs_statfs(&lowerpath, &statfs); + if (err) { -+ printk(KERN_ERR "overlayfs: statfs failed on lowerpath\n"); ++ pr_err("overlayfs: statfs failed on lowerpath\n"); + goto out_put_lowerpath; + } + ufs->lower_namelen = statfs.f_namelen; @@ -3009,7 +3039,7 @@ + + err = -EINVAL; + if (sb->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { -+ printk(KERN_ERR "overlayfs: maximum fs stacking depth exceeded\n"); ++ pr_err("overlayfs: maximum fs stacking depth exceeded\n"); + goto out_put_lowerpath; + } + @@ -3017,14 +3047,14 @@ + ufs->upper_mnt = clone_private_mount(&upperpath); + err = PTR_ERR(ufs->upper_mnt); + if (IS_ERR(ufs->upper_mnt)) { -+ printk(KERN_ERR "overlayfs: failed to clone upperpath\n"); ++ pr_err("overlayfs: failed to clone upperpath\n"); + goto out_put_lowerpath; + } + + ufs->lower_mnt = clone_private_mount(&lowerpath); + err = PTR_ERR(ufs->lower_mnt); + if (IS_ERR(ufs->lower_mnt)) { -+ printk(KERN_ERR "overlayfs: failed to clone lowerpath\n"); ++ pr_err("overlayfs: failed to clone lowerpath\n"); + goto out_put_upper_mnt; + } + @@ -3103,6 +3133,7 @@ + .mount = ovl_mount, + .kill_sb = kill_anon_super, +}; ++MODULE_ALIAS_FS("overlayfs"); + +static int __init ovl_init(void) +{ @@ -3118,7 +3149,7 @@ +module_exit(ovl_exit); --- a/fs/splice.c +++ b/fs/splice.c -@@ -1311,6 +1311,7 @@ long do_splice_direct(struct file *in, l +@@ -1313,6 +1313,7 @@ long do_splice_direct(struct file *in, l return ret; } @@ -3177,6 +3208,16 @@ extern int generic_permission(struct inode *, int); static inline bool execute_ok(struct inode *inode) +@@ -2414,6 +2428,9 @@ extern ssize_t generic_file_splice_write + struct file *, loff_t *, size_t, unsigned int); + extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, + struct file *out, loff_t *, size_t len, unsigned int flags); ++extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, ++ loff_t *opos, size_t len, unsigned int flags); ++ + + extern void + file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping); --- a/include/linux/mount.h +++ b/include/linux/mount.h @@ -68,6 +68,9 @@ extern void mnt_pin(struct vfsmount *mnt diff --git a/target/linux/generic/patches-3.10/101-overlayfs_path_ref.patch b/target/linux/generic/patches-3.10/101-overlayfs_path_ref.patch deleted file mode 100644 index 0891ddf..0000000 --- a/target/linux/generic/patches-3.10/101-overlayfs_path_ref.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/fs/overlayfs/super.c -+++ b/fs/overlayfs/super.c -@@ -385,7 +385,6 @@ struct dentry *ovl_lookup(struct inode * - - struct file *ovl_path_open(struct path *path, int flags) - { -- path_get(path); - return dentry_open(path, flags, current_cred()); - } - diff --git a/target/linux/generic/patches-3.10/203-kallsyms_uncompressed.patch b/target/linux/generic/patches-3.10/203-kallsyms_uncompressed.patch index 5d04f6d..ac9aa54 100644 --- a/target/linux/generic/patches-3.10/203-kallsyms_uncompressed.patch +++ b/target/linux/generic/patches-3.10/203-kallsyms_uncompressed.patch @@ -51,7 +51,7 @@ } else if (argc != 1) --- a/init/Kconfig +++ b/init/Kconfig -@@ -1244,6 +1244,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW +@@ -1245,6 +1245,17 @@ config SYSCTL_ARCH_UNALIGN_ALLOW the unaligned access emulation. see arch/parisc/kernel/unaligned.c for reference diff --git a/target/linux/generic/patches-3.10/220-gc_sections.patch b/target/linux/generic/patches-3.10/220-gc_sections.patch index 3489709..f541deb 100644 --- a/target/linux/generic/patches-3.10/220-gc_sections.patch +++ b/target/linux/generic/patches-3.10/220-gc_sections.patch @@ -506,11 +506,11 @@ .init.data : { --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile -@@ -122,6 +122,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y) +@@ -123,6 +123,7 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y) ORIG_CFLAGS := $(KBUILD_CFLAGS) KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) endif +KBUILD_CFLAGS_KERNEL := $(patsubst -f%-sections,,$(KBUILD_CFLAGS_KERNEL)) ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj) - asflags-y := -Wa,-march=all -DZIMAGE + asflags-y := -DZIMAGE diff --git a/target/linux/generic/patches-3.10/260-crypto_test_dependencies.patch b/target/linux/generic/patches-3.10/260-crypto_test_dependencies.patch index 8cc15e4..a28f693 100644 --- a/target/linux/generic/patches-3.10/260-crypto_test_dependencies.patch +++ b/target/linux/generic/patches-3.10/260-crypto_test_dependencies.patch @@ -17,7 +17,7 @@ tristate "Userspace cryptographic algorithm configuration" --- a/crypto/algboss.c +++ b/crypto/algboss.c -@@ -247,6 +247,9 @@ static int cryptomgr_schedule_test(struc +@@ -248,6 +248,9 @@ static int cryptomgr_schedule_test(struc type = alg->cra_flags; /* This piece of crap needs to disappear into per-type test hooks. */ @@ -27,7 +27,7 @@ if ((!((type ^ CRYPTO_ALG_TYPE_BLKCIPHER) & CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV) && ((alg->cra_flags & CRYPTO_ALG_TYPE_MASK) == -@@ -255,6 +258,7 @@ static int cryptomgr_schedule_test(struc +@@ -256,6 +259,7 @@ static int cryptomgr_schedule_test(struc (!((type ^ CRYPTO_ALG_TYPE_AEAD) & CRYPTO_ALG_TYPE_MASK) && alg->cra_type == &crypto_nivaead_type && alg->cra_aead.ivsize)) type |= CRYPTO_ALG_TESTED; diff --git a/target/linux/generic/patches-3.10/540-crypto-xz-decompression-support.patch b/target/linux/generic/patches-3.10/540-crypto-xz-decompression-support.patch index eddd8e5..c1384b3 100644 --- a/target/linux/generic/patches-3.10/540-crypto-xz-decompression-support.patch +++ b/target/linux/generic/patches-3.10/540-crypto-xz-decompression-support.patch @@ -1,6 +1,6 @@ --- a/crypto/Kconfig +++ b/crypto/Kconfig -@@ -1359,6 +1359,13 @@ config CRYPTO_842 +@@ -1361,6 +1361,13 @@ config CRYPTO_842 help This is the 842 algorithm. diff --git a/target/linux/generic/patches-3.10/630-packet_socket_type.patch b/target/linux/generic/patches-3.10/630-packet_socket_type.patch index 7f43aff..e7f05de 100644 --- a/target/linux/generic/patches-3.10/630-packet_socket_type.patch +++ b/target/linux/generic/patches-3.10/630-packet_socket_type.patch @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> if (sock->type == SOCK_PACKET) po->prot_hook.func = packet_rcv_spkt; -@@ -3227,6 +3230,16 @@ packet_setsockopt(struct socket *sock, i +@@ -3226,6 +3229,16 @@ packet_setsockopt(struct socket *sock, i po->tp_tx_has_off = !!val; return 0; } @@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org> default: return -ENOPROTOOPT; } -@@ -3276,6 +3289,13 @@ static int packet_getsockopt(struct sock +@@ -3275,6 +3288,13 @@ static int packet_getsockopt(struct sock case PACKET_VNET_HDR: val = po->has_vnet_hdr; break; diff --git a/target/linux/generic/patches-3.10/643-bridge_remove_ipv6_dependency.patch b/target/linux/generic/patches-3.10/643-bridge_remove_ipv6_dependency.patch index 02a76c3..3d3c625 100644 --- a/target/linux/generic/patches-3.10/643-bridge_remove_ipv6_dependency.patch +++ b/target/linux/generic/patches-3.10/643-bridge_remove_ipv6_dependency.patch @@ -49,7 +49,7 @@ int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, unsigned char banned_flags) -@@ -5133,6 +5132,9 @@ int __init addrconf_init(void) +@@ -5137,6 +5136,9 @@ int __init addrconf_init(void) ipv6_addr_label_rtnl_register(); @@ -59,7 +59,7 @@ return 0; errout: rtnl_af_unregister(&inet6_ops); -@@ -5151,6 +5153,9 @@ void addrconf_cleanup(void) +@@ -5155,6 +5157,9 @@ void addrconf_cleanup(void) struct net_device *dev; int i; diff --git a/target/linux/generic/patches-3.10/644-bridge_optimize_netfilter_hooks.patch b/target/linux/generic/patches-3.10/644-bridge_optimize_netfilter_hooks.patch index 8204bba..bc56b71 100644 --- a/target/linux/generic/patches-3.10/644-bridge_optimize_netfilter_hooks.patch +++ b/target/linux/generic/patches-3.10/644-bridge_optimize_netfilter_hooks.patch @@ -58,7 +58,7 @@ default: --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c -@@ -782,7 +782,7 @@ static void __br_multicast_send_query(st +@@ -783,7 +783,7 @@ static void __br_multicast_send_query(st if (port) { __skb_push(skb, sizeof(struct ethhdr)); skb->dev = port->dev; diff --git a/target/linux/generic/patches-3.10/655-increase_skb_pad.patch b/target/linux/generic/patches-3.10/655-increase_skb_pad.patch index d109371..b1a0fb7 100644 --- a/target/linux/generic/patches-3.10/655-increase_skb_pad.patch +++ b/target/linux/generic/patches-3.10/655-increase_skb_pad.patch @@ -1,6 +1,6 @@ --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -1847,7 +1847,7 @@ static inline int pskb_network_may_pull( +@@ -1848,7 +1848,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/patches-3.10/656-skb_reduce_truesize-helper.patch b/target/linux/generic/patches-3.10/656-skb_reduce_truesize-helper.patch index 402148d..59cfa6a 100644 --- a/target/linux/generic/patches-3.10/656-skb_reduce_truesize-helper.patch +++ b/target/linux/generic/patches-3.10/656-skb_reduce_truesize-helper.patch @@ -14,7 +14,7 @@ when needed. --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -1892,6 +1892,24 @@ static inline void pskb_trim_unique(stru +@@ -1893,6 +1893,24 @@ static inline void pskb_trim_unique(stru BUG_ON(err); } diff --git a/target/linux/generic/patches-3.10/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch b/target/linux/generic/patches-3.10/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch index 505bc2b..72cff92 100644 --- a/target/linux/generic/patches-3.10/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch +++ b/target/linux/generic/patches-3.10/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch @@ -1,5 +1,3 @@ -diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h -index 005e2c2..a6a1df4 100644 --- a/include/net/netns/ipv6.h +++ b/include/net/netns/ipv6.h @@ -55,6 +55,7 @@ struct netns_ipv6 { @@ -10,8 +8,6 @@ index 005e2c2..a6a1df4 100644 struct rt6_info *ip6_blk_hole_entry; struct fib6_table *fib6_local_tbl; struct fib_rules_ops *fib6_rules_ops; -diff --git a/include/uapi/linux/fib_rules.h b/include/uapi/linux/fib_rules.h -index 51da65b..1429852 100644 --- a/include/uapi/linux/fib_rules.h +++ b/include/uapi/linux/fib_rules.h @@ -64,6 +64,10 @@ enum { @@ -25,8 +21,6 @@ index 51da65b..1429852 100644 __FR_ACT_MAX, }; -diff --git a/include/uapi/linux/icmpv6.h b/include/uapi/linux/icmpv6.h -index e0133c7..dabfa1a 100644 --- a/include/uapi/linux/icmpv6.h +++ b/include/uapi/linux/icmpv6.h @@ -115,6 +115,7 @@ struct icmp6hdr { @@ -37,8 +31,6 @@ index e0133c7..dabfa1a 100644 /* * Codes for Time Exceeded -diff --git a/include/uapi/linux/rtnetlink.h b/include/uapi/linux/rtnetlink.h -index 7a2144e..8f643f1 100644 --- a/include/uapi/linux/rtnetlink.h +++ b/include/uapi/linux/rtnetlink.h @@ -203,6 +203,7 @@ enum { @@ -49,11 +41,9 @@ index 7a2144e..8f643f1 100644 __RTN_MAX }; -diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c -index 26aa65d..2f66341 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c -@@ -84,6 +84,10 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp, +@@ -84,6 +84,10 @@ static int fib4_rule_action(struct fib_r err = -EACCES; goto errout; @@ -64,11 +54,9 @@ index 26aa65d..2f66341 100644 case FR_ACT_BLACKHOLE: default: err = -EINVAL; -diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c -index 8f6cb7a..dbae75d 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c -@@ -138,6 +138,10 @@ const struct fib_prop fib_props[RTN_MAX + 1] = { +@@ -138,6 +138,10 @@ const struct fib_prop fib_props[RTN_MAX .error = -EINVAL, .scope = RT_SCOPE_NOWHERE, }, @@ -79,11 +67,9 @@ index 8f6cb7a..dbae75d 100644 }; static void rt_fibinfo_free(struct rtable __rcu **rtp) -diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c -index 49616fe..e2845bd 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c -@@ -2334,6 +2334,7 @@ static const char *const rtn_type_names[__RTN_MAX] = { +@@ -2334,6 +2334,7 @@ static const char *const rtn_type_names[ [RTN_THROW] = "THROW", [RTN_NAT] = "NAT", [RTN_XRESOLVE] = "XRESOLVE", @@ -91,11 +77,9 @@ index 49616fe..e2845bd 100644 }; static inline const char *rtn_type(char *buf, size_t len, unsigned int t) -diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c -index df97f0a..2bd33cc 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c -@@ -181,6 +181,7 @@ static int ipmr_rule_action(struct fib_rule *rule, struct flowi *flp, +@@ -181,6 +181,7 @@ static int ipmr_rule_action(struct fib_r case FR_ACT_UNREACHABLE: return -ENETUNREACH; case FR_ACT_PROHIBIT: @@ -103,11 +87,9 @@ index df97f0a..2bd33cc 100644 return -EACCES; case FR_ACT_BLACKHOLE: default: -diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c -index 2e1a432..c4413b2 100644 --- a/net/ipv6/fib6_rules.c +++ b/net/ipv6/fib6_rules.c -@@ -69,6 +69,9 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp, +@@ -69,6 +69,9 @@ static int fib6_rule_action(struct fib_r case FR_ACT_PROHIBIT: rt = net->ipv6.ip6_prohibit_entry; goto discard_pkt; @@ -117,11 +99,9 @@ index 2e1a432..c4413b2 100644 } table = fib6_get_table(net, rule->table); -diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c -index 583e8d4..1e524da 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c -@@ -166,6 +166,8 @@ static int ip6mr_rule_action(struct fib_rule *rule, struct flowi *flp, +@@ -166,6 +166,8 @@ static int ip6mr_rule_action(struct fib_ return -ENETUNREACH; case FR_ACT_PROHIBIT: return -EACCES; @@ -130,11 +110,9 @@ index 583e8d4..1e524da 100644 case FR_ACT_BLACKHOLE: default: return -EINVAL; -diff --git a/net/ipv6/route.c b/net/ipv6/route.c -index 2b87418..864f5fe 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c -@@ -245,6 +245,24 @@ static const struct rt6_info ip6_prohibit_entry_template = { +@@ -245,6 +245,24 @@ static const struct rt6_info ip6_prohibi .rt6i_ref = ATOMIC_INIT(1), }; @@ -159,7 +137,7 @@ index 2b87418..864f5fe 100644 static const struct rt6_info ip6_blk_hole_entry_template = { .dst = { .__refcnt = ATOMIC_INIT(1), -@@ -1459,6 +1477,9 @@ int ip6_route_add(struct fib6_config *cfg) +@@ -1459,6 +1477,9 @@ int ip6_route_add(struct fib6_config *cf case RTN_THROW: rt->dst.error = -EAGAIN; break; @@ -169,7 +147,7 @@ index 2b87418..864f5fe 100644 default: rt->dst.error = -ENETUNREACH; break; -@@ -2035,6 +2056,17 @@ static int ip6_pkt_prohibit_out(struct sk_buff *skb) +@@ -2035,6 +2056,17 @@ static int ip6_pkt_prohibit_out(struct s return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES); } @@ -187,7 +165,7 @@ index 2b87418..864f5fe 100644 #endif /* -@@ -2240,7 +2272,8 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh, +@@ -2240,7 +2272,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 || @@ -197,7 +175,7 @@ index 2b87418..864f5fe 100644 cfg->fc_flags |= RTF_REJECT; if (rtm->rtm_type == RTN_LOCAL) -@@ -2442,6 +2475,9 @@ static int rt6_fill_node(struct net *net, +@@ -2442,6 +2475,9 @@ static int rt6_fill_node(struct net *net case -EACCES: rtm->rtm_type = RTN_PROHIBIT; break; @@ -207,7 +185,7 @@ index 2b87418..864f5fe 100644 case -EAGAIN: rtm->rtm_type = RTN_THROW; break; -@@ -2692,6 +2728,8 @@ static int ip6_route_dev_notify(struct notifier_block *this, +@@ -2692,6 +2728,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); @@ -216,7 +194,7 @@ index 2b87418..864f5fe 100644 net->ipv6.ip6_blk_hole_entry->dst.dev = dev; net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); #endif -@@ -2952,6 +2990,17 @@ static int __net_init ip6_route_net_init(struct net *net) +@@ -2952,6 +2990,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); @@ -243,7 +221,7 @@ index 2b87418..864f5fe 100644 out_ip6_prohibit_entry: kfree(net->ipv6.ip6_prohibit_entry); out_ip6_null_entry: -@@ -2987,6 +3038,7 @@ static void __net_exit ip6_route_net_exit(struct net *net) +@@ -2987,6 +3038,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); diff --git a/target/linux/generic/patches-3.10/700-swconfig.patch b/target/linux/generic/patches-3.10/700-swconfig.patch index 3b71723..d7eb1b0 100644 --- a/target/linux/generic/patches-3.10/700-swconfig.patch +++ b/target/linux/generic/patches-3.10/700-swconfig.patch @@ -29,7 +29,7 @@ obj-$(CONFIG_CICADA_PHY) += cicada.o --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild -@@ -360,6 +360,7 @@ header-y += stddef.h +@@ -361,6 +361,7 @@ header-y += stddef.h header-y += string.h header-y += suspend_ioctls.h header-y += swab.h diff --git a/target/linux/generic/patches-3.10/721-phy_packets.patch b/target/linux/generic/patches-3.10/721-phy_packets.patch index e9b5996..8692007 100644 --- a/target/linux/generic/patches-3.10/721-phy_packets.patch +++ b/target/linux/generic/patches-3.10/721-phy_packets.patch @@ -34,7 +34,7 @@ #define IF_GET_IFACE 0x0001 /* for querying only */ --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -1877,6 +1877,10 @@ static inline int pskb_trim(struct sk_bu +@@ -1878,6 +1878,10 @@ static inline int pskb_trim(struct sk_bu return (len < skb->len) ? __pskb_trim(skb, len) : 0; } @@ -45,7 +45,7 @@ /** * pskb_trim_unique - remove end from a paged unique (not cloned) buffer * @skb: buffer to alter -@@ -2001,16 +2005,6 @@ static inline struct sk_buff *dev_alloc_ +@@ -2002,16 +2006,6 @@ static inline struct sk_buff *dev_alloc_ } @@ -79,7 +79,7 @@ help --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -2542,9 +2542,19 @@ int dev_hard_start_xmit(struct sk_buff * +@@ -2576,9 +2576,19 @@ int dev_hard_start_xmit(struct sk_buff * if (!list_empty(&ptype_all)) dev_queue_xmit_nit(skb, dev); @@ -102,7 +102,7 @@ if (rc == NETDEV_TX_OK) txq_trans_update(txq); return rc; -@@ -2560,9 +2570,19 @@ gso: +@@ -2594,9 +2604,19 @@ gso: if (!list_empty(&ptype_all)) dev_queue_xmit_nit(nskb, dev); diff --git a/target/linux/generic/patches-3.10/902-debloat_proc.patch b/target/linux/generic/patches-3.10/902-debloat_proc.patch index 526132b..479c52d 100644 --- a/target/linux/generic/patches-3.10/902-debloat_proc.patch +++ b/target/linux/generic/patches-3.10/902-debloat_proc.patch @@ -173,7 +173,7 @@ goto err; --- a/net/core/sock.c +++ b/net/core/sock.c -@@ -2851,6 +2851,8 @@ static __net_initdata struct pernet_oper +@@ -2838,6 +2838,8 @@ static __net_initdata struct pernet_oper static int __init proto_init(void) { @@ -184,7 +184,7 @@ --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c -@@ -2589,10 +2589,12 @@ static const struct file_operations fib_ +@@ -2590,10 +2590,12 @@ static const struct file_operations fib_ int __net_init fib_proc_init(struct net *net) { @@ -199,7 +199,7 @@ &fib_triestat_fops)) goto out2; -@@ -2602,17 +2604,21 @@ int __net_init fib_proc_init(struct net +@@ -2603,17 +2605,21 @@ int __net_init fib_proc_init(struct net return 0; out3: diff --git a/target/linux/generic/patches-3.10/903-debloat_direct_io.patch b/target/linux/generic/patches-3.10/903-debloat_direct_io.patch index a16eff6..4f3545d 100644 --- a/target/linux/generic/patches-3.10/903-debloat_direct_io.patch +++ b/target/linux/generic/patches-3.10/903-debloat_direct_io.patch @@ -26,7 +26,7 @@ endif --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -2467,12 +2467,26 @@ enum { +@@ -2468,12 +2468,26 @@ enum { DIO_SKIP_HOLES = 0x02, }; diff --git a/target/linux/generic/patches-3.10/930-crashlog.patch b/target/linux/generic/patches-3.10/930-crashlog.patch index dea0ea3..22778c0 100644 --- a/target/linux/generic/patches-3.10/930-crashlog.patch +++ b/target/linux/generic/patches-3.10/930-crashlog.patch @@ -20,7 +20,7 @@ +#endif --- a/init/Kconfig +++ b/init/Kconfig -@@ -1185,6 +1185,10 @@ config RELAY +@@ -1186,6 +1186,10 @@ config RELAY If unsure, say N. diff --git a/target/linux/generic/patches-3.10/940-ocf_kbuild_integration.patch b/target/linux/generic/patches-3.10/940-ocf_kbuild_integration.patch index 475a408..97d5bcc 100644 --- a/target/linux/generic/patches-3.10/940-ocf_kbuild_integration.patch +++ b/target/linux/generic/patches-3.10/940-ocf_kbuild_integration.patch @@ -1,6 +1,6 @@ --- a/crypto/Kconfig +++ b/crypto/Kconfig -@@ -1404,3 +1404,6 @@ source "drivers/crypto/Kconfig" +@@ -1406,3 +1406,6 @@ source "drivers/crypto/Kconfig" source crypto/asymmetric_keys/Kconfig endif # if CRYPTO diff --git a/target/linux/generic/patches-3.10/950-vm_exports.patch b/target/linux/generic/patches-3.10/950-vm_exports.patch index 1159b88..993d384 100644 --- a/target/linux/generic/patches-3.10/950-vm_exports.patch +++ b/target/linux/generic/patches-3.10/950-vm_exports.patch @@ -52,7 +52,7 @@ * When we die, we re-parent all our children, and try to: --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -3694,6 +3694,7 @@ int can_nice(const struct task_struct *p +@@ -3707,6 +3707,7 @@ int can_nice(const struct task_struct *p return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) || capable(CAP_SYS_NICE)); } @@ -62,7 +62,7 @@ --- a/mm/memory.c +++ b/mm/memory.c -@@ -1413,6 +1413,7 @@ void zap_page_range(struct vm_area_struc +@@ -1404,6 +1404,7 @@ void zap_page_range(struct vm_area_struc mmu_notifier_invalidate_range_end(mm, start, end); tlb_finish_mmu(&tlb, start, end); } diff --git a/target/linux/imx6/Makefile b/target/linux/imx6/Makefile index e866c0b..38a0016 100644 --- a/target/linux/imx6/Makefile +++ b/target/linux/imx6/Makefile @@ -13,7 +13,7 @@ FEATURES:=audio display gpio pcie usb usbgadget squashfs targz CFLAGS:=-Os -pipe -mtune=cortex-a9 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp MAINTAINER:=Luka Perkov <luka@openwrt.org> -LINUX_VERSION:=3.10-rc3 +LINUX_VERSION:=3.10 include $(INCLUDE_DIR)/target.mk |