LINUX_RELEASE?=1
-LINUX_VERSION-4.4 = .159
+LINUX_VERSION-4.4 = .167
-LINUX_KERNEL_HASH-4.4.159 = d464fea1f888ada3a55c3aea1c05ba9fd2d4edd7ffb152369faace18a285998b
+LINUX_KERNEL_HASH-4.4.167 = 301feaaecbbe030a7a3ea05a272cca11b8958dc9ec619ec77f562eb1c75f0784
ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
&sin->sin6_addr);
sin->sin6_scope_id = 0;
}
-@@ -770,12 +770,12 @@ int ip6_datagram_send_ctl(struct net *ne
+@@ -773,12 +773,12 @@ int ip6_datagram_send_ctl(struct net *ne
}
if (fl6->flowlabel&IPV6_FLOWINFO_MASK) {
case IPV6_2292HOPOPTS:
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
-@@ -395,7 +395,7 @@ static void ip6gre_err(struct sk_buff *s
+@@ -397,7 +397,7 @@ static void ip6gre_err(struct sk_buff *s
return;
ipv6h = (const struct ipv6hdr *)skb->data;
greh = (const struct gre_base_hdr *)(skb->data + offset);
t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
key, greh->protocol);
-@@ -482,11 +482,11 @@ static int ip6gre_rcv(struct sk_buff *sk
+@@ -484,11 +484,11 @@ static int ip6gre_rcv(struct sk_buff *sk
offset += 4;
}
if (flags&GRE_KEY) {
offset += 4;
}
}
-@@ -748,7 +748,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
+@@ -750,7 +750,7 @@ static netdev_tx_t ip6gre_xmit2(struct s
if (tunnel->parms.o_flags&GRE_SEQ) {
++tunnel->o_seqno;
ptr--;
}
if (tunnel->parms.o_flags&GRE_KEY) {
-@@ -844,7 +844,7 @@ static inline int ip6gre_xmit_ipv6(struc
+@@ -846,7 +846,7 @@ static inline int ip6gre_xmit_ipv6(struc
dsfield = ipv6_get_dsfield(ipv6h);
if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
-@@ -1307,7 +1307,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1319,7 +1319,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
dsfield = ipv6_get_dsfield(ipv6h);
if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
#endif /* _LINUX_TYPES_H */
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
-@@ -1321,8 +1321,8 @@ static struct sk_buff **inet_gro_receive
+@@ -1322,8 +1322,8 @@ static struct sk_buff **inet_gro_receive
if (unlikely(ip_fast_csum((u8 *)iph, 5)))
goto out_unlock;
for (p = *head; p; p = p->next) {
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
-@@ -458,7 +458,7 @@ static struct neighbour *ipv4_neigh_look
+@@ -461,7 +461,7 @@ static struct neighbour *ipv4_neigh_look
else if (skb)
pkey = &ip_hdr(skb)->daddr;
return neigh_create(&arp_tbl, pkey, dev);
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
-@@ -451,48 +451,53 @@ static void tcp_options_write(__be32 *pt
+@@ -456,48 +456,53 @@ static void tcp_options_write(__be32 *pt
u16 options = opts->options; /* mungable copy */
if (unlikely(OPTION_MD5 & options)) {
}
if (unlikely(opts->num_sack_blocks)) {
-@@ -500,16 +505,17 @@ static void tcp_options_write(__be32 *pt
+@@ -505,16 +510,17 @@ static void tcp_options_write(__be32 *pt
tp->duplicate_sack : tp->selective_acks;
int this_sack;
}
tp->rx_opt.dsack = 0;
-@@ -522,13 +528,14 @@ static void tcp_options_write(__be32 *pt
+@@ -527,13 +533,14 @@ static void tcp_options_write(__be32 *pt
if (foc->exp) {
len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len;
goto next_ht;
--- a/net/ipv6/ip6_offload.c
+++ b/net/ipv6/ip6_offload.c
-@@ -225,7 +225,7 @@ static struct sk_buff **ipv6_gro_receive
+@@ -226,7 +226,7 @@ static struct sk_buff **ipv6_gro_receive
continue;
iph2 = (struct ipv6hdr *)(p->data + off);
- *(__be32 *)iph = to;
+ net_hdr_word(iph) = to;
if (skb->ip_summed == CHECKSUM_COMPLETE)
- skb->csum = csum_add(csum_sub(skb->csum, from), to);
- return 1;
-@@ -134,7 +134,7 @@ static inline int IP6_ECN_set_ce(struct
+ skb->csum = csum_add(csum_sub(skb->csum, (__force __wsum)from),
+ (__force __wsum)to);
+@@ -135,7 +135,7 @@ static inline int IP6_ECN_set_ce(struct
static inline void IP6_ECN_clear(struct ipv6hdr *iph)
{
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
-@@ -3818,14 +3818,16 @@ static bool tcp_parse_aligned_timestamp(
+@@ -3836,14 +3836,16 @@ static bool tcp_parse_aligned_timestamp(
{
const __be32 *ptr = (const __be32 *)(th + 1);
--- 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);
--- 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) },
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
-@@ -2107,8 +2107,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)) {
};
#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 ||
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 */
.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
{
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);
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;
.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_
}
/**
--- 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);
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;
#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;
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);
--- 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;
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 */
/**
* 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
}
/**
{
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;
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;
}
--- 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);
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)
{
}
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;
};
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.
*/
}
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;
!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);
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;
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]);
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);
!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);
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:
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*/
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));
/* 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);
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);
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;
}
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,
},
{
.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,
--- a/Makefile
+++ b/Makefile
-@@ -626,12 +626,12 @@ KBUILD_CFLAGS += $(call cc-disable-warni
- KBUILD_CFLAGS += $(call cc-disable-warning, int-in-bool-context)
+@@ -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
--- 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
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,
/*
* 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.
*/
--- 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) },
--- 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) },
+}
--- 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);
ifdef CONFIG_FUNCTION_TRACER
ORIG_CFLAGS := $(KBUILD_CFLAGS)
KBUILD_CFLAGS = $(subst $(CC_FLAGS_FTRACE),,$(ORIG_CFLAGS))
-@@ -98,6 +108,8 @@ obj-$(CONFIG_LZ4HC_COMPRESS) += lz4/
+@@ -96,6 +106,8 @@ obj-$(CONFIG_LZ4HC_COMPRESS) += lz4/
obj-$(CONFIG_LZ4_DECOMPRESS) += lz4/
obj-$(CONFIG_XZ_DEC) += xz/
obj-$(CONFIG_RAID6_PQ) += raid6/
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,
{
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) {
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)) {
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,
{
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,
{
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,
}
#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)
{
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);
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:
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)
{
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:
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:
}
return &ip6n->tnls[prio][h];
}
-@@ -369,6 +378,12 @@ ip6_tnl_dev_uninit(struct net_device *de
+@@ -372,6 +381,12 @@ ip6_tnl_dev_uninit(struct net_device *de
struct net *net = t->net;
struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
if (dev == ip6n->fb_tnl_dev)
RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
else
-@@ -765,6 +780,108 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
+@@ -768,6 +783,108 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
}
EXPORT_SYMBOL_GPL(ip6_tnl_rcv_ctl);
/**
* ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally
* @skb: received socket buffer
-@@ -810,6 +927,26 @@ static int ip6_tnl_rcv(struct sk_buff *s
+@@ -813,6 +930,26 @@ static int ip6_tnl_rcv(struct sk_buff *s
skb_reset_network_header(skb);
skb->protocol = htons(protocol);
memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
__skb_tunnel_rx(skb, t->dev, t->net);
-@@ -1145,6 +1282,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) ||
-@@ -1175,6 +1313,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;
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
if (err != 0) {
if (err == -EMSGSIZE)
-@@ -1289,6 +1439,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;
dst_cache_reset(&t->dst_cache);
ip6_tnl_link_config(t);
return 0;
-@@ -1327,6 +1485,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;
memcpy(p->name, u->name, sizeof(u->name));
}
-@@ -1622,6 +1781,15 @@ static int ip6_tnl_validate(struct nlatt
+@@ -1634,6 +1793,15 @@ static int ip6_tnl_validate(struct nlatt
return 0;
}
static void ip6_tnl_netlink_parms(struct nlattr *data[],
struct __ip6_tnl_parm *parms)
{
-@@ -1653,6 +1821,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]);
}
static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
-@@ -1705,6 +1913,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)
{
return
/* IFLA_IPTUN_LINK */
nla_total_size(4) +
-@@ -1722,6 +1936,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) +
0;
}
-@@ -1729,6 +1961,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;
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
-@@ -1737,8 +1972,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) ||
return 0;
nla_put_failure:
-@@ -1762,6 +2016,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 },
static const struct rt6_info ip6_blk_hole_entry_template = {
.dst = {
.__refcnt = ATOMIC_INIT(1),
-@@ -1899,6 +1916,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;
case RTN_THROW:
case RTN_UNREACHABLE:
default:
-@@ -2502,6 +2524,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);
}
/*
* Allocate a dst for local (unicast / anycast) address.
*/
-@@ -2744,7 +2777,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 ||
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -3097,6 +3131,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;
case -EAGAIN:
rtm->rtm_type = RTN_THROW;
break;
-@@ -3376,6 +3413,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);
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
-@@ -3602,6 +3641,17 @@ static int __net_init ip6_route_net_init
+@@ -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);
++ in6_dev_put(net->ipv6.ip6_policy_failed_entry->rt6i_idev);
+ in6_dev_put(net->ipv6.ip6_blk_hole_entry->rt6i_idev);
+ #endif
+ }
+@@ -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);
#endif
net->ipv6.sysctl.flush_delay = 0;
-@@ -3620,6 +3670,8 @@ out:
+@@ -3629,6 +3680,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -3637,6 +3689,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);
#endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
}
-@@ -3710,6 +3763,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);
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -4271,6 +4271,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;
if (!(skb->dev->features & NETIF_F_GRO))
goto normal;
-@@ -5437,6 +5440,48 @@ static void __netdev_adjacent_dev_unlink
+@@ -5470,6 +5473,48 @@ static void __netdev_adjacent_dev_unlink
&upper_dev->adj_list.lower);
}
static int __netdev_upper_dev_link(struct net_device *dev,
struct net_device *upper_dev, bool master,
void *private)
-@@ -5508,6 +5553,7 @@ static int __netdev_upper_dev_link(struc
+@@ -5541,6 +5586,7 @@ static int __netdev_upper_dev_link(struc
goto rollback_lower_mesh;
}
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
&changeupper_info.info);
return 0;
-@@ -5634,6 +5680,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);
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
&changeupper_info.info);
}
-@@ -6174,6 +6221,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;
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -642,7 +642,8 @@ struct sk_buff {
- __u8 ipvs_property:1;
+
__u8 inner_protocol_type:1;
__u8 remcsum_offload:1;
- /* 3 or 5 bit hole */
/**
* 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_
}
help
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -2747,10 +2747,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);
/*
* 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);
if (!root_irq_dir)
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
-@@ -393,6 +393,8 @@ static int __init init_timer_list_procfs
+@@ -399,6 +399,8 @@ static int __init init_timer_list_procfs
{
struct proc_dir_entry *pe;
return -ENOMEM;
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
-@@ -2684,6 +2684,8 @@ static const struct file_operations proc
+@@ -2685,6 +2685,8 @@ static const struct file_operations proc
static int __init proc_vmalloc_init(void)
{
}
--- 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
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
-@@ -420,6 +420,9 @@ static struct pernet_operations ip_rt_pr
+@@ -423,6 +423,9 @@ static struct pernet_operations ip_rt_pr
static int __init ip_rt_proc_init(void)
{