kernel: update kernel 4.4 to version 4.4.3
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 48783
This commit is contained in:
		@@ -5,12 +5,12 @@ LINUX_RELEASE?=1
 | 
				
			|||||||
LINUX_VERSION-3.18 = .26
 | 
					LINUX_VERSION-3.18 = .26
 | 
				
			||||||
LINUX_VERSION-4.1 = .16
 | 
					LINUX_VERSION-4.1 = .16
 | 
				
			||||||
LINUX_VERSION-4.3 = .4
 | 
					LINUX_VERSION-4.3 = .4
 | 
				
			||||||
LINUX_VERSION-4.4 =
 | 
					LINUX_VERSION-4.4 = .3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LINUX_KERNEL_MD5SUM-3.18.26 = fb3ef8da32a25607807887b9567a6927
 | 
					LINUX_KERNEL_MD5SUM-3.18.26 = fb3ef8da32a25607807887b9567a6927
 | 
				
			||||||
LINUX_KERNEL_MD5SUM-4.1.16 = e4bf22fed49b476b47acffc00c03267a
 | 
					LINUX_KERNEL_MD5SUM-4.1.16 = e4bf22fed49b476b47acffc00c03267a
 | 
				
			||||||
LINUX_KERNEL_MD5SUM-4.3.4 = 5275d02132107c28b85f986bad576d91
 | 
					LINUX_KERNEL_MD5SUM-4.3.4 = 5275d02132107c28b85f986bad576d91
 | 
				
			||||||
LINUX_KERNEL_MD5SUM-4.4 = 9a78fa2eb6c68ca5a40ed5af08142599
 | 
					LINUX_KERNEL_MD5SUM-4.4.3 = 5feab5a2c016e186e3088d4fae963ed7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifdef KERNEL_PATCHVER
 | 
					ifdef KERNEL_PATCHVER
 | 
				
			||||||
  LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
 | 
					  LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,9 +29,7 @@
 | 
				
			|||||||
-	u32 bootstrap;
 | 
					-	u32 bootstrap;
 | 
				
			||||||
+	void __iomem *phy_reg;
 | 
					+	void __iomem *phy_reg;
 | 
				
			||||||
+	u32 t;
 | 
					+	u32 t;
 | 
				
			||||||
 
 | 
					+
 | 
				
			||||||
-	bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP);
 | 
					 | 
				
			||||||
-	if (bootstrap & AR934X_BOOTSTRAP_USB_MODE_DEVICE)
 | 
					 | 
				
			||||||
+	phy_reg = ioremap(base, 4);
 | 
					+	phy_reg = ioremap(base, 4);
 | 
				
			||||||
+	if (!phy_reg)
 | 
					+	if (!phy_reg)
 | 
				
			||||||
+		return;
 | 
					+		return;
 | 
				
			||||||
@@ -43,7 +41,9 @@
 | 
				
			|||||||
+
 | 
					+
 | 
				
			||||||
+	iounmap(phy_reg);
 | 
					+	iounmap(phy_reg);
 | 
				
			||||||
+}
 | 
					+}
 | 
				
			||||||
+
 | 
					 
 | 
				
			||||||
 | 
					-	bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP);
 | 
				
			||||||
 | 
					-	if (bootstrap & AR934X_BOOTSTRAP_USB_MODE_DEVICE)
 | 
				
			||||||
+static void ar934x_usb_reset_notifier(struct platform_device *pdev)
 | 
					+static void ar934x_usb_reset_notifier(struct platform_device *pdev)
 | 
				
			||||||
+{
 | 
					+{
 | 
				
			||||||
+	if (pdev->id != -1)
 | 
					+	if (pdev->id != -1)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -135,8 +135,7 @@
 | 
				
			|||||||
+static void __init ap136_common_setup(void)
 | 
					+static void __init ap136_common_setup(void)
 | 
				
			||||||
+{
 | 
					+{
 | 
				
			||||||
+	u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
 | 
					+	u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
 | 
				
			||||||
 
 | 
					+
 | 
				
			||||||
-static int ap136_pci_plat_dev_init(struct pci_dev *dev)
 | 
					 | 
				
			||||||
+	ath79_register_m25p80(NULL);
 | 
					+	ath79_register_m25p80(NULL);
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(ap136_leds_gpio),
 | 
					+	ath79_register_leds_gpio(-1, ARRAY_SIZE(ap136_leds_gpio),
 | 
				
			||||||
@@ -151,7 +150,8 @@
 | 
				
			|||||||
+	ath79_register_wmac(art + AP136_WMAC_CALDATA_OFFSET, NULL);
 | 
					+	ath79_register_wmac(art + AP136_WMAC_CALDATA_OFFSET, NULL);
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
+	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
					+	ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
 | 
				
			||||||
+
 | 
					 
 | 
				
			||||||
 | 
					-static int ap136_pci_plat_dev_init(struct pci_dev *dev)
 | 
				
			||||||
+	ath79_register_mdio(0, 0x0);
 | 
					+	ath79_register_mdio(0, 0x0);
 | 
				
			||||||
+	ath79_init_mac(ath79_eth0_data.mac_addr, art + AP136_MAC0_OFFSET, 0);
 | 
					+	ath79_init_mac(ath79_eth0_data.mac_addr, art + AP136_MAC0_OFFSET, 0);
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
@@ -211,16 +211,16 @@
 | 
				
			|||||||
+	/* GMAC0 of the AR8327 switch is connected to GMAC1 via SGMII */
 | 
					+	/* GMAC0 of the AR8327 switch is connected to GMAC1 via SGMII */
 | 
				
			||||||
+	ap136_ar8327_pad0_cfg.mode = AR8327_PAD_MAC_SGMII;
 | 
					+	ap136_ar8327_pad0_cfg.mode = AR8327_PAD_MAC_SGMII;
 | 
				
			||||||
+	ap136_ar8327_pad0_cfg.sgmii_delay_en = true;
 | 
					+	ap136_ar8327_pad0_cfg.sgmii_delay_en = true;
 | 
				
			||||||
 
 | 
					+
 | 
				
			||||||
-	ath79_pci_set_plat_dev_init(ap136_pci_plat_dev_init);
 | 
					 | 
				
			||||||
-	ath79_register_pci();
 | 
					 | 
				
			||||||
+	/* GMAC6 of the AR8327 switch is connected to GMAC0 via RGMII */
 | 
					+	/* GMAC6 of the AR8327 switch is connected to GMAC0 via RGMII */
 | 
				
			||||||
+	ap136_ar8327_pad6_cfg.mode = AR8327_PAD_MAC_RGMII;
 | 
					+	ap136_ar8327_pad6_cfg.mode = AR8327_PAD_MAC_RGMII;
 | 
				
			||||||
+	ap136_ar8327_pad6_cfg.txclk_delay_en = true;
 | 
					+	ap136_ar8327_pad6_cfg.txclk_delay_en = true;
 | 
				
			||||||
+	ap136_ar8327_pad6_cfg.rxclk_delay_en = true;
 | 
					+	ap136_ar8327_pad6_cfg.rxclk_delay_en = true;
 | 
				
			||||||
+	ap136_ar8327_pad6_cfg.txclk_delay_sel = AR8327_CLK_DELAY_SEL1;
 | 
					+	ap136_ar8327_pad6_cfg.txclk_delay_sel = AR8327_CLK_DELAY_SEL1;
 | 
				
			||||||
+	ap136_ar8327_pad6_cfg.rxclk_delay_sel = AR8327_CLK_DELAY_SEL2;
 | 
					+	ap136_ar8327_pad6_cfg.rxclk_delay_sel = AR8327_CLK_DELAY_SEL2;
 | 
				
			||||||
+
 | 
					 
 | 
				
			||||||
 | 
					-	ath79_pci_set_plat_dev_init(ap136_pci_plat_dev_init);
 | 
				
			||||||
 | 
					-	ath79_register_pci();
 | 
				
			||||||
+	ath79_eth0_pll_data.pll_1000 = 0x56000000;
 | 
					+	ath79_eth0_pll_data.pll_1000 = 0x56000000;
 | 
				
			||||||
+	ath79_eth1_pll_data.pll_1000 = 0x03000101;
 | 
					+	ath79_eth1_pll_data.pll_1000 = 0x03000101;
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,6 @@
 | 
				
			|||||||
 	u32 t, s;
 | 
					 	u32 t, s;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
-	BUG_ON(!soc_is_ar934x() && !soc_is_qca953x() && !soc_is_qca956x());
 | 
					-	BUG_ON(!soc_is_ar934x() && !soc_is_qca953x() && !soc_is_qca956x());
 | 
				
			||||||
-
 | 
					 | 
				
			||||||
-	if (gpio >= AR934X_GPIO_COUNT)
 | 
					 | 
				
			||||||
-		return;
 | 
					 | 
				
			||||||
+	if (soc_is_ar934x())
 | 
					+	if (soc_is_ar934x())
 | 
				
			||||||
+		reg_base = AR934X_GPIO_REG_OUT_FUNC0;
 | 
					+		reg_base = AR934X_GPIO_REG_OUT_FUNC0;
 | 
				
			||||||
+	else if (soc_is_qca953x())
 | 
					+	else if (soc_is_qca953x())
 | 
				
			||||||
@@ -23,6 +20,9 @@
 | 
				
			|||||||
+	else
 | 
					+	else
 | 
				
			||||||
+		BUG();
 | 
					+		BUG();
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
					-	if (gpio >= AR934X_GPIO_COUNT)
 | 
				
			||||||
 | 
					-		return;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
-	reg = AR934X_GPIO_REG_OUT_FUNC0 + 4 * (gpio / 4);
 | 
					-	reg = AR934X_GPIO_REG_OUT_FUNC0 + 4 * (gpio / 4);
 | 
				
			||||||
+	reg = reg_base + 4 * (gpio / 4);
 | 
					+	reg = reg_base + 4 * (gpio / 4);
 | 
				
			||||||
 	s = 8 * (gpio % 4);
 | 
					 	s = 8 * (gpio % 4);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -214,7 +214,7 @@
 | 
				
			|||||||
 #include <linux/uaccess.h>
 | 
					 #include <linux/uaccess.h>
 | 
				
			||||||
 #include <linux/ipv6.h>
 | 
					 #include <linux/ipv6.h>
 | 
				
			||||||
 #include <linux/icmpv6.h>
 | 
					 #include <linux/icmpv6.h>
 | 
				
			||||||
@@ -776,10 +777,10 @@ static void tcp_v6_send_response(const s
 | 
					@@ -778,10 +779,10 @@ static void tcp_v6_send_response(const s
 | 
				
			||||||
 	topt = (__be32 *)(t1 + 1);
 | 
					 	topt = (__be32 *)(t1 + 1);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	if (tsecr) {
 | 
					 	if (tsecr) {
 | 
				
			||||||
@@ -632,14 +632,19 @@
 | 
				
			|||||||
 #include <linux/netdevice.h>
 | 
					 #include <linux/netdevice.h>
 | 
				
			||||||
--- a/include/net/inet_ecn.h
 | 
					--- a/include/net/inet_ecn.h
 | 
				
			||||||
+++ b/include/net/inet_ecn.h
 | 
					+++ b/include/net/inet_ecn.h
 | 
				
			||||||
@@ -115,13 +115,13 @@ static inline int IP6_ECN_set_ce(struct
 | 
					@@ -124,9 +124,9 @@ static inline int IP6_ECN_set_ce(struct
 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
 	if (INET_ECN_is_not_ect(ipv6_get_dsfield(iph)))
 | 
					 	if (INET_ECN_is_not_ect(ipv6_get_dsfield(iph)))
 | 
				
			||||||
 		return 0;
 | 
					 		return 0;
 | 
				
			||||||
-	*(__be32*)iph |= htonl(INET_ECN_CE << 20);
 | 
					 
 | 
				
			||||||
+	net_hdr_word(iph) |= htonl(INET_ECN_CE << 20);
 | 
					-	from = *(__be32 *)iph;
 | 
				
			||||||
 | 
					+	from = net_hdr_word(iph);
 | 
				
			||||||
 | 
					 	to = from | htonl(INET_ECN_CE << 20);
 | 
				
			||||||
 | 
					-	*(__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;
 | 
					 	return 1;
 | 
				
			||||||
 }
 | 
					@@ -134,7 +134,7 @@ static inline int IP6_ECN_set_ce(struct
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static inline void IP6_ECN_clear(struct ipv6hdr *iph)
 | 
					 static inline void IP6_ECN_clear(struct ipv6hdr *iph)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 #include "b53_regs.h"
 | 
					 #include "b53_regs.h"
 | 
				
			||||||
 #include "b53_priv.h"
 | 
					 #include "b53_priv.h"
 | 
				
			||||||
@@ -1313,6 +1314,20 @@ static int b53_switch_init(struct b53_de
 | 
					@@ -1370,6 +1371,20 @@ static int b53_switch_init(struct b53_de
 | 
				
			||||||
 			sw_dev->cpu_port = 5;
 | 
					 			sw_dev->cpu_port = 5;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -659,7 +659,7 @@ dwc_otg: Remove duplicate gadget probe/unregister function
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
--- a/drivers/usb/core/hub.c
 | 
					--- a/drivers/usb/core/hub.c
 | 
				
			||||||
+++ b/drivers/usb/core/hub.c
 | 
					+++ b/drivers/usb/core/hub.c
 | 
				
			||||||
@@ -4946,7 +4946,7 @@ static void port_event(struct usb_hub *h
 | 
					@@ -4967,7 +4967,7 @@ static void port_event(struct usb_hub *h
 | 
				
			||||||
 	if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
 | 
					 	if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
 | 
				
			||||||
 		u16 status = 0, unused;
 | 
					 		u16 status = 0, unused;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 static struct resource bcma_sflash_resource = {
 | 
					 static struct resource bcma_sflash_resource = {
 | 
				
			||||||
 	.name	= "bcma_sflash",
 | 
					 	.name	= "bcma_sflash",
 | 
				
			||||||
@@ -41,6 +42,13 @@ static const struct bcma_sflash_tbl_e bc
 | 
					@@ -42,6 +43,13 @@ static const struct bcma_sflash_tbl_e bc
 | 
				
			||||||
 	{ NULL },
 | 
					 	{ NULL },
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -35,7 +35,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 static const struct bcma_sflash_tbl_e bcma_sflash_sst_tbl[] = {
 | 
					 static const struct bcma_sflash_tbl_e bcma_sflash_sst_tbl[] = {
 | 
				
			||||||
 	{ "SST25WF512", 1, 0x1000, 16, },
 | 
					 	{ "SST25WF512", 1, 0x1000, 16, },
 | 
				
			||||||
 	{ "SST25VF512", 0x48, 0x1000, 16, },
 | 
					 	{ "SST25VF512", 0x48, 0x1000, 16, },
 | 
				
			||||||
@@ -84,6 +92,24 @@ static void bcma_sflash_cmd(struct bcma_
 | 
					@@ -85,6 +93,24 @@ static void bcma_sflash_cmd(struct bcma_
 | 
				
			||||||
 	bcma_err(cc->core->bus, "SFLASH control command failed (timeout)!\n");
 | 
					 	bcma_err(cc->core->bus, "SFLASH control command failed (timeout)!\n");
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -60,7 +60,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 /* Initialize serial flash access */
 | 
					 /* Initialize serial flash access */
 | 
				
			||||||
 int bcma_sflash_init(struct bcma_drv_cc *cc)
 | 
					 int bcma_sflash_init(struct bcma_drv_cc *cc)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -114,6 +140,10 @@ int bcma_sflash_init(struct bcma_drv_cc
 | 
					@@ -115,6 +141,10 @@ int bcma_sflash_init(struct bcma_drv_cc
 | 
				
			||||||
 		case 0x13:
 | 
					 		case 0x13:
 | 
				
			||||||
 			return -ENOTSUPP;
 | 
					 			return -ENOTSUPP;
 | 
				
			||||||
 		default:
 | 
					 		default:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -195,7 +195,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 #if IS_BUILTIN(CONFIG_OF)
 | 
					 #if IS_BUILTIN(CONFIG_OF)
 | 
				
			||||||
 	if (cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC)
 | 
					 	if (cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC)
 | 
				
			||||||
 		chip->of_node	= cc->core->dev.of_node;
 | 
					 		chip->of_node	= cc->core->dev.of_node;
 | 
				
			||||||
@@ -216,13 +248,13 @@ int bcma_gpio_init(struct bcma_drv_cc *c
 | 
					@@ -217,13 +249,13 @@ int bcma_gpio_init(struct bcma_drv_cc *c
 | 
				
			||||||
 	else
 | 
					 	else
 | 
				
			||||||
 		chip->base		= -1;
 | 
					 		chip->base		= -1;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -212,7 +212,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 		return err;
 | 
					 		return err;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -231,7 +263,7 @@ int bcma_gpio_init(struct bcma_drv_cc *c
 | 
					@@ -232,7 +264,7 @@ int bcma_gpio_init(struct bcma_drv_cc *c
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 int bcma_gpio_unregister(struct bcma_drv_cc *cc)
 | 
					 int bcma_gpio_unregister(struct bcma_drv_cc *cc)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -223,7 +223,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
--- a/include/linux/bcma/bcma_driver_chipcommon.h
 | 
					--- a/include/linux/bcma/bcma_driver_chipcommon.h
 | 
				
			||||||
+++ b/include/linux/bcma/bcma_driver_chipcommon.h
 | 
					+++ b/include/linux/bcma/bcma_driver_chipcommon.h
 | 
				
			||||||
@@ -640,6 +640,7 @@ struct bcma_drv_cc {
 | 
					@@ -646,6 +646,7 @@ struct bcma_drv_cc {
 | 
				
			||||||
 	spinlock_t gpio_lock;
 | 
					 	spinlock_t gpio_lock;
 | 
				
			||||||
 #ifdef CONFIG_BCMA_DRIVER_GPIO
 | 
					 #ifdef CONFIG_BCMA_DRIVER_GPIO
 | 
				
			||||||
 	struct gpio_chip gpio;
 | 
					 	struct gpio_chip gpio;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@
 | 
				
			|||||||
 static int cfe_env;
 | 
					 static int cfe_env;
 | 
				
			||||||
--- a/arch/mips/mm/cache.c
 | 
					--- a/arch/mips/mm/cache.c
 | 
				
			||||||
+++ b/arch/mips/mm/cache.c
 | 
					+++ b/arch/mips/mm/cache.c
 | 
				
			||||||
@@ -59,6 +59,7 @@ void (*_dma_cache_wback)(unsigned long s
 | 
					@@ -60,6 +60,7 @@ void (*_dma_cache_wback)(unsigned long s
 | 
				
			||||||
 void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 | 
					 void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 EXPORT_SYMBOL(_dma_cache_wback_inv);
 | 
					 EXPORT_SYMBOL(_dma_cache_wback_inv);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 | 
					--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
 | 
				
			||||||
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
 | 
					+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
 | 
				
			||||||
@@ -2057,6 +2057,53 @@ static struct board_info __initdata boar
 | 
					@@ -2058,6 +2058,53 @@ static struct board_info __initdata boar
 | 
				
			||||||
 	},
 | 
					 	},
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -54,7 +54,7 @@
 | 
				
			|||||||
 static struct sprom_fixup __initdata vr3025u_fixups[] = {
 | 
					 static struct sprom_fixup __initdata vr3025u_fixups[] = {
 | 
				
			||||||
 	{ .offset = 97, .value = 0xfeb3 },
 | 
					 	{ .offset = 97, .value = 0xfeb3 },
 | 
				
			||||||
 	{ .offset = 98, .value = 0x1618 },
 | 
					 	{ .offset = 98, .value = 0x1618 },
 | 
				
			||||||
@@ -2563,6 +2610,7 @@ static const struct board_info __initcon
 | 
					@@ -2564,6 +2611,7 @@ static const struct board_info __initcon
 | 
				
			||||||
 	&board_96368mvwg,
 | 
					 	&board_96368mvwg,
 | 
				
			||||||
 	&board_96368mvngr,
 | 
					 	&board_96368mvngr,
 | 
				
			||||||
 	&board_DGND3700v1_3800B,
 | 
					 	&board_DGND3700v1_3800B,
 | 
				
			||||||
@@ -62,7 +62,7 @@
 | 
				
			|||||||
 	&board_HG655b,
 | 
					 	&board_HG655b,
 | 
				
			||||||
 	&board_P870HW51A_V2,
 | 
					 	&board_P870HW51A_V2,
 | 
				
			||||||
 	&board_VR3025u,
 | 
					 	&board_VR3025u,
 | 
				
			||||||
@@ -2671,6 +2719,7 @@ static struct of_device_id const bcm963x
 | 
					@@ -2672,6 +2720,7 @@ static struct of_device_id const bcm963x
 | 
				
			||||||
 	{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
 | 
					 	{ .compatible = "comtrend,vr-3025un", .data = &board_VR3025un, },
 | 
				
			||||||
 	{ .compatible = "comtrend,vr-3026e", .data = &board_VR3026e, },
 | 
					 	{ .compatible = "comtrend,vr-3026e", .data = &board_VR3026e, },
 | 
				
			||||||
 	{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
 | 
					 	{ .compatible = "comtrend,wap-5813n", .data = &board_WAP5813n, },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
 	unsigned int check_len;
 | 
					 	unsigned int check_len;
 | 
				
			||||||
--- a/arch/mips/mm/cache.c
 | 
					--- a/arch/mips/mm/cache.c
 | 
				
			||||||
+++ b/arch/mips/mm/cache.c
 | 
					+++ b/arch/mips/mm/cache.c
 | 
				
			||||||
@@ -59,6 +59,7 @@ void (*_dma_cache_wback)(unsigned long s
 | 
					@@ -60,6 +60,7 @@ void (*_dma_cache_wback)(unsigned long s
 | 
				
			||||||
 void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 | 
					 void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 EXPORT_SYMBOL(_dma_cache_wback_inv);
 | 
					 EXPORT_SYMBOL(_dma_cache_wback_inv);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,70 +0,0 @@
 | 
				
			|||||||
From 7ca88764d45c209791e8813131c1457c2e9e51e7 Mon Sep 17 00:00:00 2001
 | 
					 | 
				
			||||||
From: Yevgeny Pats <yevgeny@perception-point.io>
 | 
					 | 
				
			||||||
Date: Mon, 11 Jan 2016 12:05:28 +0000
 | 
					 | 
				
			||||||
Subject: KEYS: Fix keyring ref leak in join_session_keyring()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If a thread is asked to join as a session keyring the keyring that's already
 | 
					 | 
				
			||||||
set as its session, we leak a keyring reference.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This can be tested with the following program:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	#include <stddef.h>
 | 
					 | 
				
			||||||
	#include <stdio.h>
 | 
					 | 
				
			||||||
	#include <sys/types.h>
 | 
					 | 
				
			||||||
	#include <keyutils.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	int main(int argc, const char *argv[])
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int i = 0;
 | 
					 | 
				
			||||||
		key_serial_t serial;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING,
 | 
					 | 
				
			||||||
				"leaked-keyring");
 | 
					 | 
				
			||||||
		if (serial < 0) {
 | 
					 | 
				
			||||||
			perror("keyctl");
 | 
					 | 
				
			||||||
			return -1;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (keyctl(KEYCTL_SETPERM, serial,
 | 
					 | 
				
			||||||
			   KEY_POS_ALL | KEY_USR_ALL) < 0) {
 | 
					 | 
				
			||||||
			perror("keyctl");
 | 
					 | 
				
			||||||
			return -1;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		for (i = 0; i < 100; i++) {
 | 
					 | 
				
			||||||
			serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING,
 | 
					 | 
				
			||||||
					"leaked-keyring");
 | 
					 | 
				
			||||||
			if (serial < 0) {
 | 
					 | 
				
			||||||
				perror("keyctl");
 | 
					 | 
				
			||||||
				return -1;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If, after the program has run, there something like the following line in
 | 
					 | 
				
			||||||
/proc/keys:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
3f3d898f I--Q---   100 perm 3f3f0000     0     0 keyring   leaked-keyring: empty
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
with a usage count of 100 * the number of times the program has been run,
 | 
					 | 
				
			||||||
then the kernel is malfunctioning.  If leaked-keyring has zero usages or
 | 
					 | 
				
			||||||
has been garbage collected, then the problem is fixed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Reported-by: Yevgeny Pats <yevgeny@perception-point.io>
 | 
					 | 
				
			||||||
Signed-off-by: David Howells <dhowells@redhat.com>
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 security/keys/process_keys.c | 1 +
 | 
					 | 
				
			||||||
 1 file changed, 1 insertion(+)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--- a/security/keys/process_keys.c
 | 
					 | 
				
			||||||
+++ b/security/keys/process_keys.c
 | 
					 | 
				
			||||||
@@ -794,6 +794,7 @@ long join_session_keyring(const char *na
 | 
					 | 
				
			||||||
 		ret = PTR_ERR(keyring);
 | 
					 | 
				
			||||||
 		goto error2;
 | 
					 | 
				
			||||||
 	} else if (keyring == new->session_keyring) {
 | 
					 | 
				
			||||||
+		key_put(keyring);
 | 
					 | 
				
			||||||
 		ret = 0;
 | 
					 | 
				
			||||||
 		goto error2;
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
@@ -1,118 +0,0 @@
 | 
				
			|||||||
From: Eric Dumazet <edumazet@google.com>
 | 
					 | 
				
			||||||
Date: Fri, 22 Jan 2016 23:06:44 -0800
 | 
					 | 
				
			||||||
Subject: [PATCH] dump_stack: avoid potential deadlocks
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Some servers experienced fatal deadlocks because of a combination
 | 
					 | 
				
			||||||
of bugs, leading to multiple cpus calling dump_stack().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The checksumming bug was fixed in commit 34ae6a1aa054
 | 
					 | 
				
			||||||
("ipv6: update skb->csum when CE mark is propagated").
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The second problem is a faulty locking in dump_stack()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CPU1 runs in process context and calls dump_stack(), grabs dump_lock.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   CPU2 receives a TCP packet under softirq, grabs socket spinlock, and
 | 
					 | 
				
			||||||
   call dump_stack() from netdev_rx_csum_fault().
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   dump_stack() spins on atomic_cmpxchg(&dump_lock, -1, 2), since
 | 
					 | 
				
			||||||
   dump_lock is owned by CPU1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
While dumping its stack, CPU1 is interrupted by a softirq, and happens
 | 
					 | 
				
			||||||
to process a packet for the TCP socket locked by CPU2.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CPU1 spins forever in spin_lock() : deadlock
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Stack trace on CPU1 looked like :
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[306295.402231] NMI backtrace for cpu 1
 | 
					 | 
				
			||||||
[306295.402238] RIP: 0010:[<ffffffffa9804e95>]  [<ffffffffa9804e95>] _raw_spin_lock+0x25/0x30
 | 
					 | 
				
			||||||
...
 | 
					 | 
				
			||||||
[306295.402255] Stack:
 | 
					 | 
				
			||||||
[306295.402256]  ffff88407f023cb0 ffffffffa99cbdc3 ffff88407f023ca0 ffff88012f496bb0
 | 
					 | 
				
			||||||
[306295.402266]  ffffffffaa4dc1f0 ffff8820d94f0dc0 000000000000000a ffffffffaa4b4280
 | 
					 | 
				
			||||||
[306295.402275]  ffff88407f023ce0 ffffffffa98a21d0 ffff88407f023cc0 ffff88407f023ca0
 | 
					 | 
				
			||||||
[306295.402284] Call Trace:
 | 
					 | 
				
			||||||
[306295.402286]  <IRQ>
 | 
					 | 
				
			||||||
[306295.402288]
 | 
					 | 
				
			||||||
[306295.402291]  [<ffffffffa99cbdc3>] tcp_v6_rcv+0x243/0x620
 | 
					 | 
				
			||||||
[306295.402304]  [<ffffffffa99c38af>] ip6_input_finish+0x11f/0x330
 | 
					 | 
				
			||||||
[306295.402309]  [<ffffffffa99c3b38>] ip6_input+0x38/0x40
 | 
					 | 
				
			||||||
[306295.402313]  [<ffffffffa99c3b7c>] ip6_rcv_finish+0x3c/0x90
 | 
					 | 
				
			||||||
[306295.402318]  [<ffffffffa99c3e79>] ipv6_rcv+0x2a9/0x500
 | 
					 | 
				
			||||||
[306295.402323]  [<ffffffffa989a1a1>] process_backlog+0x461/0xaa0
 | 
					 | 
				
			||||||
[306295.402332]  [<ffffffffa9899a57>] net_rx_action+0x147/0x430
 | 
					 | 
				
			||||||
[306295.402337]  [<ffffffffa980cca7>] __do_softirq+0x167/0x2d0
 | 
					 | 
				
			||||||
[306295.402341]  [<ffffffffa9d912dc>] call_softirq+0x1c/0x30
 | 
					 | 
				
			||||||
[306295.402345]  [<ffffffffa980687f>] do_softirq+0x3f/0x80
 | 
					 | 
				
			||||||
[306295.402350]  [<ffffffffa980cf7e>] irq_exit+0x6e/0xc0
 | 
					 | 
				
			||||||
[306295.402355]  [<ffffffffa980a5b5>] smp_call_function_single_interrupt+0x35/0x40
 | 
					 | 
				
			||||||
[306295.402360]  [<ffffffffa9d90bfa>] call_function_single_interrupt+0x6a/0x70
 | 
					 | 
				
			||||||
[306295.402361]  <EOI>
 | 
					 | 
				
			||||||
[306295.402364]
 | 
					 | 
				
			||||||
[306295.402376]  [<ffffffffa9a3fa32>] printk+0x4d/0x4f
 | 
					 | 
				
			||||||
[306295.402390]  [<ffffffffa99e1726>] printk_address+0x31/0x33
 | 
					 | 
				
			||||||
[306295.402395]  [<ffffffffa99e175b>] print_trace_address+0x33/0x3c
 | 
					 | 
				
			||||||
[306295.402408]  [<ffffffffa99e165b>] print_context_stack+0x7f/0x119
 | 
					 | 
				
			||||||
[306295.402412]  [<ffffffffa99e07f1>] dump_trace+0x26b/0x28e
 | 
					 | 
				
			||||||
[306295.402417]  [<ffffffffa99e17b3>] show_trace_log_lvl+0x4f/0x5c
 | 
					 | 
				
			||||||
[306295.402421]  [<ffffffffa99e0a14>] show_stack_log_lvl+0x104/0x113
 | 
					 | 
				
			||||||
[306295.402425]  [<ffffffffa99e1819>] show_stack+0x42/0x44
 | 
					 | 
				
			||||||
[306295.402429]  [<ffffffffa9ba350a>] dump_stack+0x46/0x58
 | 
					 | 
				
			||||||
[306295.402434]  [<ffffffffa9d0957d>] netdev_rx_csum_fault+0x38/0x3c
 | 
					 | 
				
			||||||
[306295.402439]  [<ffffffffa9988e0e>] __skb_checksum_complete_head+0x6e/0x80
 | 
					 | 
				
			||||||
[306295.402444]  [<ffffffffa9988e31>] __skb_checksum_complete+0x11/0x20
 | 
					 | 
				
			||||||
[306295.402449]  [<ffffffffa98acf65>] tcp_rcv_established+0x2bd5/0x2fd0
 | 
					 | 
				
			||||||
[306295.402468]  [<ffffffffa99cb69c>] tcp_v6_do_rcv+0x13c/0x620
 | 
					 | 
				
			||||||
[306295.402477]  [<ffffffffa9984be5>] sk_backlog_rcv+0x15/0x30
 | 
					 | 
				
			||||||
[306295.402482]  [<ffffffffa98931e2>] release_sock+0xd2/0x150
 | 
					 | 
				
			||||||
[306295.402486]  [<ffffffffa98a51b1>] tcp_recvmsg+0x1c1/0xfc0
 | 
					 | 
				
			||||||
[306295.402491]  [<ffffffffa98b637d>] inet_recvmsg+0x7d/0x90
 | 
					 | 
				
			||||||
[306295.402495]  [<ffffffffa9891fcf>] sock_recvmsg+0xaf/0xe0
 | 
					 | 
				
			||||||
[306295.402505]  [<ffffffffa9892611>] ___sys_recvmsg+0x111/0x3b0
 | 
					 | 
				
			||||||
[306295.402528]  [<ffffffffa9892f5c>] SyS_recvmsg+0x5c/0xb0
 | 
					 | 
				
			||||||
[306295.402532]  [<ffffffffa9d8fba2>] system_call_fastpath+0x16/0x1b
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Fixes: b58d977432c8 ("dump_stack: serialize the output from dump_stack()")
 | 
					 | 
				
			||||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
 | 
					 | 
				
			||||||
Cc: Alex Thorlton <athorlton@sgi.com>
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--- a/lib/dump_stack.c
 | 
					 | 
				
			||||||
+++ b/lib/dump_stack.c
 | 
					 | 
				
			||||||
@@ -25,6 +25,7 @@ static atomic_t dump_lock = ATOMIC_INIT(
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 asmlinkage __visible void dump_stack(void)
 | 
					 | 
				
			||||||
 {
 | 
					 | 
				
			||||||
+	unsigned long flags;
 | 
					 | 
				
			||||||
 	int was_locked;
 | 
					 | 
				
			||||||
 	int old;
 | 
					 | 
				
			||||||
 	int cpu;
 | 
					 | 
				
			||||||
@@ -33,9 +34,8 @@ asmlinkage __visible void dump_stack(voi
 | 
					 | 
				
			||||||
 	 * Permit this cpu to perform nested stack dumps while serialising
 | 
					 | 
				
			||||||
 	 * against other CPUs
 | 
					 | 
				
			||||||
 	 */
 | 
					 | 
				
			||||||
-	preempt_disable();
 | 
					 | 
				
			||||||
-
 | 
					 | 
				
			||||||
 retry:
 | 
					 | 
				
			||||||
+	local_irq_save(flags);
 | 
					 | 
				
			||||||
 	cpu = smp_processor_id();
 | 
					 | 
				
			||||||
 	old = atomic_cmpxchg(&dump_lock, -1, cpu);
 | 
					 | 
				
			||||||
 	if (old == -1) {
 | 
					 | 
				
			||||||
@@ -43,6 +43,7 @@ retry:
 | 
					 | 
				
			||||||
 	} else if (old == cpu) {
 | 
					 | 
				
			||||||
 		was_locked = 1;
 | 
					 | 
				
			||||||
 	} else {
 | 
					 | 
				
			||||||
+		local_irq_restore(flags);
 | 
					 | 
				
			||||||
 		cpu_relax();
 | 
					 | 
				
			||||||
 		goto retry;
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
@@ -52,7 +53,7 @@ retry:
 | 
					 | 
				
			||||||
 	if (!was_locked)
 | 
					 | 
				
			||||||
 		atomic_set(&dump_lock, -1);
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
-	preempt_enable();
 | 
					 | 
				
			||||||
+	local_irq_restore(flags);
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
 #else
 | 
					 | 
				
			||||||
 asmlinkage __visible void dump_stack(void)
 | 
					 | 
				
			||||||
@@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/net/core/dev.c
 | 
					--- a/net/core/dev.c
 | 
				
			||||||
+++ b/net/core/dev.c
 | 
					+++ b/net/core/dev.c
 | 
				
			||||||
@@ -4199,6 +4199,9 @@ static enum gro_result dev_gro_receive(s
 | 
					@@ -4204,6 +4204,9 @@ static enum gro_result dev_gro_receive(s
 | 
				
			||||||
 	enum gro_result ret;
 | 
					 	enum gro_result ret;
 | 
				
			||||||
 	int grow;
 | 
					 	int grow;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
				
			|||||||
 	if (!(skb->dev->features & NETIF_F_GRO))
 | 
					 	if (!(skb->dev->features & NETIF_F_GRO))
 | 
				
			||||||
 		goto normal;
 | 
					 		goto normal;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -5349,6 +5352,48 @@ static void __netdev_adjacent_dev_unlink
 | 
					@@ -5354,6 +5357,48 @@ static void __netdev_adjacent_dev_unlink
 | 
				
			||||||
 					   &upper_dev->adj_list.lower);
 | 
					 					   &upper_dev->adj_list.lower);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
				
			|||||||
 static int __netdev_upper_dev_link(struct net_device *dev,
 | 
					 static int __netdev_upper_dev_link(struct net_device *dev,
 | 
				
			||||||
 				   struct net_device *upper_dev, bool master,
 | 
					 				   struct net_device *upper_dev, bool master,
 | 
				
			||||||
 				   void *private)
 | 
					 				   void *private)
 | 
				
			||||||
@@ -5420,6 +5465,7 @@ static int __netdev_upper_dev_link(struc
 | 
					@@ -5425,6 +5470,7 @@ static int __netdev_upper_dev_link(struc
 | 
				
			||||||
 			goto rollback_lower_mesh;
 | 
					 			goto rollback_lower_mesh;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
				
			|||||||
 	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
 | 
					 	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
 | 
				
			||||||
 				      &changeupper_info.info);
 | 
					 				      &changeupper_info.info);
 | 
				
			||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
@@ -5546,6 +5592,7 @@ void netdev_upper_dev_unlink(struct net_
 | 
					@@ -5551,6 +5597,7 @@ void netdev_upper_dev_unlink(struct net_
 | 
				
			||||||
 	list_for_each_entry(i, &upper_dev->all_adj_list.upper, list)
 | 
					 	list_for_each_entry(i, &upper_dev->all_adj_list.upper, list)
 | 
				
			||||||
 		__netdev_adjacent_dev_unlink(dev, i->dev);
 | 
					 		__netdev_adjacent_dev_unlink(dev, i->dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -92,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 | 
				
			|||||||
 	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
 | 
					 	call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
 | 
				
			||||||
 				      &changeupper_info.info);
 | 
					 				      &changeupper_info.info);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@@ -6086,6 +6133,7 @@ int dev_set_mac_address(struct net_devic
 | 
					@@ -6091,6 +6138,7 @@ int dev_set_mac_address(struct net_devic
 | 
				
			||||||
 	if (err)
 | 
					 	if (err)
 | 
				
			||||||
 		return err;
 | 
					 		return err;
 | 
				
			||||||
 	dev->addr_assign_type = NET_ADDR_SET;
 | 
					 	dev->addr_assign_type = NET_ADDR_SET;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,7 +86,7 @@
 | 
				
			|||||||
 	help
 | 
					 	help
 | 
				
			||||||
--- a/net/core/dev.c
 | 
					--- a/net/core/dev.c
 | 
				
			||||||
+++ b/net/core/dev.c
 | 
					+++ b/net/core/dev.c
 | 
				
			||||||
@@ -2708,10 +2708,20 @@ static int xmit_one(struct sk_buff *skb,
 | 
					@@ -2713,10 +2713,20 @@ static int xmit_one(struct sk_buff *skb,
 | 
				
			||||||
 	if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
 | 
					 	if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
 | 
				
			||||||
 		dev_queue_xmit_nit(skb, dev);
 | 
					 		dev_queue_xmit_nit(skb, dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,7 @@
 | 
				
			|||||||
  * @dev: device the buffer will be used with
 | 
					  * @dev: device the buffer will be used with
 | 
				
			||||||
--- a/include/linux/usb.h
 | 
					--- a/include/linux/usb.h
 | 
				
			||||||
+++ b/include/linux/usb.h
 | 
					+++ b/include/linux/usb.h
 | 
				
			||||||
@@ -725,6 +725,7 @@ static inline bool usb_device_no_sg_cons
 | 
					@@ -729,6 +729,7 @@ static inline bool usb_device_no_sg_cons
 | 
				
			||||||
 	return udev && udev->bus && udev->bus->no_sg_constraint;
 | 
					 	return udev && udev->bus && udev->bus->no_sg_constraint;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -441,7 +441,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 | 
				
			|||||||
 {
 | 
					 {
 | 
				
			||||||
--- a/arch/mips/mm/cache.c
 | 
					--- a/arch/mips/mm/cache.c
 | 
				
			||||||
+++ b/arch/mips/mm/cache.c
 | 
					+++ b/arch/mips/mm/cache.c
 | 
				
			||||||
@@ -59,6 +59,8 @@ void (*_dma_cache_wback)(unsigned long s
 | 
					@@ -60,6 +60,8 @@ void (*_dma_cache_wback)(unsigned long s
 | 
				
			||||||
 void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 | 
					 void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 EXPORT_SYMBOL(_dma_cache_wback_inv);
 | 
					 EXPORT_SYMBOL(_dma_cache_wback_inv);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ Subject: [PATCH 32/36] USB: fix roothub for IFXHCD
 | 
				
			|||||||
 choice
 | 
					 choice
 | 
				
			||||||
--- a/drivers/usb/core/hub.c
 | 
					--- a/drivers/usb/core/hub.c
 | 
				
			||||||
+++ b/drivers/usb/core/hub.c
 | 
					+++ b/drivers/usb/core/hub.c
 | 
				
			||||||
@@ -4337,7 +4337,7 @@ hub_port_init(struct usb_hub *hub, struc
 | 
					@@ -4358,7 +4358,7 @@ hub_port_init(struct usb_hub *hub, struc
 | 
				
			||||||
 		udev->ttport = hdev->ttport;
 | 
					 		udev->ttport = hdev->ttport;
 | 
				
			||||||
 	} else if (udev->speed != USB_SPEED_HIGH
 | 
					 	} else if (udev->speed != USB_SPEED_HIGH
 | 
				
			||||||
 			&& hdev->speed == USB_SPEED_HIGH) {
 | 
					 			&& hdev->speed == USB_SPEED_HIGH) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1266,7 +1266,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
 | 
				
			|||||||
 /* ---------  pinconf related code --------- */
 | 
					 /* ---------  pinconf related code --------- */
 | 
				
			||||||
 static int xway_pinconf_get(struct pinctrl_dev *pctldev,
 | 
					 static int xway_pinconf_get(struct pinctrl_dev *pctldev,
 | 
				
			||||||
 				unsigned pin,
 | 
					 				unsigned pin,
 | 
				
			||||||
@@ -714,10 +1601,7 @@ static struct gpio_chip xway_chip = {
 | 
					@@ -715,10 +1602,7 @@ static struct gpio_chip xway_chip = {
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 /* --------- register the pinctrl layer --------- */
 | 
					 /* --------- register the pinctrl layer --------- */
 | 
				
			||||||
@@ -1278,7 +1278,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
 | 
				
			|||||||
 	int pin_count;
 | 
					 	int pin_count;
 | 
				
			||||||
 	const struct ltq_mfp_pin *mfp;
 | 
					 	const struct ltq_mfp_pin *mfp;
 | 
				
			||||||
 	const struct ltq_pin_group *grps;
 | 
					 	const struct ltq_pin_group *grps;
 | 
				
			||||||
@@ -726,22 +1610,54 @@ static struct pinctrl_xway_soc {
 | 
					@@ -727,22 +1611,54 @@ static struct pinctrl_xway_soc {
 | 
				
			||||||
 	unsigned int num_funcs;
 | 
					 	unsigned int num_funcs;
 | 
				
			||||||
 	const unsigned *exin;
 | 
					 	const unsigned *exin;
 | 
				
			||||||
 	unsigned int num_exin;
 | 
					 	unsigned int num_exin;
 | 
				
			||||||
@@ -1349,7 +1349,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
 | 
				
			|||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static struct pinctrl_gpio_range xway_gpio_range = {
 | 
					 static struct pinctrl_gpio_range xway_gpio_range = {
 | 
				
			||||||
@@ -750,9 +1666,14 @@ static struct pinctrl_gpio_range xway_gp
 | 
					@@ -751,9 +1667,14 @@ static struct pinctrl_gpio_range xway_gp
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static const struct of_device_id xway_match[] = {
 | 
					 static const struct of_device_id xway_match[] = {
 | 
				
			||||||
@@ -1367,7 +1367,7 @@ Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
 | 
				
			|||||||
 	{},
 | 
					 	{},
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 MODULE_DEVICE_TABLE(of, xway_match);
 | 
					 MODULE_DEVICE_TABLE(of, xway_match);
 | 
				
			||||||
@@ -774,7 +1695,7 @@ static int pinmux_xway_probe(struct plat
 | 
					@@ -775,7 +1696,7 @@ static int pinmux_xway_probe(struct plat
 | 
				
			||||||
 	if (match)
 | 
					 	if (match)
 | 
				
			||||||
 		xway_soc = (const struct pinctrl_xway_soc *) match->data;
 | 
					 		xway_soc = (const struct pinctrl_xway_soc *) match->data;
 | 
				
			||||||
 	else
 | 
					 	else
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,9 +17,9 @@
 | 
				
			|||||||
 	depends on MFD_WM831X
 | 
					 	depends on MFD_WM831X
 | 
				
			||||||
--- a/drivers/power/Makefile
 | 
					--- a/drivers/power/Makefile
 | 
				
			||||||
+++ b/drivers/power/Makefile
 | 
					+++ b/drivers/power/Makefile
 | 
				
			||||||
@@ -10,6 +10,7 @@ obj-$(CONFIG_GENERIC_ADC_BATTERY)	+= gen
 | 
					@@ -11,6 +11,7 @@ obj-$(CONFIG_PDA_POWER)		+= pda_power.o
 | 
				
			||||||
 obj-$(CONFIG_PDA_POWER)		+= pda_power.o
 | 
					 | 
				
			||||||
 obj-$(CONFIG_APM_POWER)		+= apm_power.o
 | 
					 obj-$(CONFIG_APM_POWER)		+= apm_power.o
 | 
				
			||||||
 | 
					 obj-$(CONFIG_AXP20X_POWER)	+= axp20x_usb_power.o
 | 
				
			||||||
 obj-$(CONFIG_MAX8925_POWER)	+= max8925_power.o
 | 
					 obj-$(CONFIG_MAX8925_POWER)	+= max8925_power.o
 | 
				
			||||||
+obj-$(CONFIG_MXS_POWER)		+= mxs_power.o
 | 
					+obj-$(CONFIG_MXS_POWER)		+= mxs_power.o
 | 
				
			||||||
 obj-$(CONFIG_WM831X_BACKUP)	+= wm831x_backup.o
 | 
					 obj-$(CONFIG_WM831X_BACKUP)	+= wm831x_backup.o
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/drivers/regulator/Kconfig
 | 
					--- a/drivers/regulator/Kconfig
 | 
				
			||||||
+++ b/drivers/regulator/Kconfig
 | 
					+++ b/drivers/regulator/Kconfig
 | 
				
			||||||
@@ -450,6 +450,14 @@ config REGULATOR_MT6397
 | 
					@@ -461,6 +461,14 @@ config REGULATOR_MT6397
 | 
				
			||||||
 	  This driver supports the control of different power rails of device
 | 
					 	  This driver supports the control of different power rails of device
 | 
				
			||||||
 	  through regulator interface.
 | 
					 	  through regulator interface.
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -17,14 +17,14 @@
 | 
				
			|||||||
 	depends on MFD_PALMAS
 | 
					 	depends on MFD_PALMAS
 | 
				
			||||||
--- a/drivers/regulator/Makefile
 | 
					--- a/drivers/regulator/Makefile
 | 
				
			||||||
+++ b/drivers/regulator/Makefile
 | 
					+++ b/drivers/regulator/Makefile
 | 
				
			||||||
@@ -60,6 +60,7 @@ obj-$(CONFIG_REGULATOR_MC13783) += mc137
 | 
					@@ -61,6 +61,7 @@ obj-$(CONFIG_REGULATOR_MC13892) += mc138
 | 
				
			||||||
 obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o
 | 
					 | 
				
			||||||
 obj-$(CONFIG_REGULATOR_MC13XXX_CORE) +=  mc13xxx-regulator-core.o
 | 
					 obj-$(CONFIG_REGULATOR_MC13XXX_CORE) +=  mc13xxx-regulator-core.o
 | 
				
			||||||
 | 
					 obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o
 | 
				
			||||||
 obj-$(CONFIG_REGULATOR_MT6397)	+= mt6397-regulator.o
 | 
					 obj-$(CONFIG_REGULATOR_MT6397)	+= mt6397-regulator.o
 | 
				
			||||||
+obj-$(CONFIG_REGULATOR_MXS) += mxs-regulator.o
 | 
					+obj-$(CONFIG_REGULATOR_MXS) += mxs-regulator.o
 | 
				
			||||||
 obj-$(CONFIG_REGULATOR_QCOM_RPM) += qcom_rpm-regulator.o
 | 
					 obj-$(CONFIG_REGULATOR_QCOM_RPM) += qcom_rpm-regulator.o
 | 
				
			||||||
 obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o
 | 
					 obj-$(CONFIG_REGULATOR_QCOM_SMD_RPM) += qcom_smd-regulator.o
 | 
				
			||||||
 obj-$(CONFIG_REGULATOR_PFUZE100) += pfuze100-regulator.o
 | 
					 obj-$(CONFIG_REGULATOR_QCOM_SPMI) += qcom_spmi-regulator.o
 | 
				
			||||||
--- /dev/null
 | 
					--- /dev/null
 | 
				
			||||||
+++ b/drivers/regulator/mxs-regulator.c
 | 
					+++ b/drivers/regulator/mxs-regulator.c
 | 
				
			||||||
@@ -0,0 +1,540 @@
 | 
					@@ -0,0 +1,540 @@
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/arch/arm/boot/dts/imx23.dtsi
 | 
					--- a/arch/arm/boot/dts/imx23.dtsi
 | 
				
			||||||
+++ b/arch/arm/boot/dts/imx23.dtsi
 | 
					+++ b/arch/arm/boot/dts/imx23.dtsi
 | 
				
			||||||
@@ -404,8 +404,46 @@
 | 
					@@ -439,8 +439,46 @@
 | 
				
			||||||
 			};
 | 
					 			};
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 			power@80044000 {
 | 
					 			power@80044000 {
 | 
				
			||||||
@@ -50,7 +50,7 @@
 | 
				
			|||||||
 			saif1: saif@80046000 {
 | 
					 			saif1: saif@80046000 {
 | 
				
			||||||
--- a/arch/arm/boot/dts/imx28.dtsi
 | 
					--- a/arch/arm/boot/dts/imx28.dtsi
 | 
				
			||||||
+++ b/arch/arm/boot/dts/imx28.dtsi
 | 
					+++ b/arch/arm/boot/dts/imx28.dtsi
 | 
				
			||||||
@@ -1035,8 +1035,46 @@
 | 
					@@ -1037,8 +1037,46 @@
 | 
				
			||||||
 			};
 | 
					 			};
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 			power: power@80044000 {
 | 
					 			power: power@80044000 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,11 +21,9 @@ Changes since v2:
 | 
				
			|||||||
 drivers/crypto/mxs-dcp.c | 24 ++++++++++++++++++++++++
 | 
					 drivers/crypto/mxs-dcp.c | 24 ++++++++++++++++++++++++
 | 
				
			||||||
 1 file changed, 24 insertions(+)
 | 
					 1 file changed, 24 insertions(+)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c
 | 
					 | 
				
			||||||
index 59ed54e..1e2017f 100644
 | 
					 | 
				
			||||||
--- a/drivers/crypto/mxs-dcp.c
 | 
					--- a/drivers/crypto/mxs-dcp.c
 | 
				
			||||||
+++ b/drivers/crypto/mxs-dcp.c
 | 
					+++ b/drivers/crypto/mxs-dcp.c
 | 
				
			||||||
@@ -775,6 +775,24 @@ static void dcp_sha_cra_exit(struct crypto_tfm *tfm)
 | 
					@@ -775,6 +775,24 @@ static void dcp_sha_cra_exit(struct cryp
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -62,7 +60,7 @@ index 59ed54e..1e2017f 100644
 | 
				
			|||||||
 		.base		= {
 | 
					 		.base		= {
 | 
				
			||||||
 			.cra_name		= "sha1",
 | 
					 			.cra_name		= "sha1",
 | 
				
			||||||
 			.cra_driver_name	= "sha1-dcp",
 | 
					 			.cra_driver_name	= "sha1-dcp",
 | 
				
			||||||
@@ -858,8 +879,11 @@ static struct ahash_alg dcp_sha256_alg = {
 | 
					@@ -858,8 +879,11 @@ static struct ahash_alg dcp_sha256_alg =
 | 
				
			||||||
 	.final	= dcp_sha_final,
 | 
					 	.final	= dcp_sha_final,
 | 
				
			||||||
 	.finup	= dcp_sha_finup,
 | 
					 	.finup	= dcp_sha_finup,
 | 
				
			||||||
 	.digest	= dcp_sha_digest,
 | 
					 	.digest	= dcp_sha_digest,
 | 
				
			||||||
@@ -74,7 +72,3 @@ index 59ed54e..1e2017f 100644
 | 
				
			|||||||
 		.base		= {
 | 
					 		.base		= {
 | 
				
			||||||
 			.cra_name		= "sha256",
 | 
					 			.cra_name		= "sha256",
 | 
				
			||||||
 			.cra_driver_name	= "sha256-dcp",
 | 
					 			.cra_driver_name	= "sha256-dcp",
 | 
				
			||||||
-- 
 | 
					 | 
				
			||||||
1.9.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/drivers/pci/host/Kconfig
 | 
					--- a/drivers/pci/host/Kconfig
 | 
				
			||||||
+++ b/drivers/pci/host/Kconfig
 | 
					+++ b/drivers/pci/host/Kconfig
 | 
				
			||||||
@@ -172,4 +172,9 @@ config PCI_HISI
 | 
					@@ -173,4 +173,9 @@ config PCI_HISI
 | 
				
			||||||
 	help
 | 
					 	help
 | 
				
			||||||
 	  Say Y here if you want PCIe controller support on HiSilicon HIP05 SoC
 | 
					 	  Say Y here if you want PCIe controller support on HiSilicon HIP05 SoC
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,37 +0,0 @@
 | 
				
			|||||||
From 4f9ea86604e3ba64edd2817795798168fbb3c1a6 Mon Sep 17 00:00:00 2001
 | 
					 | 
				
			||||||
From: LABBE Corentin <clabbe.montjoie@gmail.com>
 | 
					 | 
				
			||||||
Date: Mon, 16 Nov 2015 09:35:54 +0100
 | 
					 | 
				
			||||||
Subject: [PATCH] crypto: sun4i-ss - add missing statesize
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
sun4i-ss implementaton of md5/sha1 is via ahash algorithms.
 | 
					 | 
				
			||||||
Commit 8996eafdcbad ("crypto: ahash - ensure statesize is non-zero")
 | 
					 | 
				
			||||||
made impossible to load them without giving statesize. This patch
 | 
					 | 
				
			||||||
specifiy statesize for sha1 and md5.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Fixes: 6298e948215f ("crypto: sunxi-ss - Add Allwinner Security System crypto accelerator")
 | 
					 | 
				
			||||||
Cc: <stable@vger.kernel.org> # v4.3+
 | 
					 | 
				
			||||||
Tested-by: Chen-Yu Tsai <wens@csie.org>
 | 
					 | 
				
			||||||
Signed-off-by: LABBE Corentin <clabbe.montjoie@gmail.com>
 | 
					 | 
				
			||||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 drivers/crypto/sunxi-ss/sun4i-ss-core.c | 2 ++
 | 
					 | 
				
			||||||
 1 file changed, 2 insertions(+)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--- a/drivers/crypto/sunxi-ss/sun4i-ss-core.c
 | 
					 | 
				
			||||||
+++ b/drivers/crypto/sunxi-ss/sun4i-ss-core.c
 | 
					 | 
				
			||||||
@@ -39,6 +39,7 @@ static struct sun4i_ss_alg_template ss_a
 | 
					 | 
				
			||||||
 		.import = sun4i_hash_import_md5,
 | 
					 | 
				
			||||||
 		.halg = {
 | 
					 | 
				
			||||||
 			.digestsize = MD5_DIGEST_SIZE,
 | 
					 | 
				
			||||||
+			.statesize = sizeof(struct md5_state),
 | 
					 | 
				
			||||||
 			.base = {
 | 
					 | 
				
			||||||
 				.cra_name = "md5",
 | 
					 | 
				
			||||||
 				.cra_driver_name = "md5-sun4i-ss",
 | 
					 | 
				
			||||||
@@ -66,6 +67,7 @@ static struct sun4i_ss_alg_template ss_a
 | 
					 | 
				
			||||||
 		.import = sun4i_hash_import_sha1,
 | 
					 | 
				
			||||||
 		.halg = {
 | 
					 | 
				
			||||||
 			.digestsize = SHA1_DIGEST_SIZE,
 | 
					 | 
				
			||||||
+			.statesize = sizeof(struct sha1_state),
 | 
					 | 
				
			||||||
 			.base = {
 | 
					 | 
				
			||||||
 				.cra_name = "sha1",
 | 
					 | 
				
			||||||
 				.cra_driver_name = "sha1-sun4i-ss",
 | 
					 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/scripts/link-vmlinux.sh
 | 
					--- a/scripts/link-vmlinux.sh
 | 
				
			||||||
+++ b/scripts/link-vmlinux.sh
 | 
					+++ b/scripts/link-vmlinux.sh
 | 
				
			||||||
@@ -62,7 +62,7 @@
 | 
					@@ -62,7 +62,7 @@ vmlinux_link()
 | 
				
			||||||
 			-Wl,--start-group                                    \
 | 
					 			-Wl,--start-group                                    \
 | 
				
			||||||
 				 ${KBUILD_VMLINUX_MAIN}                      \
 | 
					 				 ${KBUILD_VMLINUX_MAIN}                      \
 | 
				
			||||||
 			-Wl,--end-group                                      \
 | 
					 			-Wl,--end-group                                      \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
#
 | 
					#
 | 
				
			||||||
--- a/arch/um/drivers/mconsole.h
 | 
					--- a/arch/um/drivers/mconsole.h
 | 
				
			||||||
+++ b/arch/um/drivers/mconsole.h
 | 
					+++ b/arch/um/drivers/mconsole.h
 | 
				
			||||||
@@ -85,6 +85,7 @@
 | 
					@@ -85,6 +85,7 @@ extern void mconsole_cad(struct mc_reque
 | 
				
			||||||
 extern void mconsole_stop(struct mc_request *req);
 | 
					 extern void mconsole_stop(struct mc_request *req);
 | 
				
			||||||
 extern void mconsole_go(struct mc_request *req);
 | 
					 extern void mconsole_go(struct mc_request *req);
 | 
				
			||||||
 extern void mconsole_log(struct mc_request *req);
 | 
					 extern void mconsole_log(struct mc_request *req);
 | 
				
			||||||
@@ -43,7 +43,7 @@
 | 
				
			|||||||
 #include <asm/uaccess.h>
 | 
					 #include <asm/uaccess.h>
 | 
				
			||||||
 #include <asm/switch_to.h>
 | 
					 #include <asm/switch_to.h>
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -121,6 +123,59 @@
 | 
					@@ -121,6 +123,59 @@ void mconsole_log(struct mc_request *req
 | 
				
			||||||
 	mconsole_reply(req, "", 0, 0);
 | 
					 	mconsole_reply(req, "", 0, 0);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -103,7 +103,7 @@
 | 
				
			|||||||
 void mconsole_proc(struct mc_request *req)
 | 
					 void mconsole_proc(struct mc_request *req)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt;
 | 
					 	struct vfsmount *mnt = task_active_pid_ns(current)->proc_mnt;
 | 
				
			||||||
@@ -187,6 +242,7 @@
 | 
					@@ -187,6 +242,7 @@ void mconsole_proc(struct mc_request *re
 | 
				
			||||||
     stop - pause the UML; it will do nothing until it receives a 'go' \n\
 | 
					     stop - pause the UML; it will do nothing until it receives a 'go' \n\
 | 
				
			||||||
     go - continue the UML after a 'stop' \n\
 | 
					     go - continue the UML after a 'stop' \n\
 | 
				
			||||||
     log <string> - make UML enter <string> into the kernel log\n\
 | 
					     log <string> - make UML enter <string> into the kernel log\n\
 | 
				
			||||||
@@ -113,7 +113,7 @@
 | 
				
			|||||||
 "
 | 
					 "
 | 
				
			||||||
--- a/arch/um/drivers/mconsole_user.c
 | 
					--- a/arch/um/drivers/mconsole_user.c
 | 
				
			||||||
+++ b/arch/um/drivers/mconsole_user.c
 | 
					+++ b/arch/um/drivers/mconsole_user.c
 | 
				
			||||||
@@ -30,6 +30,7 @@
 | 
					@@ -30,6 +30,7 @@ static struct mconsole_command commands[
 | 
				
			||||||
 	{ "stop", mconsole_stop, MCONSOLE_PROC },
 | 
					 	{ "stop", mconsole_stop, MCONSOLE_PROC },
 | 
				
			||||||
 	{ "go", mconsole_go, MCONSOLE_INTR },
 | 
					 	{ "go", mconsole_go, MCONSOLE_INTR },
 | 
				
			||||||
 	{ "log", mconsole_log, MCONSOLE_INTR },
 | 
					 	{ "log", mconsole_log, MCONSOLE_INTR },
 | 
				
			||||||
@@ -123,7 +123,7 @@
 | 
				
			|||||||
 };
 | 
					 };
 | 
				
			||||||
--- a/arch/um/os-Linux/file.c
 | 
					--- a/arch/um/os-Linux/file.c
 | 
				
			||||||
+++ b/arch/um/os-Linux/file.c
 | 
					+++ b/arch/um/os-Linux/file.c
 | 
				
			||||||
@@ -535,6 +535,8 @@
 | 
					@@ -535,6 +535,8 @@ int os_create_unix_socket(const char *fi
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	addr.sun_family = AF_UNIX;
 | 
					 	addr.sun_family = AF_UNIX;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -134,7 +134,7 @@
 | 
				
			|||||||
 	err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
 | 
					 	err = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
 | 
				
			||||||
--- a/include/linux/kmod.h
 | 
					--- a/include/linux/kmod.h
 | 
				
			||||||
+++ b/include/linux/kmod.h
 | 
					+++ b/include/linux/kmod.h
 | 
				
			||||||
@@ -62,6 +62,7 @@
 | 
					@@ -62,6 +62,7 @@ struct subprocess_info {
 | 
				
			||||||
 	int wait;
 | 
					 	int wait;
 | 
				
			||||||
 	int retval;
 | 
					 	int retval;
 | 
				
			||||||
 	int (*init)(struct subprocess_info *info, struct cred *new);
 | 
					 	int (*init)(struct subprocess_info *info, struct cred *new);
 | 
				
			||||||
@@ -142,7 +142,7 @@
 | 
				
			|||||||
 	void (*cleanup)(struct subprocess_info *info);
 | 
					 	void (*cleanup)(struct subprocess_info *info);
 | 
				
			||||||
 	void *data;
 | 
					 	void *data;
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
@@ -102,4 +103,6 @@
 | 
					@@ -102,4 +103,6 @@ extern int usermodehelper_read_trylock(v
 | 
				
			||||||
 extern long usermodehelper_read_lock_wait(long timeout);
 | 
					 extern long usermodehelper_read_lock_wait(long timeout);
 | 
				
			||||||
 extern void usermodehelper_read_unlock(void);
 | 
					 extern void usermodehelper_read_unlock(void);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -159,7 +159,7 @@
 | 
				
			|||||||
 #include <asm/uaccess.h>
 | 
					 #include <asm/uaccess.h>
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 #include <trace/events/module.h>
 | 
					 #include <trace/events/module.h>
 | 
				
			||||||
@@ -222,6 +223,28 @@
 | 
					@@ -222,6 +223,28 @@ static int call_usermodehelper_exec_asyn
 | 
				
			||||||
 	flush_signal_handlers(current, 1);
 | 
					 	flush_signal_handlers(current, 1);
 | 
				
			||||||
 	spin_unlock_irq(¤t->sighand->siglock);
 | 
					 	spin_unlock_irq(¤t->sighand->siglock);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -188,7 +188,7 @@
 | 
				
			|||||||
 	/*
 | 
					 	/*
 | 
				
			||||||
 	 * Our parent (unbound workqueue) runs with elevated scheduling
 | 
					 	 * Our parent (unbound workqueue) runs with elevated scheduling
 | 
				
			||||||
 	 * priority. Avoid propagating that into the userspace child.
 | 
					 	 * priority. Avoid propagating that into the userspace child.
 | 
				
			||||||
@@ -540,6 +563,20 @@
 | 
					@@ -540,6 +563,20 @@ struct subprocess_info *call_usermodehel
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 EXPORT_SYMBOL(call_usermodehelper_setup);
 | 
					 EXPORT_SYMBOL(call_usermodehelper_setup);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ Applies to vanilla kernel 3.9.4.
 | 
				
			|||||||
===============================================================================
 | 
					===============================================================================
 | 
				
			||||||
--- a/arch/um/Kconfig.net
 | 
					--- a/arch/um/Kconfig.net
 | 
				
			||||||
+++ b/arch/um/Kconfig.net
 | 
					+++ b/arch/um/Kconfig.net
 | 
				
			||||||
@@ -21,6 +21,19 @@
 | 
					@@ -21,6 +21,19 @@ config UML_NET
 | 
				
			||||||
         enable at least one of the following transport options to actually
 | 
					         enable at least one of the following transport options to actually
 | 
				
			||||||
         make use of UML networking.
 | 
					         make use of UML networking.
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -47,7 +47,7 @@ Applies to vanilla kernel 3.9.4.
 | 
				
			|||||||
 #define DRIVER_NAME "uml-netdev"
 | 
					 #define DRIVER_NAME "uml-netdev"
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static DEFINE_SPINLOCK(opened_lock);
 | 
					 static DEFINE_SPINLOCK(opened_lock);
 | 
				
			||||||
@@ -295,11 +302,47 @@
 | 
					@@ -295,11 +302,47 @@ static void uml_net_user_timer_expire(un
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -95,7 +95,7 @@ Applies to vanilla kernel 3.9.4.
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	if (str == NULL)
 | 
					 	if (str == NULL)
 | 
				
			||||||
 		goto random;
 | 
					 		goto random;
 | 
				
			||||||
@@ -340,9 +383,26 @@
 | 
					@@ -340,9 +383,26 @@ static void setup_etheraddr(struct net_d
 | 
				
			||||||
 	return;
 | 
					 	return;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 random:
 | 
					 random:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,11 +5,9 @@ Subject: [PATCH] arm: dts: zynq-zc702.dts: Set default rdinit to /sbin/init
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Signed-off-by: Jason Wu <jason.wu.misc@gmail.com>
 | 
					Signed-off-by: Jason Wu <jason.wu.misc@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
diff --git a/arch/arm/boot/dts/zynq-zc702.dts b/arch/arm/boot/dts/zynq-zc702.dts
 | 
					 | 
				
			||||||
index 68bd8c1..adf9a1d 100644
 | 
					 | 
				
			||||||
--- a/arch/arm/boot/dts/zynq-zc702.dts
 | 
					--- a/arch/arm/boot/dts/zynq-zc702.dts
 | 
				
			||||||
+++ b/arch/arm/boot/dts/zynq-zc702.dts
 | 
					+++ b/arch/arm/boot/dts/zynq-zc702.dts
 | 
				
			||||||
@@ -31,7 +31,7 @@
 | 
					@@ -30,7 +30,7 @@
 | 
				
			||||||
 	};
 | 
					 	};
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	chosen {
 | 
					 	chosen {
 | 
				
			||||||
@@ -18,6 +16,3 @@ index 68bd8c1..adf9a1d 100644
 | 
				
			|||||||
 		stdout-path = "serial0:115200n8";
 | 
					 		stdout-path = "serial0:115200n8";
 | 
				
			||||||
 	};
 | 
					 	};
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
--
 | 
					 | 
				
			||||||
1.9.1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user