mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	kernel: bump 3.18 to 3.18.119
Refreshed all patches. Compile-tested on: adm5120, adm8668, au1000, mcs814x, ppc40x, ppc44x, xburst Runtime-tested on: none Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
This commit is contained in:
		
							parent
							
								
									1f7ce19df2
								
							
						
					
					
						commit
						548182bc6d
					
				@ -2,11 +2,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
LINUX_RELEASE?=1
 | 
					LINUX_RELEASE?=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LINUX_VERSION-3.18 = .71
 | 
					LINUX_VERSION-3.18 = .119
 | 
				
			||||||
LINUX_VERSION-4.9 = .122
 | 
					LINUX_VERSION-4.9 = .122
 | 
				
			||||||
LINUX_VERSION-4.14 = .65
 | 
					LINUX_VERSION-4.14 = .65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LINUX_KERNEL_HASH-3.18.71 = 5abc9778ad44ce02ed6c8ab52ece8a21c6d20d21f6ed8a19287b4a38a50c1240
 | 
					LINUX_KERNEL_HASH-3.18.119 = 2bab623ed868b679eac224f62212cc285264061bedf1e32897f72e35aa26160d
 | 
				
			||||||
LINUX_KERNEL_HASH-4.9.122 = a46f90876b2cdb8ca1626e6489e76f8706dfd593a9d44fc91e68df47db6cf86c
 | 
					LINUX_KERNEL_HASH-4.9.122 = a46f90876b2cdb8ca1626e6489e76f8706dfd593a9d44fc91e68df47db6cf86c
 | 
				
			||||||
LINUX_KERNEL_HASH-4.14.65 = 12980c406bb9be670db58a88464d1c36cafd3c1d4d5ee09e8ecfa71e5eb5a5ec
 | 
					LINUX_KERNEL_HASH-4.14.65 = 12980c406bb9be670db58a88464d1c36cafd3c1d4d5ee09e8ecfa71e5eb5a5ec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
 obj-$(CONFIG_PCI_AR724X)	+= pci-ar724x.o
 | 
					 obj-$(CONFIG_PCI_AR724X)	+= pci-ar724x.o
 | 
				
			||||||
--- a/include/linux/pci_ids.h
 | 
					--- a/include/linux/pci_ids.h
 | 
				
			||||||
+++ b/include/linux/pci_ids.h
 | 
					+++ b/include/linux/pci_ids.h
 | 
				
			||||||
@@ -1820,6 +1820,9 @@
 | 
					@@ -1821,6 +1821,9 @@
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 #define PCI_VENDOR_ID_CB		0x1307	/* Measurement Computing */
 | 
					 #define PCI_VENDOR_ID_CB		0x1307	/* Measurement Computing */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -67,7 +67,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
--- a/drivers/mtd/chips/Kconfig
 | 
					--- a/drivers/mtd/chips/Kconfig
 | 
				
			||||||
+++ b/drivers/mtd/chips/Kconfig
 | 
					+++ b/drivers/mtd/chips/Kconfig
 | 
				
			||||||
@@ -188,6 +188,14 @@ config MTD_CFI_AMDSTD
 | 
					@@ -189,6 +189,14 @@ config MTD_CFI_AMDSTD
 | 
				
			||||||
 	  provides support for command set 0002, used on chips including
 | 
					 	  provides support for command set 0002, used on chips including
 | 
				
			||||||
 	  the AMD Am29LV320.
 | 
					 	  the AMD Am29LV320.
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
 obj-$(CONFIG_PATA_SAMSUNG_CF)	+= pata_samsung_cf.o
 | 
					 obj-$(CONFIG_PATA_SAMSUNG_CF)	+= pata_samsung_cf.o
 | 
				
			||||||
--- a/drivers/ata/Kconfig
 | 
					--- a/drivers/ata/Kconfig
 | 
				
			||||||
+++ b/drivers/ata/Kconfig
 | 
					+++ b/drivers/ata/Kconfig
 | 
				
			||||||
@@ -955,6 +955,15 @@ config PATA_QDI
 | 
					@@ -958,6 +958,15 @@ config PATA_QDI
 | 
				
			||||||
 	help
 | 
					 	help
 | 
				
			||||||
 	  Support for QDI 6500 and 6580 PATA controllers on VESA local bus.
 | 
					 	  Support for QDI 6500 and 6580 PATA controllers on VESA local bus.
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
 obj-$(CONFIG_CAVIUM_OCTEON_SOC) += msi-octeon.o
 | 
					 obj-$(CONFIG_CAVIUM_OCTEON_SOC) += msi-octeon.o
 | 
				
			||||||
--- a/include/linux/pci_ids.h
 | 
					--- a/include/linux/pci_ids.h
 | 
				
			||||||
+++ b/include/linux/pci_ids.h
 | 
					+++ b/include/linux/pci_ids.h
 | 
				
			||||||
@@ -1820,6 +1820,9 @@
 | 
					@@ -1821,6 +1821,9 @@
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 #define PCI_VENDOR_ID_CB		0x1307	/* Measurement Computing */
 | 
					 #define PCI_VENDOR_ID_CB		0x1307	/* Measurement Computing */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/drivers/net/ethernet/dec/tulip/tulip_core.c
 | 
					--- a/drivers/net/ethernet/dec/tulip/tulip_core.c
 | 
				
			||||||
+++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
 | 
					+++ b/drivers/net/ethernet/dec/tulip/tulip_core.c
 | 
				
			||||||
@@ -207,6 +207,7 @@ struct tulip_chip_table tulip_tbl[] = {
 | 
					@@ -206,6 +206,7 @@ struct tulip_chip_table tulip_tbl[] = {
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -8,7 +8,7 @@
 | 
				
			|||||||
 static const struct pci_device_id tulip_pci_tbl[] = {
 | 
					 static const struct pci_device_id tulip_pci_tbl[] = {
 | 
				
			||||||
 	{ 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
 | 
					 	{ 0x1011, 0x0009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21140 },
 | 
				
			||||||
 	{ 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
 | 
					 	{ 0x1011, 0x0019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DC21143 },
 | 
				
			||||||
@@ -250,7 +251,7 @@ static const struct pci_device_id tulip_
 | 
					@@ -249,7 +250,7 @@ static const struct pci_device_id tulip_
 | 
				
			||||||
 	{ } /* terminate list */
 | 
					 	{ } /* terminate list */
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
 | 
					 MODULE_DEVICE_TABLE(pci, tulip_pci_tbl);
 | 
				
			||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 /* A full-duplex map for media types. */
 | 
					 /* A full-duplex map for media types. */
 | 
				
			||||||
 const char tulip_media_cap[32] =
 | 
					 const char tulip_media_cap[32] =
 | 
				
			||||||
@@ -268,11 +269,14 @@ static void tulip_down(struct net_device
 | 
					@@ -267,11 +268,14 @@ static void tulip_down(struct net_device
 | 
				
			||||||
 static struct net_device_stats *tulip_get_stats(struct net_device *dev);
 | 
					 static struct net_device_stats *tulip_get_stats(struct net_device *dev);
 | 
				
			||||||
 static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 | 
					 static int private_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 | 
				
			||||||
 static void set_rx_mode(struct net_device *dev);
 | 
					 static void set_rx_mode(struct net_device *dev);
 | 
				
			||||||
@ -32,7 +32,7 @@
 | 
				
			|||||||
 static void tulip_set_power_state (struct tulip_private *tp,
 | 
					 static void tulip_set_power_state (struct tulip_private *tp,
 | 
				
			||||||
 				   int sleep, int snooze)
 | 
					 				   int sleep, int snooze)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -289,7 +293,7 @@ static void tulip_set_power_state (struc
 | 
					@@ -288,7 +292,7 @@ static void tulip_set_power_state (struc
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@ -41,7 +41,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 static void tulip_up(struct net_device *dev)
 | 
					 static void tulip_up(struct net_device *dev)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -303,6 +307,7 @@ static void tulip_up(struct net_device *
 | 
					@@ -302,6 +306,7 @@ static void tulip_up(struct net_device *
 | 
				
			||||||
 	napi_enable(&tp->napi);
 | 
					 	napi_enable(&tp->napi);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -49,7 +49,7 @@
 | 
				
			|||||||
 	/* Wake the chip from sleep/snooze mode. */
 | 
					 	/* Wake the chip from sleep/snooze mode. */
 | 
				
			||||||
 	tulip_set_power_state (tp, 0, 0);
 | 
					 	tulip_set_power_state (tp, 0, 0);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -310,6 +315,7 @@ static void tulip_up(struct net_device *
 | 
					@@ -309,6 +314,7 @@ static void tulip_up(struct net_device *
 | 
				
			||||||
 	pci_enable_wake(tp->pdev, PCI_D3hot, 0);
 | 
					 	pci_enable_wake(tp->pdev, PCI_D3hot, 0);
 | 
				
			||||||
 	pci_enable_wake(tp->pdev, PCI_D3cold, 0);
 | 
					 	pci_enable_wake(tp->pdev, PCI_D3cold, 0);
 | 
				
			||||||
 	tulip_set_wolopts(tp->pdev, 0);
 | 
					 	tulip_set_wolopts(tp->pdev, 0);
 | 
				
			||||||
@ -57,7 +57,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	/* On some chip revs we must set the MII/SYM port before the reset!? */
 | 
					 	/* On some chip revs we must set the MII/SYM port before the reset!? */
 | 
				
			||||||
 	if (tp->mii_cnt  ||  (tp->mtable  &&  tp->mtable->has_mii))
 | 
					 	if (tp->mii_cnt  ||  (tp->mtable  &&  tp->mtable->has_mii))
 | 
				
			||||||
@@ -317,18 +323,22 @@ static void tulip_up(struct net_device *
 | 
					@@ -316,18 +322,22 @@ static void tulip_up(struct net_device *
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
 | 
					 	/* Reset the chip, holding bit 0 set at least 50 PCI cycles. */
 | 
				
			||||||
 	iowrite32(0x00000001, ioaddr + CSR0);
 | 
					 	iowrite32(0x00000001, ioaddr + CSR0);
 | 
				
			||||||
@ -81,7 +81,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	iowrite32(tp->rx_ring_dma, ioaddr + CSR3);
 | 
					 	iowrite32(tp->rx_ring_dma, ioaddr + CSR3);
 | 
				
			||||||
 	iowrite32(tp->tx_ring_dma, ioaddr + CSR4);
 | 
					 	iowrite32(tp->tx_ring_dma, ioaddr + CSR4);
 | 
				
			||||||
@@ -362,9 +372,11 @@ static void tulip_up(struct net_device *
 | 
					@@ -361,9 +371,11 @@ static void tulip_up(struct net_device *
 | 
				
			||||||
 		*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 | 
					 		*setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1];
 | 
				
			||||||
 		*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 | 
					 		*setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2];
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -93,7 +93,7 @@
 | 
				
			|||||||
 		tp->tx_buffers[tp->cur_tx].skb = NULL;
 | 
					 		tp->tx_buffers[tp->cur_tx].skb = NULL;
 | 
				
			||||||
 		tp->tx_buffers[tp->cur_tx].mapping = mapping;
 | 
					 		tp->tx_buffers[tp->cur_tx].mapping = mapping;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -520,7 +532,7 @@ tulip_open(struct net_device *dev)
 | 
					@@ -519,7 +531,7 @@ tulip_open(struct net_device *dev)
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	tulip_init_ring (dev);
 | 
					 	tulip_init_ring (dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -102,7 +102,7 @@
 | 
				
			|||||||
 			     dev->name, dev);
 | 
					 			     dev->name, dev);
 | 
				
			||||||
 	if (retval)
 | 
					 	if (retval)
 | 
				
			||||||
 		goto free_ring;
 | 
					 		goto free_ring;
 | 
				
			||||||
@@ -644,8 +656,10 @@ static void tulip_init_ring(struct net_d
 | 
					@@ -643,8 +655,10 @@ static void tulip_init_ring(struct net_d
 | 
				
			||||||
 		tp->rx_buffers[i].skb = skb;
 | 
					 		tp->rx_buffers[i].skb = skb;
 | 
				
			||||||
 		if (skb == NULL)
 | 
					 		if (skb == NULL)
 | 
				
			||||||
 			break;
 | 
					 			break;
 | 
				
			||||||
@ -113,7 +113,7 @@
 | 
				
			|||||||
 		tp->rx_buffers[i].mapping = mapping;
 | 
					 		tp->rx_buffers[i].mapping = mapping;
 | 
				
			||||||
 		tp->rx_ring[i].status = cpu_to_le32(DescOwned);	/* Owned by Tulip chip */
 | 
					 		tp->rx_ring[i].status = cpu_to_le32(DescOwned);	/* Owned by Tulip chip */
 | 
				
			||||||
 		tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
 | 
					 		tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
 | 
				
			||||||
@@ -678,8 +692,10 @@ tulip_start_xmit(struct sk_buff *skb, st
 | 
					@@ -677,8 +691,10 @@ tulip_start_xmit(struct sk_buff *skb, st
 | 
				
			||||||
 	entry = tp->cur_tx % TX_RING_SIZE;
 | 
					 	entry = tp->cur_tx % TX_RING_SIZE;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	tp->tx_buffers[entry].skb = skb;
 | 
					 	tp->tx_buffers[entry].skb = skb;
 | 
				
			||||||
@ -124,7 +124,7 @@
 | 
				
			|||||||
 	tp->tx_buffers[entry].mapping = mapping;
 | 
					 	tp->tx_buffers[entry].mapping = mapping;
 | 
				
			||||||
 	tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
 | 
					 	tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -730,16 +746,19 @@ static void tulip_clean_tx_ring(struct t
 | 
					@@ -729,16 +745,19 @@ static void tulip_clean_tx_ring(struct t
 | 
				
			||||||
 		if (tp->tx_buffers[entry].skb == NULL) {
 | 
					 		if (tp->tx_buffers[entry].skb == NULL) {
 | 
				
			||||||
 			/* test because dummy frames not mapped */
 | 
					 			/* test because dummy frames not mapped */
 | 
				
			||||||
 			if (tp->tx_buffers[entry].mapping)
 | 
					 			if (tp->tx_buffers[entry].mapping)
 | 
				
			||||||
@ -145,7 +145,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 		/* Free the original skb. */
 | 
					 		/* Free the original skb. */
 | 
				
			||||||
 		dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
 | 
					 		dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
 | 
				
			||||||
@@ -790,7 +809,9 @@ static void tulip_down (struct net_devic
 | 
					@@ -789,7 +808,9 @@ static void tulip_down (struct net_devic
 | 
				
			||||||
 	dev->if_port = tp->saved_if_port;
 | 
					 	dev->if_port = tp->saved_if_port;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* Leave the driver in snooze, not sleep, mode. */
 | 
					 	/* Leave the driver in snooze, not sleep, mode. */
 | 
				
			||||||
@ -155,7 +155,7 @@
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static void tulip_free_ring (struct net_device *dev)
 | 
					 static void tulip_free_ring (struct net_device *dev)
 | 
				
			||||||
@@ -811,8 +832,10 @@ static void tulip_free_ring (struct net_
 | 
					@@ -810,8 +831,10 @@ static void tulip_free_ring (struct net_
 | 
				
			||||||
 		/* An invalid address. */
 | 
					 		/* An invalid address. */
 | 
				
			||||||
 		tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
 | 
					 		tp->rx_ring[i].buffer1 = cpu_to_le32(0xBADF00D0);
 | 
				
			||||||
 		if (skb) {
 | 
					 		if (skb) {
 | 
				
			||||||
@ -166,7 +166,7 @@
 | 
				
			|||||||
 			dev_kfree_skb (skb);
 | 
					 			dev_kfree_skb (skb);
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@@ -821,8 +844,10 @@ static void tulip_free_ring (struct net_
 | 
					@@ -820,8 +843,10 @@ static void tulip_free_ring (struct net_
 | 
				
			||||||
 		struct sk_buff *skb = tp->tx_buffers[i].skb;
 | 
					 		struct sk_buff *skb = tp->tx_buffers[i].skb;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 		if (skb != NULL) {
 | 
					 		if (skb != NULL) {
 | 
				
			||||||
@ -177,7 +177,7 @@
 | 
				
			|||||||
 			dev_kfree_skb (skb);
 | 
					 			dev_kfree_skb (skb);
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 		tp->tx_buffers[i].skb = NULL;
 | 
					 		tp->tx_buffers[i].skb = NULL;
 | 
				
			||||||
@@ -843,7 +868,7 @@ static int tulip_close (struct net_devic
 | 
					@@ -842,7 +867,7 @@ static int tulip_close (struct net_devic
 | 
				
			||||||
 		netdev_dbg(dev, "Shutting down ethercard, status was %02x\n",
 | 
					 		netdev_dbg(dev, "Shutting down ethercard, status was %02x\n",
 | 
				
			||||||
 			   ioread32 (ioaddr + CSR5));
 | 
					 			   ioread32 (ioaddr + CSR5));
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -186,7 +186,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	tulip_free_ring (dev);
 | 
					 	tulip_free_ring (dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -874,7 +899,9 @@ static void tulip_get_drvinfo(struct net
 | 
					@@ -873,7 +898,9 @@ static void tulip_get_drvinfo(struct net
 | 
				
			||||||
 	struct tulip_private *np = netdev_priv(dev);
 | 
					 	struct tulip_private *np = netdev_priv(dev);
 | 
				
			||||||
 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
 | 
					 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
 | 
				
			||||||
 	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
 | 
					 	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
 | 
				
			||||||
@ -196,7 +196,7 @@
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -887,7 +914,9 @@ static int tulip_ethtool_set_wol(struct
 | 
					@@ -886,7 +913,9 @@ static int tulip_ethtool_set_wol(struct
 | 
				
			||||||
 		   return -EOPNOTSUPP;
 | 
					 		   return -EOPNOTSUPP;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	tp->wolinfo.wolopts = wolinfo->wolopts;
 | 
					 	tp->wolinfo.wolopts = wolinfo->wolopts;
 | 
				
			||||||
@ -207,7 +207,7 @@
 | 
				
			|||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1165,9 +1194,11 @@ static void set_rx_mode(struct net_devic
 | 
					@@ -1164,9 +1193,11 @@ static void set_rx_mode(struct net_devic
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 			tp->tx_buffers[entry].skb = NULL;
 | 
					 			tp->tx_buffers[entry].skb = NULL;
 | 
				
			||||||
 			tp->tx_buffers[entry].mapping =
 | 
					 			tp->tx_buffers[entry].mapping =
 | 
				
			||||||
@ -219,7 +219,7 @@
 | 
				
			|||||||
 			/* Put the setup frame on the Tx list. */
 | 
					 			/* Put the setup frame on the Tx list. */
 | 
				
			||||||
 			if (entry == TX_RING_SIZE-1)
 | 
					 			if (entry == TX_RING_SIZE-1)
 | 
				
			||||||
 				tx_flags |= DESC_RING_WRAP;		/* Wrap ring. */
 | 
					 				tx_flags |= DESC_RING_WRAP;		/* Wrap ring. */
 | 
				
			||||||
@@ -1264,19 +1295,22 @@ out:
 | 
					@@ -1263,19 +1294,22 @@ out:
 | 
				
			||||||
 		netdev_dbg(dev, "MWI config cacheline=%d, csr0=%08x\n",
 | 
					 		netdev_dbg(dev, "MWI config cacheline=%d, csr0=%08x\n",
 | 
				
			||||||
 			   cache, csr0);
 | 
					 			   cache, csr0);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@ -243,7 +243,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 static const struct net_device_ops tulip_netdev_ops = {
 | 
					 static const struct net_device_ops tulip_netdev_ops = {
 | 
				
			||||||
 	.ndo_open		= tulip_open,
 | 
					 	.ndo_open		= tulip_open,
 | 
				
			||||||
@@ -1294,6 +1328,7 @@ static const struct net_device_ops tulip
 | 
					@@ -1293,6 +1327,7 @@ static const struct net_device_ops tulip
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -251,7 +251,7 @@
 | 
				
			|||||||
 const struct pci_device_id early_486_chipsets[] = {
 | 
					 const struct pci_device_id early_486_chipsets[] = {
 | 
				
			||||||
 	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
 | 
					 	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82424) },
 | 
				
			||||||
 	{ PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
 | 
					 	{ PCI_DEVICE(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496) },
 | 
				
			||||||
@@ -1471,6 +1506,8 @@ static int tulip_init_one(struct pci_dev
 | 
					@@ -1470,6 +1505,8 @@ static int tulip_init_one(struct pci_dev
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 	tp->pdev = pdev;
 | 
					 	tp->pdev = pdev;
 | 
				
			||||||
@ -260,7 +260,7 @@
 | 
				
			|||||||
 	tp->base_addr = ioaddr;
 | 
					 	tp->base_addr = ioaddr;
 | 
				
			||||||
 	tp->revision = pdev->revision;
 | 
					 	tp->revision = pdev->revision;
 | 
				
			||||||
 	tp->csr0 = csr0;
 | 
					 	tp->csr0 = csr0;
 | 
				
			||||||
@@ -1801,6 +1838,7 @@ err_out_free_netdev:
 | 
					@@ -1800,6 +1837,7 @@ err_out_free_netdev:
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -268,7 +268,7 @@
 | 
				
			|||||||
 /* set the registers according to the given wolopts */
 | 
					 /* set the registers according to the given wolopts */
 | 
				
			||||||
 static void tulip_set_wolopts (struct pci_dev *pdev, u32 wolopts)
 | 
					 static void tulip_set_wolopts (struct pci_dev *pdev, u32 wolopts)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -1829,6 +1867,7 @@ static void tulip_set_wolopts (struct pc
 | 
					@@ -1828,6 +1866,7 @@ static void tulip_set_wolopts (struct pc
 | 
				
			||||||
 		iowrite32(tmp, ioaddr + CSR13);
 | 
					 		iowrite32(tmp, ioaddr + CSR13);
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@ -276,7 +276,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 #ifdef CONFIG_PM
 | 
					 #ifdef CONFIG_PM
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1943,6 +1982,7 @@ static void tulip_remove_one(struct pci_
 | 
					@@ -1942,6 +1981,7 @@ static void tulip_remove_one(struct pci_
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* pci_power_off (pdev, -1); */
 | 
					 	/* pci_power_off (pdev, -1); */
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@ -284,7 +284,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 #ifdef CONFIG_NET_POLL_CONTROLLER
 | 
					 #ifdef CONFIG_NET_POLL_CONTROLLER
 | 
				
			||||||
 /*
 | 
					 /*
 | 
				
			||||||
@@ -1964,7 +2004,8 @@ static void poll_tulip (struct net_devic
 | 
					@@ -1963,7 +2003,8 @@ static void poll_tulip (struct net_devic
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -294,7 +294,7 @@
 | 
				
			|||||||
 	.name		= DRV_NAME,
 | 
					 	.name		= DRV_NAME,
 | 
				
			||||||
 	.id_table	= tulip_pci_tbl,
 | 
					 	.id_table	= tulip_pci_tbl,
 | 
				
			||||||
 	.probe		= tulip_init_one,
 | 
					 	.probe		= tulip_init_one,
 | 
				
			||||||
@@ -1974,10 +2015,12 @@ static struct pci_driver tulip_driver =
 | 
					@@ -1973,10 +2014,12 @@ static struct pci_driver tulip_driver =
 | 
				
			||||||
 	.resume		= tulip_resume,
 | 
					 	.resume		= tulip_resume,
 | 
				
			||||||
 #endif /* CONFIG_PM */
 | 
					 #endif /* CONFIG_PM */
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
@ -307,7 +307,7 @@
 | 
				
			|||||||
 #ifdef MODULE
 | 
					 #ifdef MODULE
 | 
				
			||||||
 	pr_info("%s", version);
 | 
					 	pr_info("%s", version);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@@ -1987,13 +2030,18 @@ static int __init tulip_init (void)
 | 
					@@ -1992,13 +2035,18 @@ static int __init tulip_init (void)
 | 
				
			||||||
 	tulip_max_interrupt_work = max_interrupt_work;
 | 
					 	tulip_max_interrupt_work = max_interrupt_work;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* probe for and init boards */
 | 
					 	/* probe for and init boards */
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@
 | 
				
			|||||||
 #include <linux/delay.h>
 | 
					 #include <linux/delay.h>
 | 
				
			||||||
 #include <linux/mii.h>
 | 
					 #include <linux/mii.h>
 | 
				
			||||||
 #include <linux/crc32.h>
 | 
					 #include <linux/crc32.h>
 | 
				
			||||||
@@ -204,6 +206,9 @@ struct tulip_chip_table tulip_tbl[] = {
 | 
					@@ -203,6 +205,9 @@ struct tulip_chip_table tulip_tbl[] = {
 | 
				
			||||||
   { "Conexant LANfinity", 256, 0x0001ebef,
 | 
					   { "Conexant LANfinity", 256, 0x0001ebef,
 | 
				
			||||||
 	HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
 | 
					 	HAS_MII | HAS_ACPI, tulip_timer, tulip_media_task },
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -36,7 +36,7 @@
 | 
				
			|||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -377,6 +382,11 @@ static void tulip_up(struct net_device *
 | 
					@@ -376,6 +381,11 @@ static void tulip_up(struct net_device *
 | 
				
			||||||
 					 sizeof(tp->setup_frame),
 | 
					 					 sizeof(tp->setup_frame),
 | 
				
			||||||
 					 PCI_DMA_TODEVICE);
 | 
					 					 PCI_DMA_TODEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -48,7 +48,7 @@
 | 
				
			|||||||
 		tp->tx_buffers[tp->cur_tx].skb = NULL;
 | 
					 		tp->tx_buffers[tp->cur_tx].skb = NULL;
 | 
				
			||||||
 		tp->tx_buffers[tp->cur_tx].mapping = mapping;
 | 
					 		tp->tx_buffers[tp->cur_tx].mapping = mapping;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -396,6 +406,7 @@ static void tulip_up(struct net_device *
 | 
					@@ -395,6 +405,7 @@ static void tulip_up(struct net_device *
 | 
				
			||||||
 	i = 0;
 | 
					 	i = 0;
 | 
				
			||||||
 	if (tp->mtable == NULL)
 | 
					 	if (tp->mtable == NULL)
 | 
				
			||||||
 		goto media_picked;
 | 
					 		goto media_picked;
 | 
				
			||||||
@ -56,7 +56,7 @@
 | 
				
			|||||||
 	if (dev->if_port) {
 | 
					 	if (dev->if_port) {
 | 
				
			||||||
 		int looking_for = tulip_media_cap[dev->if_port] & MediaIsMII ? 11 :
 | 
					 		int looking_for = tulip_media_cap[dev->if_port] & MediaIsMII ? 11 :
 | 
				
			||||||
 			(dev->if_port == 12 ? 0 : dev->if_port);
 | 
					 			(dev->if_port == 12 ? 0 : dev->if_port);
 | 
				
			||||||
@@ -489,6 +500,10 @@ media_picked:
 | 
					@@ -488,6 +499,10 @@ media_picked:
 | 
				
			||||||
 		iowrite32(ioread32(ioaddr + 0x88) | 1, ioaddr + 0x88);
 | 
					 		iowrite32(ioread32(ioaddr + 0x88) | 1, ioaddr + 0x88);
 | 
				
			||||||
 		dev->if_port = tp->mii_cnt ? 11 : 0;
 | 
					 		dev->if_port = tp->mii_cnt ? 11 : 0;
 | 
				
			||||||
 		tp->csr6 = 0x00040000;
 | 
					 		tp->csr6 = 0x00040000;
 | 
				
			||||||
@ -67,7 +67,7 @@
 | 
				
			|||||||
 	} else if (tp->chip_id == AX88140) {
 | 
					 	} else if (tp->chip_id == AX88140) {
 | 
				
			||||||
 		tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100;
 | 
					 		tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100;
 | 
				
			||||||
 	} else
 | 
					 	} else
 | 
				
			||||||
@@ -660,6 +675,10 @@ static void tulip_init_ring(struct net_d
 | 
					@@ -659,6 +674,10 @@ static void tulip_init_ring(struct net_d
 | 
				
			||||||
 		mapping = pci_map_single(tp->pdev, skb->data,
 | 
					 		mapping = pci_map_single(tp->pdev, skb->data,
 | 
				
			||||||
 					 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 | 
					 					 PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -78,7 +78,7 @@
 | 
				
			|||||||
 		tp->rx_buffers[i].mapping = mapping;
 | 
					 		tp->rx_buffers[i].mapping = mapping;
 | 
				
			||||||
 		tp->rx_ring[i].status = cpu_to_le32(DescOwned);	/* Owned by Tulip chip */
 | 
					 		tp->rx_ring[i].status = cpu_to_le32(DescOwned);	/* Owned by Tulip chip */
 | 
				
			||||||
 		tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
 | 
					 		tp->rx_ring[i].buffer1 = cpu_to_le32(mapping);
 | 
				
			||||||
@@ -696,6 +715,11 @@ tulip_start_xmit(struct sk_buff *skb, st
 | 
					@@ -695,6 +714,11 @@ tulip_start_xmit(struct sk_buff *skb, st
 | 
				
			||||||
 	mapping = pci_map_single(tp->pdev, skb->data,
 | 
					 	mapping = pci_map_single(tp->pdev, skb->data,
 | 
				
			||||||
 				 skb->len, PCI_DMA_TODEVICE);
 | 
					 				 skb->len, PCI_DMA_TODEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -90,7 +90,7 @@
 | 
				
			|||||||
 	tp->tx_buffers[entry].mapping = mapping;
 | 
					 	tp->tx_buffers[entry].mapping = mapping;
 | 
				
			||||||
 	tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
 | 
					 	tp->tx_ring[entry].buffer1 = cpu_to_le32(mapping);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -752,6 +776,13 @@ static void tulip_clean_tx_ring(struct t
 | 
					@@ -751,6 +775,13 @@ static void tulip_clean_tx_ring(struct t
 | 
				
			||||||
 					sizeof(tp->setup_frame),
 | 
					 					sizeof(tp->setup_frame),
 | 
				
			||||||
 					PCI_DMA_TODEVICE);
 | 
					 					PCI_DMA_TODEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -104,7 +104,7 @@
 | 
				
			|||||||
 			continue;
 | 
					 			continue;
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 #ifdef CONFIG_TULIP_PCI
 | 
					 #ifdef CONFIG_TULIP_PCI
 | 
				
			||||||
@@ -759,6 +790,11 @@ static void tulip_clean_tx_ring(struct t
 | 
					@@ -758,6 +789,11 @@ static void tulip_clean_tx_ring(struct t
 | 
				
			||||||
 				tp->tx_buffers[entry].skb->len,
 | 
					 				tp->tx_buffers[entry].skb->len,
 | 
				
			||||||
 				PCI_DMA_TODEVICE);
 | 
					 				PCI_DMA_TODEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -116,7 +116,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 		/* Free the original skb. */
 | 
					 		/* Free the original skb. */
 | 
				
			||||||
 		dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
 | 
					 		dev_kfree_skb_irq(tp->tx_buffers[entry].skb);
 | 
				
			||||||
@@ -836,6 +872,10 @@ static void tulip_free_ring (struct net_
 | 
					@@ -835,6 +871,10 @@ static void tulip_free_ring (struct net_
 | 
				
			||||||
 			pci_unmap_single(tp->pdev, mapping, PKT_BUF_SZ,
 | 
					 			pci_unmap_single(tp->pdev, mapping, PKT_BUF_SZ,
 | 
				
			||||||
 					 PCI_DMA_FROMDEVICE);
 | 
					 					 PCI_DMA_FROMDEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -127,7 +127,7 @@
 | 
				
			|||||||
 			dev_kfree_skb (skb);
 | 
					 			dev_kfree_skb (skb);
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@@ -848,6 +888,10 @@ static void tulip_free_ring (struct net_
 | 
					@@ -847,6 +887,10 @@ static void tulip_free_ring (struct net_
 | 
				
			||||||
 			pci_unmap_single(tp->pdev, tp->tx_buffers[i].mapping,
 | 
					 			pci_unmap_single(tp->pdev, tp->tx_buffers[i].mapping,
 | 
				
			||||||
 					 skb->len, PCI_DMA_TODEVICE);
 | 
					 					 skb->len, PCI_DMA_TODEVICE);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -138,7 +138,7 @@
 | 
				
			|||||||
 			dev_kfree_skb (skb);
 | 
					 			dev_kfree_skb (skb);
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 		tp->tx_buffers[i].skb = NULL;
 | 
					 		tp->tx_buffers[i].skb = NULL;
 | 
				
			||||||
@@ -902,6 +946,9 @@ static void tulip_get_drvinfo(struct net
 | 
					@@ -901,6 +945,9 @@ static void tulip_get_drvinfo(struct net
 | 
				
			||||||
 #ifdef CONFIG_TULIP_PCI
 | 
					 #ifdef CONFIG_TULIP_PCI
 | 
				
			||||||
 	strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
 | 
					 	strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info));
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -148,7 +148,7 @@
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -917,6 +964,9 @@ static int tulip_ethtool_set_wol(struct
 | 
					@@ -916,6 +963,9 @@ static int tulip_ethtool_set_wol(struct
 | 
				
			||||||
 #ifdef CONFIG_TULIP_PCI
 | 
					 #ifdef CONFIG_TULIP_PCI
 | 
				
			||||||
 	device_set_wakeup_enable(tp->kdev, tp->wolinfo.wolopts);
 | 
					 	device_set_wakeup_enable(tp->kdev, tp->wolinfo.wolopts);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -158,7 +158,7 @@
 | 
				
			|||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1192,13 +1242,20 @@ static void set_rx_mode(struct net_devic
 | 
					@@ -1191,13 +1241,20 @@ static void set_rx_mode(struct net_devic
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 			}
 | 
					 			}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -180,7 +180,7 @@
 | 
				
			|||||||
 			/* Put the setup frame on the Tx list. */
 | 
					 			/* Put the setup frame on the Tx list. */
 | 
				
			||||||
 			if (entry == TX_RING_SIZE-1)
 | 
					 			if (entry == TX_RING_SIZE-1)
 | 
				
			||||||
 				tx_flags |= DESC_RING_WRAP;		/* Wrap ring. */
 | 
					 				tx_flags |= DESC_RING_WRAP;		/* Wrap ring. */
 | 
				
			||||||
@@ -1218,6 +1275,9 @@ static void set_rx_mode(struct net_devic
 | 
					@@ -1217,6 +1274,9 @@ static void set_rx_mode(struct net_devic
 | 
				
			||||||
 		spin_unlock_irqrestore(&tp->lock, flags);
 | 
					 		spin_unlock_irqrestore(&tp->lock, flags);
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -190,7 +190,7 @@
 | 
				
			|||||||
 	iowrite32(csr6, ioaddr + CSR6);
 | 
					 	iowrite32(csr6, ioaddr + CSR6);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1984,6 +2044,126 @@ static void tulip_remove_one(struct pci_
 | 
					@@ -1983,6 +2043,126 @@ static void tulip_remove_one(struct pci_
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 #endif /* CONFIG_TULIP_PCI */
 | 
					 #endif /* CONFIG_TULIP_PCI */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -317,7 +317,7 @@
 | 
				
			|||||||
 #ifdef CONFIG_NET_POLL_CONTROLLER
 | 
					 #ifdef CONFIG_NET_POLL_CONTROLLER
 | 
				
			||||||
 /*
 | 
					 /*
 | 
				
			||||||
  * Polling 'interrupt' - used by things like netconsole to send skbs
 | 
					  * Polling 'interrupt' - used by things like netconsole to send skbs
 | 
				
			||||||
@@ -2017,6 +2197,17 @@ static struct pci_driver tulip_pci_drive
 | 
					@@ -2016,6 +2196,17 @@ static struct pci_driver tulip_pci_drive
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -335,7 +335,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 static int __init tulip_init (void)
 | 
					 static int __init tulip_init (void)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -2033,6 +2224,9 @@ static int __init tulip_init (void)
 | 
					@@ -2038,6 +2229,9 @@ static int __init tulip_init (void)
 | 
				
			||||||
 #ifdef CONFIG_TULIP_PCI
 | 
					 #ifdef CONFIG_TULIP_PCI
 | 
				
			||||||
 	ret = pci_register_driver(&tulip_pci_driver);
 | 
					 	ret = pci_register_driver(&tulip_pci_driver);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -345,7 +345,7 @@
 | 
				
			|||||||
 	return ret;
 | 
					 	return ret;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -2042,6 +2236,9 @@ static void __exit tulip_cleanup (void)
 | 
					@@ -2047,6 +2241,9 @@ static void __exit tulip_cleanup (void)
 | 
				
			||||||
 #ifdef CONFIG_TULIP_PCI
 | 
					 #ifdef CONFIG_TULIP_PCI
 | 
				
			||||||
 	pci_unregister_driver (&tulip_pci_driver);
 | 
					 	pci_unregister_driver (&tulip_pci_driver);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 | 
				
			|||||||
@ -129,7 +129,7 @@
 | 
				
			|||||||
 	return __mtdsplit_parse_uimage(master, pparts, data,
 | 
					 	return __mtdsplit_parse_uimage(master, pparts, data,
 | 
				
			||||||
--- a/drivers/mtd/mtdsplit/mtdsplit_wrgg.c
 | 
					--- a/drivers/mtd/mtdsplit/mtdsplit_wrgg.c
 | 
				
			||||||
+++ b/drivers/mtd/mtdsplit/mtdsplit_wrgg.c
 | 
					+++ b/drivers/mtd/mtdsplit/mtdsplit_wrgg.c
 | 
				
			||||||
@@ -40,8 +40,8 @@ struct wrgg03_header {
 | 
					@@ -51,8 +51,8 @@ struct wrg_header {
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static int mtdsplit_parse_wrgg(struct mtd_info *master,
 | 
					 static int mtdsplit_parse_wrgg(struct mtd_info *master,
 | 
				
			||||||
 | 
				
			|||||||
@ -95,7 +95,7 @@
 | 
				
			|||||||
 	ret |= BMCR_ANENABLE | BMCR_ANRESTART;
 | 
					 	ret |= BMCR_ANENABLE | BMCR_ANRESTART;
 | 
				
			||||||
 	return phy_write(phydev, MII_BMCR, ret);
 | 
					 	return phy_write(phydev, MII_BMCR, ret);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@@ -2007,7 +2007,7 @@ ar8xxx_phy_config_init(struct phy_device
 | 
					@@ -2012,7 +2012,7 @@ ar8xxx_phy_config_init(struct phy_device
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	priv->phy = phydev;
 | 
					 	priv->phy = phydev;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -104,7 +104,7 @@
 | 
				
			|||||||
 		if (chip_is_ar8316(priv)) {
 | 
					 		if (chip_is_ar8316(priv)) {
 | 
				
			||||||
 			/* switch device has been initialized, reinit */
 | 
					 			/* switch device has been initialized, reinit */
 | 
				
			||||||
 			priv->dev.ports = (AR8216_NUM_PORTS - 1);
 | 
					 			priv->dev.ports = (AR8216_NUM_PORTS - 1);
 | 
				
			||||||
@@ -2055,7 +2055,7 @@ ar8xxx_check_link_states(struct ar8xxx_p
 | 
					@@ -2060,7 +2060,7 @@ ar8xxx_check_link_states(struct ar8xxx_p
 | 
				
			||||||
 		/* flush ARL entries for this port if it went down*/
 | 
					 		/* flush ARL entries for this port if it went down*/
 | 
				
			||||||
 		if (!link_new)
 | 
					 		if (!link_new)
 | 
				
			||||||
 			priv->chip->atu_flush_port(priv, i);
 | 
					 			priv->chip->atu_flush_port(priv, i);
 | 
				
			||||||
@ -113,7 +113,7 @@
 | 
				
			|||||||
 			 i, link_new ? "up" : "down");
 | 
					 			 i, link_new ? "up" : "down");
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -2074,10 +2074,10 @@ ar8xxx_phy_read_status(struct phy_device
 | 
					@@ -2079,10 +2079,10 @@ ar8xxx_phy_read_status(struct phy_device
 | 
				
			||||||
 	if (phydev->state == PHY_CHANGELINK)
 | 
					 	if (phydev->state == PHY_CHANGELINK)
 | 
				
			||||||
 		ar8xxx_check_link_states(priv);
 | 
					 		ar8xxx_check_link_states(priv);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -126,7 +126,7 @@
 | 
				
			|||||||
 	phydev->link = !!link.link;
 | 
					 	phydev->link = !!link.link;
 | 
				
			||||||
 	if (!phydev->link)
 | 
					 	if (!phydev->link)
 | 
				
			||||||
 		return 0;
 | 
					 		return 0;
 | 
				
			||||||
@@ -2107,7 +2107,7 @@ ar8xxx_phy_read_status(struct phy_device
 | 
					@@ -2112,7 +2112,7 @@ ar8xxx_phy_read_status(struct phy_device
 | 
				
			||||||
 static int
 | 
					 static int
 | 
				
			||||||
 ar8xxx_phy_config_aneg(struct phy_device *phydev)
 | 
					 ar8xxx_phy_config_aneg(struct phy_device *phydev)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -135,7 +135,7 @@
 | 
				
			|||||||
 		return 0;
 | 
					 		return 0;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	return genphy_config_aneg(phydev);
 | 
					 	return genphy_config_aneg(phydev);
 | 
				
			||||||
@@ -2162,15 +2162,15 @@ ar8xxx_phy_probe(struct phy_device *phyd
 | 
					@@ -2167,15 +2167,15 @@ ar8xxx_phy_probe(struct phy_device *phyd
 | 
				
			||||||
 	int ret;
 | 
					 	int ret;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* skip PHYs at unused adresses */
 | 
					 	/* skip PHYs at unused adresses */
 | 
				
			||||||
@ -154,7 +154,7 @@
 | 
				
			|||||||
 			goto found;
 | 
					 			goto found;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	priv = ar8xxx_create();
 | 
					 	priv = ar8xxx_create();
 | 
				
			||||||
@@ -2179,7 +2179,7 @@ ar8xxx_phy_probe(struct phy_device *phyd
 | 
					@@ -2184,7 +2184,7 @@ ar8xxx_phy_probe(struct phy_device *phyd
 | 
				
			||||||
 		goto unlock;
 | 
					 		goto unlock;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -163,7 +163,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	ret = ar8xxx_probe_switch(priv);
 | 
					 	ret = ar8xxx_probe_switch(priv);
 | 
				
			||||||
 	if (ret)
 | 
					 	if (ret)
 | 
				
			||||||
@@ -2200,7 +2200,7 @@ ar8xxx_phy_probe(struct phy_device *phyd
 | 
					@@ -2205,7 +2205,7 @@ ar8xxx_phy_probe(struct phy_device *phyd
 | 
				
			||||||
 found:
 | 
					 found:
 | 
				
			||||||
 	priv->use_count++;
 | 
					 	priv->use_count++;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -172,7 +172,7 @@
 | 
				
			|||||||
 		if (ar8xxx_has_gige(priv)) {
 | 
					 		if (ar8xxx_has_gige(priv)) {
 | 
				
			||||||
 			phydev->supported = SUPPORTED_1000baseT_Full;
 | 
					 			phydev->supported = SUPPORTED_1000baseT_Full;
 | 
				
			||||||
 			phydev->advertising = ADVERTISED_1000baseT_Full;
 | 
					 			phydev->advertising = ADVERTISED_1000baseT_Full;
 | 
				
			||||||
@@ -2288,21 +2288,33 @@ ar8xxx_phy_soft_reset(struct phy_device
 | 
					@@ -2293,21 +2293,33 @@ ar8xxx_phy_soft_reset(struct phy_device
 | 
				
			||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/net/core/net_namespace.c
 | 
					--- a/net/core/net_namespace.c
 | 
				
			||||||
+++ b/net/core/net_namespace.c
 | 
					+++ b/net/core/net_namespace.c
 | 
				
			||||||
@@ -361,6 +361,7 @@ struct net *get_net_ns_by_fd(int fd)
 | 
					@@ -380,6 +380,7 @@ struct net *get_net_ns_by_fd(int fd)
 | 
				
			||||||
 	return ERR_PTR(-EINVAL);
 | 
					 	return ERR_PTR(-EINVAL);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 | 
				
			|||||||
@ -67,8 +67,8 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			|||||||
+	INIT_WORK(&po->proto.pppoe.padt_work, pppoe_unbind_sock_work);
 | 
					+	INIT_WORK(&po->proto.pppoe.padt_work, pppoe_unbind_sock_work);
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
 	error = -EINVAL;
 | 
					 	error = -EINVAL;
 | 
				
			||||||
 	if (sp->sa_protocol != PX_PROTO_OE)
 | 
					 
 | 
				
			||||||
 		goto end;
 | 
					 	if (sockaddr_len != sizeof(struct sockaddr_pppox))
 | 
				
			||||||
--- a/include/linux/if_pppox.h
 | 
					--- a/include/linux/if_pppox.h
 | 
				
			||||||
+++ b/include/linux/if_pppox.h
 | 
					+++ b/include/linux/if_pppox.h
 | 
				
			||||||
@@ -19,6 +19,7 @@
 | 
					@@ -19,6 +19,7 @@
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			|||||||
 				pppox_unbind_sock(sk);
 | 
					 				pppox_unbind_sock(sk);
 | 
				
			||||||
 				sk->sk_state_change(sk);
 | 
					 				sk->sk_state_change(sk);
 | 
				
			||||||
 				po->pppoe_dev = NULL;
 | 
					 				po->pppoe_dev = NULL;
 | 
				
			||||||
@@ -775,7 +775,7 @@ static int pppoe_ioctl(struct socket *so
 | 
					@@ -779,7 +779,7 @@ static int pppoe_ioctl(struct socket *so
 | 
				
			||||||
 		struct pppox_sock *relay_po;
 | 
					 		struct pppox_sock *relay_po;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 		err = -EBUSY;
 | 
					 		err = -EBUSY;
 | 
				
			||||||
 | 
				
			|||||||
@ -62,9 +62,9 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			|||||||
-	INIT_WORK(&po->proto.pppoe.padt_work, pppoe_unbind_sock_work);
 | 
					-	INIT_WORK(&po->proto.pppoe.padt_work, pppoe_unbind_sock_work);
 | 
				
			||||||
-
 | 
					-
 | 
				
			||||||
 	error = -EINVAL;
 | 
					 	error = -EINVAL;
 | 
				
			||||||
 	if (sp->sa_protocol != PX_PROTO_OE)
 | 
					 
 | 
				
			||||||
 		goto end;
 | 
					 	if (sockaddr_len != sizeof(struct sockaddr_pppox))
 | 
				
			||||||
@@ -645,8 +646,13 @@ static int pppoe_connect(struct socket *
 | 
					@@ -649,8 +650,13 @@ static int pppoe_connect(struct socket *
 | 
				
			||||||
 			po->pppoe_dev = NULL;
 | 
					 			po->pppoe_dev = NULL;
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -44,7 +44,7 @@ Closes 20532
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/net/ipv6/ip6_output.c
 | 
					--- a/net/ipv6/ip6_output.c
 | 
				
			||||||
+++ b/net/ipv6/ip6_output.c
 | 
					+++ b/net/ipv6/ip6_output.c
 | 
				
			||||||
@@ -600,20 +600,22 @@ int ip6_fragment(struct sk_buff *skb, in
 | 
					@@ -602,20 +602,22 @@ int ip6_fragment(struct sk_buff *skb, in
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 	mtu -= hlen + sizeof(struct frag_hdr);
 | 
					 	mtu -= hlen + sizeof(struct frag_hdr);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -69,7 +69,7 @@ Closes 20532
 | 
				
			|||||||
 				goto slow_path_clean;
 | 
					 				goto slow_path_clean;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 			/* Partially cloned skb? */
 | 
					 			/* Partially cloned skb? */
 | 
				
			||||||
@@ -630,8 +632,6 @@ int ip6_fragment(struct sk_buff *skb, in
 | 
					@@ -632,8 +634,6 @@ int ip6_fragment(struct sk_buff *skb, in
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 		err = 0;
 | 
					 		err = 0;
 | 
				
			||||||
 		offset = 0;
 | 
					 		offset = 0;
 | 
				
			||||||
@ -78,7 +78,7 @@ Closes 20532
 | 
				
			|||||||
 		/* BUILD HEADER */
 | 
					 		/* BUILD HEADER */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 		*prevhdr = NEXTHDR_FRAGMENT;
 | 
					 		*prevhdr = NEXTHDR_FRAGMENT;
 | 
				
			||||||
@@ -639,8 +639,11 @@ int ip6_fragment(struct sk_buff *skb, in
 | 
					@@ -641,8 +641,11 @@ int ip6_fragment(struct sk_buff *skb, in
 | 
				
			||||||
 		if (!tmp_hdr) {
 | 
					 		if (!tmp_hdr) {
 | 
				
			||||||
 			IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
 | 
					 			IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
 | 
				
			||||||
 				      IPSTATS_MIB_FRAGFAILS);
 | 
					 				      IPSTATS_MIB_FRAGFAILS);
 | 
				
			||||||
@ -91,7 +91,7 @@ Closes 20532
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 		__skb_pull(skb, hlen);
 | 
					 		__skb_pull(skb, hlen);
 | 
				
			||||||
 		fh = (struct frag_hdr *)__skb_push(skb, sizeof(struct frag_hdr));
 | 
					 		fh = (struct frag_hdr *)__skb_push(skb, sizeof(struct frag_hdr));
 | 
				
			||||||
@@ -738,7 +741,6 @@ slow_path:
 | 
					@@ -740,7 +743,6 @@ slow_path:
 | 
				
			||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	*prevhdr = NEXTHDR_FRAGMENT;
 | 
					 	*prevhdr = NEXTHDR_FRAGMENT;
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	.get_acl =	jffs2_get_acl,
 | 
					 	.get_acl =	jffs2_get_acl,
 | 
				
			||||||
 	.set_acl =	jffs2_set_acl,
 | 
					 	.set_acl =	jffs2_set_acl,
 | 
				
			||||||
 	.setattr =	jffs2_setattr,
 | 
					 	.setattr =	jffs2_setattr,
 | 
				
			||||||
@@ -756,8 +756,27 @@ static int jffs2_mknod (struct inode *di
 | 
					@@ -752,8 +752,27 @@ static int jffs2_mknod (struct inode *di
 | 
				
			||||||
 	return ret;
 | 
					 	return ret;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 {
 | 
					 {
 | 
				
			||||||
 	int ret;
 | 
					 	int ret;
 | 
				
			||||||
 	struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb);
 | 
					 	struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb);
 | 
				
			||||||
@@ -765,6 +784,9 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -761,6 +780,9 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 	uint8_t type;
 | 
					 	uint8_t type;
 | 
				
			||||||
 	uint32_t now;
 | 
					 	uint32_t now;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -66,7 +66,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	/* The VFS will check for us and prevent trying to rename a
 | 
					 	/* The VFS will check for us and prevent trying to rename a
 | 
				
			||||||
 	 * file over a directory and vice versa, but if it's a directory,
 | 
					 	 * file over a directory and vice versa, but if it's a directory,
 | 
				
			||||||
 	 * the VFS can't check whether the victim is empty. The filesystem
 | 
					 	 * the VFS can't check whether the victim is empty. The filesystem
 | 
				
			||||||
@@ -828,9 +850,14 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -824,9 +846,14 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 	if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f)
 | 
					 	if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f)
 | 
				
			||||||
 		inc_nlink(new_dir_i);
 | 
					 		inc_nlink(new_dir_i);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/fs/jffs2/dir.c
 | 
					--- a/fs/jffs2/dir.c
 | 
				
			||||||
+++ b/fs/jffs2/dir.c
 | 
					+++ b/fs/jffs2/dir.c
 | 
				
			||||||
@@ -784,7 +784,7 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -780,7 +780,7 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 	uint8_t type;
 | 
					 	uint8_t type;
 | 
				
			||||||
 	uint32_t now;
 | 
					 	uint32_t now;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -16,7 +16,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 		return -EINVAL;
 | 
					 		return -EINVAL;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* The VFS will check for us and prevent trying to rename a
 | 
					 	/* The VFS will check for us and prevent trying to rename a
 | 
				
			||||||
@@ -792,7 +792,7 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -788,7 +788,7 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 	 * the VFS can't check whether the victim is empty. The filesystem
 | 
					 	 * the VFS can't check whether the victim is empty. The filesystem
 | 
				
			||||||
 	 * needs to do that for itself.
 | 
					 	 * needs to do that for itself.
 | 
				
			||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
@ -25,7 +25,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 		victim_f = JFFS2_INODE_INFO(new_dentry->d_inode);
 | 
					 		victim_f = JFFS2_INODE_INFO(new_dentry->d_inode);
 | 
				
			||||||
 		if (S_ISDIR(new_dentry->d_inode->i_mode)) {
 | 
					 		if (S_ISDIR(new_dentry->d_inode->i_mode)) {
 | 
				
			||||||
 			struct jffs2_full_dirent *fd;
 | 
					 			struct jffs2_full_dirent *fd;
 | 
				
			||||||
@@ -827,7 +827,7 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -823,7 +823,7 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 	if (ret)
 | 
					 	if (ret)
 | 
				
			||||||
 		return ret;
 | 
					 		return ret;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 		/* There was a victim. Kill it off nicely */
 | 
					 		/* There was a victim. Kill it off nicely */
 | 
				
			||||||
 		if (S_ISDIR(new_dentry->d_inode->i_mode))
 | 
					 		if (S_ISDIR(new_dentry->d_inode->i_mode))
 | 
				
			||||||
 			clear_nlink(new_dentry->d_inode);
 | 
					 			clear_nlink(new_dentry->d_inode);
 | 
				
			||||||
@@ -853,6 +853,12 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -849,6 +849,12 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 	if (flags & RENAME_WHITEOUT)
 | 
					 	if (flags & RENAME_WHITEOUT)
 | 
				
			||||||
 		/* Replace with whiteout */
 | 
					 		/* Replace with whiteout */
 | 
				
			||||||
 		ret = jffs2_whiteout(old_dir_i, old_dentry);
 | 
					 		ret = jffs2_whiteout(old_dir_i, old_dentry);
 | 
				
			||||||
@ -47,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	else
 | 
					 	else
 | 
				
			||||||
 		/* Unlink the original */
 | 
					 		/* Unlink the original */
 | 
				
			||||||
 		ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
 | 
					 		ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
 | 
				
			||||||
@@ -879,7 +885,7 @@ static int jffs2_rename (struct inode *o
 | 
					@@ -875,7 +881,7 @@ static int jffs2_rename (struct inode *o
 | 
				
			||||||
 		return ret;
 | 
					 		return ret;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -61,7 +61,7 @@ Signed-off-by: Petr Štetiar <ynezz@true.cz>
 | 
				
			|||||||
 /* standard device layouts supported by this driver */
 | 
					 /* standard device layouts supported by this driver */
 | 
				
			||||||
 enum qcserial_layouts {
 | 
					 enum qcserial_layouts {
 | 
				
			||||||
 	QCSERIAL_G2K = 0,	/* Gobi 2000 */
 | 
					 	QCSERIAL_G2K = 0,	/* Gobi 2000 */
 | 
				
			||||||
@@ -176,6 +178,38 @@ static const struct usb_device_id id_tab
 | 
					@@ -181,6 +183,38 @@ static const struct usb_device_id id_tab
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 MODULE_DEVICE_TABLE(usb, id_table);
 | 
					 MODULE_DEVICE_TABLE(usb, id_table);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -100,7 +100,7 @@ Signed-off-by: Petr Štetiar <ynezz@true.cz>
 | 
				
			|||||||
 static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
 | 
					 static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct usb_host_interface *intf = serial->interface->cur_altsetting;
 | 
					 	struct usb_host_interface *intf = serial->interface->cur_altsetting;
 | 
				
			||||||
@@ -244,6 +278,11 @@ static int qcprobe(struct usb_serial *se
 | 
					@@ -249,6 +283,11 @@ static int qcprobe(struct usb_serial *se
 | 
				
			||||||
 			altsetting = -1;
 | 
					 			altsetting = -1;
 | 
				
			||||||
 		break;
 | 
					 		break;
 | 
				
			||||||
 	case QCSERIAL_G2K:
 | 
					 	case QCSERIAL_G2K:
 | 
				
			||||||
 | 
				
			|||||||
@ -48,7 +48,7 @@ Signed-off-by: Petr Štetiar <ynezz@true.cz>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/net/usb/qmi_wwan.c
 | 
					--- a/drivers/net/usb/qmi_wwan.c
 | 
				
			||||||
+++ b/drivers/net/usb/qmi_wwan.c
 | 
					+++ b/drivers/net/usb/qmi_wwan.c
 | 
				
			||||||
@@ -825,6 +825,7 @@ static const struct usb_device_id produc
 | 
					@@ -836,6 +836,7 @@ static const struct usb_device_id produc
 | 
				
			||||||
 	{QMI_GOBI_DEVICE(0x05c6, 0x9245)},	/* Samsung Gobi 2000 Modem device (VL176) */
 | 
					 	{QMI_GOBI_DEVICE(0x05c6, 0x9245)},	/* Samsung Gobi 2000 Modem device (VL176) */
 | 
				
			||||||
 	{QMI_GOBI_DEVICE(0x03f0, 0x251d)},	/* HP Gobi 2000 Modem device (VP412) */
 | 
					 	{QMI_GOBI_DEVICE(0x03f0, 0x251d)},	/* HP Gobi 2000 Modem device (VP412) */
 | 
				
			||||||
 	{QMI_GOBI_DEVICE(0x05c6, 0x9215)},	/* Acer Gobi 2000 Modem device (VP413) */
 | 
					 	{QMI_GOBI_DEVICE(0x05c6, 0x9215)},	/* Acer Gobi 2000 Modem device (VP413) */
 | 
				
			||||||
@ -56,7 +56,7 @@ Signed-off-by: Petr Štetiar <ynezz@true.cz>
 | 
				
			|||||||
 	{QMI_GOBI_DEVICE(0x05c6, 0x9265)},	/* Asus Gobi 2000 Modem device (VR305) */
 | 
					 	{QMI_GOBI_DEVICE(0x05c6, 0x9265)},	/* Asus Gobi 2000 Modem device (VR305) */
 | 
				
			||||||
 	{QMI_GOBI_DEVICE(0x05c6, 0x9235)},	/* Top Global Gobi 2000 Modem device (VR306) */
 | 
					 	{QMI_GOBI_DEVICE(0x05c6, 0x9235)},	/* Top Global Gobi 2000 Modem device (VR306) */
 | 
				
			||||||
 	{QMI_GOBI_DEVICE(0x05c6, 0x9275)},	/* iRex Technologies Gobi 2000 Modem device (VR307) */
 | 
					 	{QMI_GOBI_DEVICE(0x05c6, 0x9275)},	/* iRex Technologies Gobi 2000 Modem device (VR307) */
 | 
				
			||||||
@@ -856,10 +857,24 @@ static const struct usb_device_id produc
 | 
					@@ -867,6 +868,19 @@ static const struct usb_device_id produc
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 MODULE_DEVICE_TABLE(usb, products);
 | 
					 MODULE_DEVICE_TABLE(usb, products);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -65,9 +65,9 @@ Signed-off-by: Petr Štetiar <ynezz@true.cz>
 | 
				
			|||||||
+	struct usb_device *dev = interface_to_usbdev(intf);
 | 
					+	struct usb_device *dev = interface_to_usbdev(intf);
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
+	if (dev->actconfig &&
 | 
					+	if (dev->actconfig &&
 | 
				
			||||||
+	    le16_to_cpu(dev->descriptor.idVendor) == 0x05c6 &&
 | 
					+	   le16_to_cpu(dev->descriptor.idVendor) == 0x05c6 &&
 | 
				
			||||||
+	    le16_to_cpu(dev->descriptor.idProduct) == 0x9215 &&
 | 
					+	   le16_to_cpu(dev->descriptor.idProduct) == 0x9215 &&
 | 
				
			||||||
+	    dev->actconfig->desc.bNumInterfaces == 5)
 | 
					+	   dev->actconfig->desc.bNumInterfaces == 5)
 | 
				
			||||||
+		return true;
 | 
					+		return true;
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
+	return false;
 | 
					+	return false;
 | 
				
			||||||
@ -76,13 +76,8 @@ Signed-off-by: Petr Štetiar <ynezz@true.cz>
 | 
				
			|||||||
 static int qmi_wwan_probe(struct usb_interface *intf,
 | 
					 static int qmi_wwan_probe(struct usb_interface *intf,
 | 
				
			||||||
 			  const struct usb_device_id *prod)
 | 
					 			  const struct usb_device_id *prod)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct usb_device_id *id = (struct usb_device_id *)prod;
 | 
					@@ -895,6 +909,12 @@ static int qmi_wwan_probe(struct usb_int
 | 
				
			||||||
+	struct usb_interface_descriptor *desc = &intf->cur_altsetting->desc;
 | 
					 		return -ENODEV;
 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	/* Workaround to enable dynamic IDs.  This disables usbnet
 | 
					 | 
				
			||||||
 	 * blacklisting functionality.  Which, if required, can be
 | 
					 | 
				
			||||||
@@ -871,6 +886,12 @@ static int qmi_wwan_probe(struct usb_int
 | 
					 | 
				
			||||||
 		id->driver_info = (unsigned long)&qmi_wwan_info;
 | 
					 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
+	/* Quectel EC20 quirk where we've QMI on interface 4 instead of 0 */
 | 
					+	/* Quectel EC20 quirk where we've QMI on interface 4 instead of 0 */
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/Makefile
 | 
					--- a/Makefile
 | 
				
			||||||
+++ b/Makefile
 | 
					+++ b/Makefile
 | 
				
			||||||
@@ -409,7 +409,7 @@ KBUILD_CFLAGS_KERNEL :=
 | 
					@@ -408,7 +408,7 @@ KBUILD_CFLAGS_KERNEL :=
 | 
				
			||||||
 KBUILD_AFLAGS   := -D__ASSEMBLY__
 | 
					 KBUILD_AFLAGS   := -D__ASSEMBLY__
 | 
				
			||||||
 KBUILD_AFLAGS_MODULE  := -DMODULE
 | 
					 KBUILD_AFLAGS_MODULE  := -DMODULE
 | 
				
			||||||
 KBUILD_CFLAGS_MODULE  := -DMODULE
 | 
					 KBUILD_CFLAGS_MODULE  := -DMODULE
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/include/uapi/linux/spi/spidev.h
 | 
					--- a/include/uapi/linux/spi/spidev.h
 | 
				
			||||||
+++ b/include/uapi/linux/spi/spidev.h
 | 
					+++ b/include/uapi/linux/spi/spidev.h
 | 
				
			||||||
@@ -111,7 +111,7 @@ struct spi_ioc_transfer {
 | 
					@@ -112,7 +112,7 @@ struct spi_ioc_transfer {
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 /* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
 | 
					 /* not all platforms use <asm-generic/ioctl.h> or _IOC_TYPECHECK() ... */
 | 
				
			||||||
 #define SPI_MSGSIZE(N) \
 | 
					 #define SPI_MSGSIZE(N) \
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 /*
 | 
					 /*
 | 
				
			||||||
  *	IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
 | 
					  *	IEEE 802.3 Ethernet magic constants.  The frame sizes omit the preamble
 | 
				
			||||||
@@ -134,11 +135,13 @@
 | 
					@@ -135,11 +136,13 @@
 | 
				
			||||||
  *	This is an Ethernet frame header.
 | 
					  *	This is an Ethernet frame header.
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ Signed-off-by: George Kashperko <george@znau.edu.ua>
 | 
				
			|||||||
 1 file changed, 1 insertion(+)
 | 
					 1 file changed, 1 insertion(+)
 | 
				
			||||||
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
 | 
					--- a/drivers/mtd/chips/cfi_cmdset_0002.c
 | 
				
			||||||
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
 | 
					+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
 | 
				
			||||||
@@ -1830,6 +1830,7 @@ static int __xipram do_write_buffer(stru
 | 
					@@ -1831,6 +1831,7 @@ static int __xipram do_write_buffer(stru
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* Write Buffer Load */
 | 
					 	/* Write Buffer Load */
 | 
				
			||||||
 	map_write(map, CMD(0x25), cmd_adr);
 | 
					 	map_write(map, CMD(0x25), cmd_adr);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/drivers/mtd/spi-nor/spi-nor.c
 | 
					--- a/drivers/mtd/spi-nor/spi-nor.c
 | 
				
			||||||
+++ b/drivers/mtd/spi-nor/spi-nor.c
 | 
					+++ b/drivers/mtd/spi-nor/spi-nor.c
 | 
				
			||||||
@@ -497,6 +497,7 @@
 | 
					@@ -497,6 +497,7 @@ static const struct spi_device_id spi_no
 | 
				
			||||||
 	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
 | 
					 	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
 | 
				
			||||||
 	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
 | 
					 	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
 | 
				
			||||||
 	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
 | 
					 	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/ubi/build.c
 | 
					--- a/drivers/mtd/ubi/build.c
 | 
				
			||||||
+++ b/drivers/mtd/ubi/build.c
 | 
					+++ b/drivers/mtd/ubi/build.c
 | 
				
			||||||
@@ -1212,6 +1212,49 @@ static struct mtd_info * __init open_mtd
 | 
					@@ -1223,6 +1223,49 @@ static struct mtd_info * __init open_mtd
 | 
				
			||||||
 	return mtd;
 | 
					 	return mtd;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -61,7 +61,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
				
			|||||||
 static int __init ubi_init(void)
 | 
					 static int __init ubi_init(void)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	int err, i, k;
 | 
					 	int err, i, k;
 | 
				
			||||||
@@ -1301,6 +1344,12 @@ static int __init ubi_init(void)
 | 
					@@ -1312,6 +1355,12 @@ static int __init ubi_init(void)
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -57,9 +57,9 @@
 | 
				
			|||||||
+	ip_checkdefault(&e->ip);
 | 
					+	ip_checkdefault(&e->ip);
 | 
				
			||||||
+
 | 
					+
 | 
				
			||||||
 	j = 0;
 | 
					 	j = 0;
 | 
				
			||||||
 | 
					 	memset(&mtpar, 0, sizeof(mtpar));
 | 
				
			||||||
 	mtpar.net	= net;
 | 
					 	mtpar.net	= net;
 | 
				
			||||||
 	mtpar.table     = name;
 | 
					@@ -943,6 +971,7 @@ copy_entries_to_user(unsigned int total_
 | 
				
			||||||
@@ -942,6 +970,7 @@ copy_entries_to_user(unsigned int total_
 | 
					 | 
				
			||||||
 	const struct xt_table_info *private = table->private;
 | 
					 	const struct xt_table_info *private = table->private;
 | 
				
			||||||
 	int ret = 0;
 | 
					 	int ret = 0;
 | 
				
			||||||
 	const void *loc_cpu_entry;
 | 
					 	const void *loc_cpu_entry;
 | 
				
			||||||
@ -67,7 +67,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	counters = alloc_counters(table);
 | 
					 	counters = alloc_counters(table);
 | 
				
			||||||
 	if (IS_ERR(counters))
 | 
					 	if (IS_ERR(counters))
 | 
				
			||||||
@@ -973,6 +1002,14 @@ copy_entries_to_user(unsigned int total_
 | 
					@@ -974,6 +1003,14 @@ copy_entries_to_user(unsigned int total_
 | 
				
			||||||
 			goto free_counters;
 | 
					 			goto free_counters;
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -82,7 +82,7 @@
 | 
				
			|||||||
 		for (i = sizeof(struct ipt_entry);
 | 
					 		for (i = sizeof(struct ipt_entry);
 | 
				
			||||||
 		     i < e->target_offset;
 | 
					 		     i < e->target_offset;
 | 
				
			||||||
 		     i += m->u.match_size) {
 | 
					 		     i += m->u.match_size) {
 | 
				
			||||||
@@ -1379,12 +1416,15 @@ compat_copy_entry_to_user(struct ipt_ent
 | 
					@@ -1380,12 +1417,15 @@ compat_copy_entry_to_user(struct ipt_ent
 | 
				
			||||||
 	compat_uint_t origsize;
 | 
					 	compat_uint_t origsize;
 | 
				
			||||||
 	const struct xt_entry_match *ematch;
 | 
					 	const struct xt_entry_match *ematch;
 | 
				
			||||||
 	int ret = 0;
 | 
					 	int ret = 0;
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 #define PACKET_FANOUT_LB		1
 | 
					 #define PACKET_FANOUT_LB		1
 | 
				
			||||||
--- a/net/packet/af_packet.c
 | 
					--- a/net/packet/af_packet.c
 | 
				
			||||||
+++ b/net/packet/af_packet.c
 | 
					+++ b/net/packet/af_packet.c
 | 
				
			||||||
@@ -1529,6 +1529,7 @@ static int packet_rcv_spkt(struct sk_buf
 | 
					@@ -1551,6 +1551,7 @@ static int packet_rcv_spkt(struct sk_buf
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct sock *sk;
 | 
					 	struct sock *sk;
 | 
				
			||||||
 	struct sockaddr_pkt *spkt;
 | 
					 	struct sockaddr_pkt *spkt;
 | 
				
			||||||
@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	/*
 | 
					 	/*
 | 
				
			||||||
 	 *	When we registered the protocol we saved the socket in the data
 | 
					 	 *	When we registered the protocol we saved the socket in the data
 | 
				
			||||||
@@ -1536,6 +1537,7 @@ static int packet_rcv_spkt(struct sk_buf
 | 
					@@ -1558,6 +1559,7 @@ static int packet_rcv_spkt(struct sk_buf
 | 
				
			||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	sk = pt->af_packet_priv;
 | 
					 	sk = pt->af_packet_priv;
 | 
				
			||||||
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	/*
 | 
					 	/*
 | 
				
			||||||
 	 *	Yank back the headers [hope the device set this
 | 
					 	 *	Yank back the headers [hope the device set this
 | 
				
			||||||
@@ -1548,7 +1550,7 @@ static int packet_rcv_spkt(struct sk_buf
 | 
					@@ -1570,7 +1572,7 @@ static int packet_rcv_spkt(struct sk_buf
 | 
				
			||||||
 	 *	so that this procedure is noop.
 | 
					 	 *	so that this procedure is noop.
 | 
				
			||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -51,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 		goto out;
 | 
					 		goto out;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	if (!net_eq(dev_net(dev), sock_net(sk)))
 | 
					 	if (!net_eq(dev_net(dev), sock_net(sk)))
 | 
				
			||||||
@@ -1747,12 +1749,12 @@ static int packet_rcv(struct sk_buff *sk
 | 
					@@ -1769,12 +1771,12 @@ static int packet_rcv(struct sk_buff *sk
 | 
				
			||||||
 	int skb_len = skb->len;
 | 
					 	int skb_len = skb->len;
 | 
				
			||||||
 	unsigned int snaplen, res;
 | 
					 	unsigned int snaplen, res;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	if (!net_eq(dev_net(dev), sock_net(sk)))
 | 
					 	if (!net_eq(dev_net(dev), sock_net(sk)))
 | 
				
			||||||
 		goto drop;
 | 
					 		goto drop;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1872,12 +1874,12 @@ static int tpacket_rcv(struct sk_buff *s
 | 
					@@ -1894,12 +1896,12 @@ static int tpacket_rcv(struct sk_buff *s
 | 
				
			||||||
 	BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
 | 
					 	BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
 | 
				
			||||||
 	BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
 | 
					 	BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	if (!net_eq(dev_net(dev), sock_net(sk)))
 | 
					 	if (!net_eq(dev_net(dev), sock_net(sk)))
 | 
				
			||||||
 		goto drop;
 | 
					 		goto drop;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -2831,6 +2833,7 @@ static int packet_create(struct net *net
 | 
					@@ -2862,6 +2864,7 @@ static int packet_create(struct net *net
 | 
				
			||||||
 	spin_lock_init(&po->bind_lock);
 | 
					 	spin_lock_init(&po->bind_lock);
 | 
				
			||||||
 	mutex_init(&po->pg_vec_lock);
 | 
					 	mutex_init(&po->pg_vec_lock);
 | 
				
			||||||
 	po->prot_hook.func = packet_rcv;
 | 
					 	po->prot_hook.func = packet_rcv;
 | 
				
			||||||
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	if (sock->type == SOCK_PACKET)
 | 
					 	if (sock->type == SOCK_PACKET)
 | 
				
			||||||
 		po->prot_hook.func = packet_rcv_spkt;
 | 
					 		po->prot_hook.func = packet_rcv_spkt;
 | 
				
			||||||
@@ -3425,6 +3428,16 @@ packet_setsockopt(struct socket *sock, i
 | 
					@@ -3485,6 +3488,16 @@ packet_setsockopt(struct socket *sock, i
 | 
				
			||||||
 		po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
 | 
					 		po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
 | 
				
			||||||
 		return 0;
 | 
					 		return 0;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	default:
 | 
					 	default:
 | 
				
			||||||
 		return -ENOPROTOOPT;
 | 
					 		return -ENOPROTOOPT;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@@ -3476,6 +3489,13 @@ static int packet_getsockopt(struct sock
 | 
					@@ -3536,6 +3549,13 @@ static int packet_getsockopt(struct sock
 | 
				
			||||||
 	case PACKET_VNET_HDR:
 | 
					 	case PACKET_VNET_HDR:
 | 
				
			||||||
 		val = po->has_vnet_hdr;
 | 
					 		val = po->has_vnet_hdr;
 | 
				
			||||||
 		break;
 | 
					 		break;
 | 
				
			||||||
 | 
				
			|||||||
@ -372,7 +372,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
--- a/net/bridge/br_sysfs_if.c
 | 
					--- a/net/bridge/br_sysfs_if.c
 | 
				
			||||||
+++ b/net/bridge/br_sysfs_if.c
 | 
					+++ b/net/bridge/br_sysfs_if.c
 | 
				
			||||||
@@ -202,6 +202,7 @@ static BRPORT_ATTR(multicast_router, S_I
 | 
					@@ -187,6 +187,7 @@ static BRPORT_ATTR(multicast_router, S_I
 | 
				
			||||||
 		   store_multicast_router);
 | 
					 		   store_multicast_router);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 BRPORT_ATTR_FLAG(multicast_fast_leave, BR_MULTICAST_FAST_LEAVE);
 | 
					 BRPORT_ATTR_FLAG(multicast_fast_leave, BR_MULTICAST_FAST_LEAVE);
 | 
				
			||||||
@ -380,11 +380,11 @@ Implement optinal multicast->unicast conversion for igmp snooping
 | 
				
			|||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static const struct brport_attribute *brport_attrs[] = {
 | 
					 static const struct brport_attribute *brport_attrs[] = {
 | 
				
			||||||
@@ -228,6 +229,7 @@ static const struct brport_attribute *br
 | 
					@@ -213,6 +214,7 @@ static const struct brport_attribute *br
 | 
				
			||||||
 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 | 
					 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 | 
				
			||||||
 	&brport_attr_multicast_router,
 | 
					 	&brport_attr_multicast_router,
 | 
				
			||||||
 	&brport_attr_multicast_fast_leave,
 | 
					 	&brport_attr_multicast_fast_leave,
 | 
				
			||||||
+	&brport_attr_multicast_to_unicast,
 | 
					+	&brport_attr_multicast_to_unicast,
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 	&brport_attr_isolate_mode,
 | 
					 	&brport_attr_isolated,
 | 
				
			||||||
 	NULL
 | 
					 	NULL
 | 
				
			||||||
 | 
				
			|||||||
@ -1,20 +0,0 @@
 | 
				
			|||||||
--- a/drivers/net/ppp/pppoe.c
 | 
					 | 
				
			||||||
+++ b/drivers/net/ppp/pppoe.c
 | 
					 | 
				
			||||||
@@ -859,7 +859,7 @@ static int pppoe_sendmsg(struct kiocb *i
 | 
					 | 
				
			||||||
 		goto end;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
-	skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32,
 | 
					 | 
				
			||||||
+	skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32 + NET_SKB_PAD,
 | 
					 | 
				
			||||||
 			   0, GFP_KERNEL);
 | 
					 | 
				
			||||||
 	if (!skb) {
 | 
					 | 
				
			||||||
 		error = -ENOMEM;
 | 
					 | 
				
			||||||
@@ -867,7 +867,7 @@ static int pppoe_sendmsg(struct kiocb *i
 | 
					 | 
				
			||||||
 	}
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	/* Reserve space for headers. */
 | 
					 | 
				
			||||||
-	skb_reserve(skb, dev->hard_header_len);
 | 
					 | 
				
			||||||
+	skb_reserve(skb, dev->hard_header_len + NET_SKB_PAD);
 | 
					 | 
				
			||||||
 	skb_reset_network_header(skb);
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
 	skb->dev = dev;
 | 
					 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/net/netlink/af_netlink.c
 | 
					--- a/net/netlink/af_netlink.c
 | 
				
			||||||
+++ b/net/netlink/af_netlink.c
 | 
					+++ b/net/netlink/af_netlink.c
 | 
				
			||||||
@@ -1107,23 +1107,7 @@ void netlink_detachskb(struct sock *sk,
 | 
					@@ -1154,23 +1154,7 @@ void netlink_detachskb(struct sock *sk,
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
 | 
					 static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 | 
				
			|||||||
@ -132,7 +132,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	}
 | 
					 	}
 | 
				
			||||||
 	return &ip6n->tnls[prio][h];
 | 
					 	return &ip6n->tnls[prio][h];
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@@ -388,6 +397,12 @@ ip6_tnl_dev_uninit(struct net_device *de
 | 
					@@ -391,6 +400,12 @@ ip6_tnl_dev_uninit(struct net_device *de
 | 
				
			||||||
 	struct net *net = t->net;
 | 
					 	struct net *net = t->net;
 | 
				
			||||||
 	struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
 | 
					 	struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -145,7 +145,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	if (dev == ip6n->fb_tnl_dev)
 | 
					 	if (dev == ip6n->fb_tnl_dev)
 | 
				
			||||||
 		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
 | 
					 		RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
 | 
				
			||||||
 	else
 | 
					 	else
 | 
				
			||||||
@@ -781,6 +796,108 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
 | 
					@@ -784,6 +799,108 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t,
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 EXPORT_SYMBOL_GPL(ip6_tnl_rcv_ctl);
 | 
					 EXPORT_SYMBOL_GPL(ip6_tnl_rcv_ctl);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -254,7 +254,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 /**
 | 
					 /**
 | 
				
			||||||
  * ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally
 | 
					  * ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally
 | 
				
			||||||
  *   @skb: received socket buffer
 | 
					  *   @skb: received socket buffer
 | 
				
			||||||
@@ -825,6 +942,26 @@ static int ip6_tnl_rcv(struct sk_buff *s
 | 
					@@ -828,6 +945,26 @@ static int ip6_tnl_rcv(struct sk_buff *s
 | 
				
			||||||
 		skb_reset_network_header(skb);
 | 
					 		skb_reset_network_header(skb);
 | 
				
			||||||
 		skb->protocol = htons(protocol);
 | 
					 		skb->protocol = htons(protocol);
 | 
				
			||||||
 		memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
 | 
					 		memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
 | 
				
			||||||
@ -281,7 +281,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 		__skb_tunnel_rx(skb, t->dev, t->net);
 | 
					 		__skb_tunnel_rx(skb, t->dev, t->net);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1086,6 +1223,7 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, str
 | 
					@@ -1089,6 +1226,7 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, str
 | 
				
			||||||
 	__u8 dsfield;
 | 
					 	__u8 dsfield;
 | 
				
			||||||
 	__u32 mtu;
 | 
					 	__u32 mtu;
 | 
				
			||||||
 	int err;
 | 
					 	int err;
 | 
				
			||||||
@ -289,7 +289,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	if ((t->parms.proto != IPPROTO_IPIP && t->parms.proto != 0) ||
 | 
					 	if ((t->parms.proto != IPPROTO_IPIP && t->parms.proto != 0) ||
 | 
				
			||||||
 	    !ip6_tnl_xmit_ctl(t))
 | 
					 	    !ip6_tnl_xmit_ctl(t))
 | 
				
			||||||
@@ -1105,6 +1243,18 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, str
 | 
					@@ -1108,6 +1246,18 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, str
 | 
				
			||||||
 	if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
 | 
					 	if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
 | 
				
			||||||
 		fl6.flowi6_mark = skb->mark;
 | 
					 		fl6.flowi6_mark = skb->mark;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -308,7 +308,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
 | 
					 	err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
 | 
				
			||||||
 	if (err != 0) {
 | 
					 	if (err != 0) {
 | 
				
			||||||
 		/* XXX: send ICMP error even if DF is not set. */
 | 
					 		/* XXX: send ICMP error even if DF is not set. */
 | 
				
			||||||
@@ -1273,6 +1423,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
 | 
					@@ -1276,6 +1426,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
 | 
				
			||||||
 	t->parms.flowinfo = p->flowinfo;
 | 
					 	t->parms.flowinfo = p->flowinfo;
 | 
				
			||||||
 	t->parms.link = p->link;
 | 
					 	t->parms.link = p->link;
 | 
				
			||||||
 	t->parms.proto = p->proto;
 | 
					 	t->parms.proto = p->proto;
 | 
				
			||||||
@ -323,7 +323,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	ip6_tnl_dst_reset(t);
 | 
					 	ip6_tnl_dst_reset(t);
 | 
				
			||||||
 	ip6_tnl_link_config(t);
 | 
					 	ip6_tnl_link_config(t);
 | 
				
			||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
@@ -1303,6 +1461,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
 | 
					@@ -1306,6 +1464,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
 | 
				
			||||||
 	p->flowinfo = u->flowinfo;
 | 
					 	p->flowinfo = u->flowinfo;
 | 
				
			||||||
 	p->link = u->link;
 | 
					 	p->link = u->link;
 | 
				
			||||||
 	p->proto = u->proto;
 | 
					 	p->proto = u->proto;
 | 
				
			||||||
@ -331,7 +331,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	memcpy(p->name, u->name, sizeof(u->name));
 | 
					 	memcpy(p->name, u->name, sizeof(u->name));
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1578,6 +1737,15 @@ static int ip6_tnl_validate(struct nlatt
 | 
					@@ -1581,6 +1740,15 @@ static int ip6_tnl_validate(struct nlatt
 | 
				
			||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -347,7 +347,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 static void ip6_tnl_netlink_parms(struct nlattr *data[],
 | 
					 static void ip6_tnl_netlink_parms(struct nlattr *data[],
 | 
				
			||||||
 				  struct __ip6_tnl_parm *parms)
 | 
					 				  struct __ip6_tnl_parm *parms)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -1611,6 +1779,46 @@ static void ip6_tnl_netlink_parms(struct
 | 
					@@ -1614,6 +1782,46 @@ static void ip6_tnl_netlink_parms(struct
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	if (data[IFLA_IPTUN_PROTO])
 | 
					 	if (data[IFLA_IPTUN_PROTO])
 | 
				
			||||||
 		parms->proto = nla_get_u8(data[IFLA_IPTUN_PROTO]);
 | 
					 		parms->proto = nla_get_u8(data[IFLA_IPTUN_PROTO]);
 | 
				
			||||||
@ -394,7 +394,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
 | 
					 static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
 | 
				
			||||||
@@ -1663,6 +1871,12 @@ static void ip6_tnl_dellink(struct net_d
 | 
					@@ -1666,6 +1874,12 @@ static void ip6_tnl_dellink(struct net_d
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static size_t ip6_tnl_get_size(const struct net_device *dev)
 | 
					 static size_t ip6_tnl_get_size(const struct net_device *dev)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -407,7 +407,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	return
 | 
					 	return
 | 
				
			||||||
 		/* IFLA_IPTUN_LINK */
 | 
					 		/* IFLA_IPTUN_LINK */
 | 
				
			||||||
 		nla_total_size(4) +
 | 
					 		nla_total_size(4) +
 | 
				
			||||||
@@ -1680,6 +1894,24 @@ static size_t ip6_tnl_get_size(const str
 | 
					@@ -1683,6 +1897,24 @@ static size_t ip6_tnl_get_size(const str
 | 
				
			||||||
 		nla_total_size(4) +
 | 
					 		nla_total_size(4) +
 | 
				
			||||||
 		/* IFLA_IPTUN_PROTO */
 | 
					 		/* IFLA_IPTUN_PROTO */
 | 
				
			||||||
 		nla_total_size(1) +
 | 
					 		nla_total_size(1) +
 | 
				
			||||||
@ -432,7 +432,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 		0;
 | 
					 		0;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -1687,6 +1919,9 @@ static int ip6_tnl_fill_info(struct sk_b
 | 
					@@ -1690,6 +1922,9 @@ static int ip6_tnl_fill_info(struct sk_b
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct ip6_tnl *tunnel = netdev_priv(dev);
 | 
					 	struct ip6_tnl *tunnel = netdev_priv(dev);
 | 
				
			||||||
 	struct __ip6_tnl_parm *parm = &tunnel->parms;
 | 
					 	struct __ip6_tnl_parm *parm = &tunnel->parms;
 | 
				
			||||||
@ -442,7 +442,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
 | 
					 	if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
 | 
				
			||||||
 	    nla_put(skb, IFLA_IPTUN_LOCAL, sizeof(struct in6_addr),
 | 
					 	    nla_put(skb, IFLA_IPTUN_LOCAL, sizeof(struct in6_addr),
 | 
				
			||||||
@@ -1697,8 +1932,27 @@ static int ip6_tnl_fill_info(struct sk_b
 | 
					@@ -1700,8 +1935,27 @@ static int ip6_tnl_fill_info(struct sk_b
 | 
				
			||||||
 	    nla_put_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) ||
 | 
					 	    nla_put_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) ||
 | 
				
			||||||
 	    nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
 | 
					 	    nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
 | 
				
			||||||
 	    nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
 | 
					 	    nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
 | 
				
			||||||
@ -471,7 +471,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 | 
				
			|||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 nla_put_failure:
 | 
					 nla_put_failure:
 | 
				
			||||||
@@ -1714,6 +1968,7 @@ static const struct nla_policy ip6_tnl_p
 | 
					@@ -1717,6 +1971,7 @@ static const struct nla_policy ip6_tnl_p
 | 
				
			||||||
 	[IFLA_IPTUN_FLOWINFO]		= { .type = NLA_U32 },
 | 
					 	[IFLA_IPTUN_FLOWINFO]		= { .type = NLA_U32 },
 | 
				
			||||||
 	[IFLA_IPTUN_FLAGS]		= { .type = NLA_U32 },
 | 
					 	[IFLA_IPTUN_FLAGS]		= { .type = NLA_U32 },
 | 
				
			||||||
 	[IFLA_IPTUN_PROTO]		= { .type = NLA_U8 },
 | 
					 	[IFLA_IPTUN_PROTO]		= { .type = NLA_U8 },
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/net/ipv6/ip6_output.c
 | 
					--- a/net/ipv6/ip6_output.c
 | 
				
			||||||
+++ b/net/ipv6/ip6_output.c
 | 
					+++ b/net/ipv6/ip6_output.c
 | 
				
			||||||
@@ -906,21 +906,45 @@ static int ip6_dst_lookup_tail(struct so
 | 
					@@ -908,21 +908,45 @@ static int ip6_dst_lookup_tail(struct so
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 	int err;
 | 
					 	int err;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -81,7 +81,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
 | 
				
			|||||||
 	 * Here if the dst entry we've looked up
 | 
					 	 * Here if the dst entry we've looked up
 | 
				
			||||||
--- a/net/ipv6/route.c
 | 
					--- a/net/ipv6/route.c
 | 
				
			||||||
+++ b/net/ipv6/route.c
 | 
					+++ b/net/ipv6/route.c
 | 
				
			||||||
@@ -2184,9 +2184,10 @@ int ip6_route_get_saddr(struct net *net,
 | 
					@@ -2185,9 +2185,10 @@ int ip6_route_get_saddr(struct net *net,
 | 
				
			||||||
 			unsigned int prefs,
 | 
					 			unsigned int prefs,
 | 
				
			||||||
 			struct in6_addr *saddr)
 | 
					 			struct in6_addr *saddr)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 | 
				
			|||||||
@ -143,7 +143,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 static const struct rt6_info ip6_blk_hole_entry_template = {
 | 
					 static const struct rt6_info ip6_blk_hole_entry_template = {
 | 
				
			||||||
 	.dst = {
 | 
					 	.dst = {
 | 
				
			||||||
 		.__refcnt	= ATOMIC_INIT(1),
 | 
					 		.__refcnt	= ATOMIC_INIT(1),
 | 
				
			||||||
@@ -1578,6 +1595,11 @@ int ip6_route_add(struct fib6_config *cf
 | 
					@@ -1579,6 +1596,11 @@ int ip6_route_add(struct fib6_config *cf
 | 
				
			||||||
 			rt->dst.output = ip6_pkt_prohibit_out;
 | 
					 			rt->dst.output = ip6_pkt_prohibit_out;
 | 
				
			||||||
 			rt->dst.input = ip6_pkt_prohibit;
 | 
					 			rt->dst.input = ip6_pkt_prohibit;
 | 
				
			||||||
 			break;
 | 
					 			break;
 | 
				
			||||||
@ -155,7 +155,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 		case RTN_THROW:
 | 
					 		case RTN_THROW:
 | 
				
			||||||
 		default:
 | 
					 		default:
 | 
				
			||||||
 			rt->dst.error = (cfg->fc_type == RTN_THROW) ? -EAGAIN
 | 
					 			rt->dst.error = (cfg->fc_type == RTN_THROW) ? -EAGAIN
 | 
				
			||||||
@@ -2141,6 +2163,17 @@ static int ip6_pkt_prohibit_out(struct s
 | 
					@@ -2142,6 +2164,17 @@ static int ip6_pkt_prohibit_out(struct s
 | 
				
			||||||
 	return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
 | 
					 	return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -173,7 +173,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 /*
 | 
					 /*
 | 
				
			||||||
  *	Allocate a dst for local (unicast / anycast) address.
 | 
					  *	Allocate a dst for local (unicast / anycast) address.
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
@@ -2365,7 +2398,8 @@ static int rtm_to_fib6_config(struct sk_
 | 
					@@ -2368,7 +2401,8 @@ static int rtm_to_fib6_config(struct sk_
 | 
				
			||||||
 	if (rtm->rtm_type == RTN_UNREACHABLE ||
 | 
					 	if (rtm->rtm_type == RTN_UNREACHABLE ||
 | 
				
			||||||
 	    rtm->rtm_type == RTN_BLACKHOLE ||
 | 
					 	    rtm->rtm_type == RTN_BLACKHOLE ||
 | 
				
			||||||
 	    rtm->rtm_type == RTN_PROHIBIT ||
 | 
					 	    rtm->rtm_type == RTN_PROHIBIT ||
 | 
				
			||||||
@ -183,7 +183,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 		cfg->fc_flags |= RTF_REJECT;
 | 
					 		cfg->fc_flags |= RTF_REJECT;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	if (rtm->rtm_type == RTN_LOCAL)
 | 
					 	if (rtm->rtm_type == RTN_LOCAL)
 | 
				
			||||||
@@ -2567,6 +2601,9 @@ static int rt6_fill_node(struct net *net
 | 
					@@ -2570,6 +2604,9 @@ static int rt6_fill_node(struct net *net
 | 
				
			||||||
 		case -EACCES:
 | 
					 		case -EACCES:
 | 
				
			||||||
 			rtm->rtm_type = RTN_PROHIBIT;
 | 
					 			rtm->rtm_type = RTN_PROHIBIT;
 | 
				
			||||||
 			break;
 | 
					 			break;
 | 
				
			||||||
@ -193,7 +193,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 		case -EAGAIN:
 | 
					 		case -EAGAIN:
 | 
				
			||||||
 			rtm->rtm_type = RTN_THROW;
 | 
					 			rtm->rtm_type = RTN_THROW;
 | 
				
			||||||
 			break;
 | 
					 			break;
 | 
				
			||||||
@@ -2825,6 +2862,8 @@ static int ip6_route_dev_notify(struct n
 | 
					@@ -2828,6 +2865,8 @@ static int ip6_route_dev_notify(struct n
 | 
				
			||||||
 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
 | 
					 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
 | 
				
			||||||
 		net->ipv6.ip6_prohibit_entry->dst.dev = dev;
 | 
					 		net->ipv6.ip6_prohibit_entry->dst.dev = dev;
 | 
				
			||||||
 		net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
 | 
					 		net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
 | 
				
			||||||
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 		net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
 | 
					 		net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
 | 
				
			||||||
 		net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
 | 
					 		net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@@ -3047,6 +3086,17 @@ static int __net_init ip6_route_net_init
 | 
					@@ -3054,6 +3093,17 @@ static int __net_init ip6_route_net_init
 | 
				
			||||||
 	net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
 | 
					 	net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
 | 
				
			||||||
 	dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
 | 
					 	dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
 | 
				
			||||||
 			 ip6_template_metrics, true);
 | 
					 			 ip6_template_metrics, true);
 | 
				
			||||||
@ -220,7 +220,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	net->ipv6.sysctl.flush_delay = 0;
 | 
					 	net->ipv6.sysctl.flush_delay = 0;
 | 
				
			||||||
@@ -3065,6 +3115,8 @@ out:
 | 
					@@ -3072,6 +3122,8 @@ out:
 | 
				
			||||||
 	return ret;
 | 
					 	return ret;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
 | 
					 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
 | 
				
			||||||
@ -229,7 +229,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 out_ip6_prohibit_entry:
 | 
					 out_ip6_prohibit_entry:
 | 
				
			||||||
 	kfree(net->ipv6.ip6_prohibit_entry);
 | 
					 	kfree(net->ipv6.ip6_prohibit_entry);
 | 
				
			||||||
 out_ip6_null_entry:
 | 
					 out_ip6_null_entry:
 | 
				
			||||||
@@ -3082,6 +3134,7 @@ static void __net_exit ip6_route_net_exi
 | 
					@@ -3089,6 +3141,7 @@ static void __net_exit ip6_route_net_exi
 | 
				
			||||||
 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
 | 
					 #ifdef CONFIG_IPV6_MULTIPLE_TABLES
 | 
				
			||||||
 	kfree(net->ipv6.ip6_prohibit_entry);
 | 
					 	kfree(net->ipv6.ip6_prohibit_entry);
 | 
				
			||||||
 	kfree(net->ipv6.ip6_blk_hole_entry);
 | 
					 	kfree(net->ipv6.ip6_blk_hole_entry);
 | 
				
			||||||
@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | 
				
			|||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 	dst_entries_destroy(&net->ipv6.ip6_dst_ops);
 | 
					 	dst_entries_destroy(&net->ipv6.ip6_dst_ops);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@@ -3155,6 +3208,9 @@ void __init ip6_route_init_special_entri
 | 
					@@ -3162,6 +3215,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_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->dst.dev = init_net.loopback_dev;
 | 
				
			||||||
 	init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
 | 
					 	init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/net/core/dev.c
 | 
					--- a/net/core/dev.c
 | 
				
			||||||
+++ b/net/core/dev.c
 | 
					+++ b/net/core/dev.c
 | 
				
			||||||
@@ -4006,6 +4006,9 @@ static enum gro_result dev_gro_receive(s
 | 
					@@ -4028,6 +4028,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@nbd.name>
 | 
				
			|||||||
 	if (!(skb->dev->features & NETIF_F_GRO))
 | 
					 	if (!(skb->dev->features & NETIF_F_GRO))
 | 
				
			||||||
 		goto normal;
 | 
					 		goto normal;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -5077,6 +5080,48 @@ static void __netdev_adjacent_dev_unlink
 | 
					@@ -5099,6 +5102,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@nbd.name>
 | 
				
			|||||||
 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)
 | 
				
			||||||
@@ -5137,6 +5182,7 @@ static int __netdev_upper_dev_link(struc
 | 
					@@ -5159,6 +5204,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@nbd.name>
 | 
				
			|||||||
 	call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
 | 
					 	call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
 | 
				
			||||||
 	return 0;
 | 
					 	return 0;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -5254,6 +5300,7 @@ void netdev_upper_dev_unlink(struct net_
 | 
					@@ -5276,6 +5322,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, i->ref_nr);
 | 
					 		__netdev_adjacent_dev_unlink(dev, i->dev, i->ref_nr);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -92,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
 	call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
 | 
					 	call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 EXPORT_SYMBOL(netdev_upper_dev_unlink);
 | 
					 EXPORT_SYMBOL(netdev_upper_dev_unlink);
 | 
				
			||||||
@@ -5773,6 +5820,7 @@ int dev_set_mac_address(struct net_devic
 | 
					@@ -5795,6 +5842,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;
 | 
				
			||||||
@ -114,8 +114,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 | 
				
			|||||||
--- a/include/linux/skbuff.h
 | 
					--- a/include/linux/skbuff.h
 | 
				
			||||||
+++ b/include/linux/skbuff.h
 | 
					+++ b/include/linux/skbuff.h
 | 
				
			||||||
@@ -598,7 +598,8 @@ struct sk_buff {
 | 
					@@ -598,7 +598,8 @@ struct sk_buff {
 | 
				
			||||||
 #endif
 | 
					 | 
				
			||||||
 	__u8			ipvs_property:1;
 | 
					 	__u8			ipvs_property:1;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 	__u8			inner_protocol_type:1;
 | 
					 	__u8			inner_protocol_type:1;
 | 
				
			||||||
-	/* 4 or 6 bit hole */
 | 
					-	/* 4 or 6 bit hole */
 | 
				
			||||||
+	__u8			gro_skip:1;
 | 
					+	__u8			gro_skip:1;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/drivers/net/phy/phy.c
 | 
					--- a/drivers/net/phy/phy.c
 | 
				
			||||||
+++ b/drivers/net/phy/phy.c
 | 
					+++ b/drivers/net/phy/phy.c
 | 
				
			||||||
@@ -357,6 +357,50 @@ int phy_ethtool_gset(struct phy_device *
 | 
					@@ -363,6 +363,50 @@ int phy_ethtool_gset(struct phy_device *
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 EXPORT_SYMBOL(phy_ethtool_gset);
 | 
					 EXPORT_SYMBOL(phy_ethtool_gset);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -53,7 +53,7 @@
 | 
				
			|||||||
  * @phydev: the phy_device struct
 | 
					  * @phydev: the phy_device struct
 | 
				
			||||||
--- a/include/linux/phy.h
 | 
					--- a/include/linux/phy.h
 | 
				
			||||||
+++ b/include/linux/phy.h
 | 
					+++ b/include/linux/phy.h
 | 
				
			||||||
@@ -752,6 +752,7 @@ void phy_start_machine(struct phy_device
 | 
					@@ -759,6 +759,7 @@ void phy_start_machine(struct phy_device
 | 
				
			||||||
 void phy_stop_machine(struct phy_device *phydev);
 | 
					 void phy_stop_machine(struct phy_device *phydev);
 | 
				
			||||||
 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
 | 
					 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
 | 
				
			||||||
 int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
 | 
					 int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
--- a/include/linux/phy.h
 | 
					--- a/include/linux/phy.h
 | 
				
			||||||
+++ b/include/linux/phy.h
 | 
					+++ b/include/linux/phy.h
 | 
				
			||||||
@@ -484,6 +484,12 @@ struct phy_driver {
 | 
					@@ -480,6 +480,12 @@ struct phy_driver {
 | 
				
			||||||
 	/* Determines the negotiated speed and duplex */
 | 
					 	/* Determines the negotiated speed and duplex */
 | 
				
			||||||
 	int (*read_status)(struct phy_device *phydev);
 | 
					 	int (*read_status)(struct phy_device *phydev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
--- a/include/linux/phy.h
 | 
					--- a/include/linux/phy.h
 | 
				
			||||||
+++ b/include/linux/phy.h
 | 
					+++ b/include/linux/phy.h
 | 
				
			||||||
@@ -502,6 +502,12 @@ struct phy_driver {
 | 
					@@ -498,6 +498,12 @@ struct phy_driver {
 | 
				
			||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
 	int (*did_interrupt)(struct phy_device *phydev);
 | 
					 	int (*did_interrupt)(struct phy_device *phydev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,7 @@
 | 
				
			|||||||
 		phy_device_free(phydev);
 | 
					 		phy_device_free(phydev);
 | 
				
			||||||
--- a/include/linux/phy.h
 | 
					--- a/include/linux/phy.h
 | 
				
			||||||
+++ b/include/linux/phy.h
 | 
					+++ b/include/linux/phy.h
 | 
				
			||||||
@@ -789,4 +789,22 @@ int __init mdio_bus_init(void);
 | 
					@@ -796,4 +796,22 @@ int __init mdio_bus_init(void);
 | 
				
			||||||
 void mdio_bus_exit(void);
 | 
					 void mdio_bus_exit(void);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 extern struct bus_type mdio_bus_type;
 | 
					 extern struct bus_type mdio_bus_type;
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
@@ -2626,10 +2626,20 @@ static int xmit_one(struct sk_buff *skb,
 | 
					@@ -2637,10 +2637,20 @@ static int xmit_one(struct sk_buff *skb,
 | 
				
			||||||
 	if (!list_empty(&ptype_all))
 | 
					 	if (!list_empty(&ptype_all))
 | 
				
			||||||
 		dev_queue_xmit_nit(skb, dev);
 | 
					 		dev_queue_xmit_nit(skb, dev);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -69,7 +69,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
				
			|||||||
 /**
 | 
					 /**
 | 
				
			||||||
  *	ata_build_rw_tf - Build ATA taskfile for given read/write request
 | 
					  *	ata_build_rw_tf - Build ATA taskfile for given read/write request
 | 
				
			||||||
  *	@tf: Target ATA taskfile
 | 
					  *	@tf: Target ATA taskfile
 | 
				
			||||||
@@ -4800,6 +4813,9 @@ static struct ata_queued_cmd *ata_qc_new
 | 
					@@ -4825,6 +4838,9 @@ static struct ata_queued_cmd *ata_qc_new
 | 
				
			||||||
 			break;
 | 
					 			break;
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@ -79,7 +79,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	return qc;
 | 
					 	return qc;
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
@@ -5710,6 +5726,9 @@ struct ata_port *ata_port_alloc(struct a
 | 
					@@ -5734,6 +5750,9 @@ struct ata_port *ata_port_alloc(struct a
 | 
				
			||||||
 	ap->stats.unhandled_irq = 1;
 | 
					 	ap->stats.unhandled_irq = 1;
 | 
				
			||||||
 	ap->stats.idle_irq = 1;
 | 
					 	ap->stats.idle_irq = 1;
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
@ -89,7 +89,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
				
			|||||||
 	ata_sff_port_init(ap);
 | 
					 	ata_sff_port_init(ap);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	return ap;
 | 
					 	return ap;
 | 
				
			||||||
@@ -5731,6 +5750,12 @@ static void ata_host_release(struct devi
 | 
					@@ -5755,6 +5774,12 @@ static void ata_host_release(struct devi
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 		kfree(ap->pmp_link);
 | 
					 		kfree(ap->pmp_link);
 | 
				
			||||||
 		kfree(ap->slave_link);
 | 
					 		kfree(ap->slave_link);
 | 
				
			||||||
@ -102,7 +102,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
 | 
				
			|||||||
 		kfree(ap);
 | 
					 		kfree(ap);
 | 
				
			||||||
 		host->ports[i] = NULL;
 | 
					 		host->ports[i] = NULL;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
@@ -6177,7 +6202,23 @@ int ata_host_register(struct ata_host *h
 | 
					@@ -6201,7 +6226,23 @@ int ata_host_register(struct ata_host *h
 | 
				
			||||||
 		host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
 | 
					 		host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
 | 
				
			||||||
 		host->ports[i]->local_port_no = i + 1;
 | 
					 		host->ports[i]->local_port_no = i + 1;
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 | 
				
			|||||||
@ -34,7 +34,7 @@
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
--- a/fs/proc/proc_tty.c
 | 
					--- a/fs/proc/proc_tty.c
 | 
				
			||||||
+++ b/fs/proc/proc_tty.c
 | 
					+++ b/fs/proc/proc_tty.c
 | 
				
			||||||
@@ -143,7 +143,10 @@ static const struct file_operations proc
 | 
					@@ -144,7 +144,10 @@ static const struct file_operations proc
 | 
				
			||||||
 void proc_tty_register_driver(struct tty_driver *driver)
 | 
					 void proc_tty_register_driver(struct tty_driver *driver)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct proc_dir_entry *ent;
 | 
					 	struct proc_dir_entry *ent;
 | 
				
			||||||
@ -46,7 +46,7 @@
 | 
				
			|||||||
 	if (!driver->driver_name || driver->proc_entry ||
 | 
					 	if (!driver->driver_name || driver->proc_entry ||
 | 
				
			||||||
 	    !driver->ops->proc_fops)
 | 
					 	    !driver->ops->proc_fops)
 | 
				
			||||||
 		return;
 | 
					 		return;
 | 
				
			||||||
@@ -160,6 +163,9 @@ void proc_tty_unregister_driver(struct t
 | 
					@@ -161,6 +164,9 @@ void proc_tty_unregister_driver(struct t
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct proc_dir_entry *ent;
 | 
					 	struct proc_dir_entry *ent;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -56,7 +56,7 @@
 | 
				
			|||||||
 	ent = driver->proc_entry;
 | 
					 	ent = driver->proc_entry;
 | 
				
			||||||
 	if (!ent)
 | 
					 	if (!ent)
 | 
				
			||||||
 		return;
 | 
					 		return;
 | 
				
			||||||
@@ -174,6 +180,9 @@ void proc_tty_unregister_driver(struct t
 | 
					@@ -175,6 +181,9 @@ void proc_tty_unregister_driver(struct t
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
 void __init proc_tty_init(void)
 | 
					 void __init proc_tty_init(void)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -122,7 +122,7 @@
 | 
				
			|||||||
 		return -ENOMEM;
 | 
					 		return -ENOMEM;
 | 
				
			||||||
--- a/mm/vmalloc.c
 | 
					--- a/mm/vmalloc.c
 | 
				
			||||||
+++ b/mm/vmalloc.c
 | 
					+++ b/mm/vmalloc.c
 | 
				
			||||||
@@ -2662,6 +2662,8 @@ static const struct file_operations proc
 | 
					@@ -2663,6 +2663,8 @@ static const struct file_operations proc
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static int __init proc_vmalloc_init(void)
 | 
					 static int __init proc_vmalloc_init(void)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -173,7 +173,7 @@
 | 
				
			|||||||
 		goto err;
 | 
					 		goto err;
 | 
				
			||||||
--- a/net/core/sock.c
 | 
					--- a/net/core/sock.c
 | 
				
			||||||
+++ b/net/core/sock.c
 | 
					+++ b/net/core/sock.c
 | 
				
			||||||
@@ -2939,6 +2939,8 @@ static __net_initdata struct pernet_oper
 | 
					@@ -2941,6 +2941,8 @@ static __net_initdata struct pernet_oper
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static int __init proto_init(void)
 | 
					 static int __init proto_init(void)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -239,7 +239,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
--- a/net/ipv4/route.c
 | 
					--- a/net/ipv4/route.c
 | 
				
			||||||
+++ b/net/ipv4/route.c
 | 
					+++ b/net/ipv4/route.c
 | 
				
			||||||
@@ -416,6 +416,9 @@ static struct pernet_operations ip_rt_pr
 | 
					@@ -418,6 +418,9 @@ static struct pernet_operations ip_rt_pr
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 static int __init ip_rt_proc_init(void)
 | 
					 static int __init ip_rt_proc_init(void)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -251,7 +251,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
--- a/ipc/msg.c
 | 
					--- a/ipc/msg.c
 | 
				
			||||||
+++ b/ipc/msg.c
 | 
					+++ b/ipc/msg.c
 | 
				
			||||||
@@ -1072,6 +1072,9 @@ void __init msg_init(void)
 | 
					@@ -1075,6 +1075,9 @@ void __init msg_init(void)
 | 
				
			||||||
 	printk(KERN_INFO "msgmni has been set to %d\n",
 | 
					 	printk(KERN_INFO "msgmni has been set to %d\n",
 | 
				
			||||||
 		init_ipc_ns.msg_ctlmni);
 | 
					 		init_ipc_ns.msg_ctlmni);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@
 | 
				
			|||||||
 	int retval = 0;
 | 
					 	int retval = 0;
 | 
				
			||||||
--- a/drivers/usb/host/ohci-hcd.c
 | 
					--- a/drivers/usb/host/ohci-hcd.c
 | 
				
			||||||
+++ b/drivers/usb/host/ohci-hcd.c
 | 
					+++ b/drivers/usb/host/ohci-hcd.c
 | 
				
			||||||
@@ -1259,6 +1259,11 @@ MODULE_LICENSE ("GPL");
 | 
					@@ -1260,6 +1260,11 @@ MODULE_LICENSE ("GPL");
 | 
				
			||||||
 #define PLATFORM_DRIVER		ohci_hcd_tilegx_driver
 | 
					 #define PLATFORM_DRIVER		ohci_hcd_tilegx_driver
 | 
				
			||||||
 #endif
 | 
					 #endif
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 | 
				
			|||||||
@ -7,8 +7,8 @@
 | 
				
			|||||||
-#define FORCE_WORD_WRITE 0
 | 
					-#define FORCE_WORD_WRITE 0
 | 
				
			||||||
+#define FORCE_WORD_WRITE 1
 | 
					+#define FORCE_WORD_WRITE 1
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
-#define MAX_WORD_RETRIES 3
 | 
					-#define MAX_RETRIES 3
 | 
				
			||||||
+#define MAX_WORD_RETRIES 10
 | 
					+#define MAX_RETRIES 10
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 #define SST49LF004B	        0x0060
 | 
					 #define SST49LF004B	        0x0060
 | 
				
			||||||
 #define SST49LF040B	        0x0050
 | 
					 #define SST49LF040B	        0x0050
 | 
				
			||||||
 | 
				
			|||||||
@ -18,8 +18,8 @@
 | 
				
			|||||||
+	u32 hcca_area;
 | 
					+	u32 hcca_area;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* Accept arbitrarily long scatter-gather lists */
 | 
					 	/* Accept arbitrarily long scatter-gather lists */
 | 
				
			||||||
 	hcd->self.sg_tablesize = ~0;
 | 
					 	if (!(hcd->driver->flags & HCD_LOCAL_MEM))
 | 
				
			||||||
@@ -501,11 +502,13 @@ static int ohci_init (struct ohci_hcd *o
 | 
					@@ -502,11 +503,13 @@ static int ohci_init (struct ohci_hcd *o
 | 
				
			||||||
 			(unsigned long) ohci);
 | 
					 			(unsigned long) ohci);
 | 
				
			||||||
 	set_timer_slack(&ohci->io_watchdog, msecs_to_jiffies(20));
 | 
					 	set_timer_slack(&ohci->io_watchdog, msecs_to_jiffies(20));
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@ -35,7 +35,7 @@
 | 
				
			|||||||
 	if ((ret = ohci_mem_init (ohci)) < 0)
 | 
					 	if ((ret = ohci_mem_init (ohci)) < 0)
 | 
				
			||||||
 		ohci_stop (hcd);
 | 
					 		ohci_stop (hcd);
 | 
				
			||||||
 	else {
 | 
					 	else {
 | 
				
			||||||
@@ -523,6 +526,7 @@ static int ohci_init (struct ohci_hcd *o
 | 
					@@ -524,6 +527,7 @@ static int ohci_init (struct ohci_hcd *o
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
 static int ohci_run (struct ohci_hcd *ohci)
 | 
					 static int ohci_run (struct ohci_hcd *ohci)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@ -43,7 +43,7 @@
 | 
				
			|||||||
 	u32			mask, val;
 | 
					 	u32			mask, val;
 | 
				
			||||||
 	int			first = ohci->fminterval == 0;
 | 
					 	int			first = ohci->fminterval == 0;
 | 
				
			||||||
 	struct usb_hcd		*hcd = ohci_to_hcd(ohci);
 | 
					 	struct usb_hcd		*hcd = ohci_to_hcd(ohci);
 | 
				
			||||||
@@ -573,6 +577,8 @@ static int ohci_run (struct ohci_hcd *oh
 | 
					@@ -574,6 +578,8 @@ static int ohci_run (struct ohci_hcd *oh
 | 
				
			||||||
 	msleep(val);
 | 
					 	msleep(val);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	memset (ohci->hcca, 0, sizeof (struct ohci_hcca));
 | 
					 	memset (ohci->hcca, 0, sizeof (struct ohci_hcca));
 | 
				
			||||||
@ -52,7 +52,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	/* 2msec timelimit here means no irqs/preempt */
 | 
					 	/* 2msec timelimit here means no irqs/preempt */
 | 
				
			||||||
 	spin_lock_irq (&ohci->lock);
 | 
					 	spin_lock_irq (&ohci->lock);
 | 
				
			||||||
@@ -984,9 +990,6 @@ static void ohci_stop (struct usb_hcd *h
 | 
					@@ -985,9 +991,6 @@ static void ohci_stop (struct usb_hcd *h
 | 
				
			||||||
 	remove_debug_files (ohci);
 | 
					 	remove_debug_files (ohci);
 | 
				
			||||||
 	ohci_mem_cleanup (ohci);
 | 
					 	ohci_mem_cleanup (ohci);
 | 
				
			||||||
 	if (ohci->hcca) {
 | 
					 	if (ohci->hcca) {
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ Avoid sending unnecessary READ commands to the chip.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/nand_base.c
 | 
					--- a/drivers/mtd/nand/nand_base.c
 | 
				
			||||||
+++ b/drivers/mtd/nand/nand_base.c
 | 
					+++ b/drivers/mtd/nand/nand_base.c
 | 
				
			||||||
@@ -1360,9 +1360,16 @@ static int nand_read_page_hwecc_oob_firs
 | 
					@@ -1365,9 +1365,16 @@ static int nand_read_page_hwecc_oob_firs
 | 
				
			||||||
 	unsigned int max_bitflips = 0;
 | 
					 	unsigned int max_bitflips = 0;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* Read the OOB area first */
 | 
					 	/* Read the OOB area first */
 | 
				
			||||||
@ -30,7 +30,7 @@ Avoid sending unnecessary READ commands to the chip.
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 	for (i = 0; i < chip->ecc.total; i++)
 | 
					 	for (i = 0; i < chip->ecc.total; i++)
 | 
				
			||||||
 		ecc_code[i] = chip->oob_poi[eccpos[i]];
 | 
					 		ecc_code[i] = chip->oob_poi[eccpos[i]];
 | 
				
			||||||
@@ -1575,7 +1582,9 @@ static int nand_do_read_ops(struct mtd_i
 | 
					@@ -1580,7 +1587,9 @@ static int nand_do_read_ops(struct mtd_i
 | 
				
			||||||
 						 __func__, buf);
 | 
					 						 __func__, buf);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 read_retry:
 | 
					 read_retry:
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ Subject: [PATCH 3/7] NAND: Add support for subpage reads for
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/nand_base.c
 | 
					--- a/drivers/mtd/nand/nand_base.c
 | 
				
			||||||
+++ b/drivers/mtd/nand/nand_base.c
 | 
					+++ b/drivers/mtd/nand/nand_base.c
 | 
				
			||||||
@@ -1393,6 +1393,75 @@ static int nand_read_page_hwecc_oob_firs
 | 
					@@ -1398,6 +1398,75 @@ static int nand_read_page_hwecc_oob_firs
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 /**
 | 
					 /**
 | 
				
			||||||
@ -86,7 +86,7 @@ Subject: [PATCH 3/7] NAND: Add support for subpage reads for
 | 
				
			|||||||
  * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
 | 
					  * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
 | 
				
			||||||
  * @mtd: mtd info structure
 | 
					  * @mtd: mtd info structure
 | 
				
			||||||
  * @chip: nand chip info structure
 | 
					  * @chip: nand chip info structure
 | 
				
			||||||
@@ -3950,8 +4019,14 @@ int nand_scan_tail(struct mtd_info *mtd)
 | 
					@@ -3961,8 +4030,14 @@ int nand_scan_tail(struct mtd_info *mtd)
 | 
				
			||||||
 			pr_warn("No ECC functions supplied; hardware ECC not possible\n");
 | 
					 			pr_warn("No ECC functions supplied; hardware ECC not possible\n");
 | 
				
			||||||
 			BUG();
 | 
					 			BUG();
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ The spi_gpio driver does not support 3-wire mode.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/arch/mips/jz4740/board-qi_lb60.c
 | 
					--- a/arch/mips/jz4740/board-qi_lb60.c
 | 
				
			||||||
+++ b/arch/mips/jz4740/board-qi_lb60.c
 | 
					+++ b/arch/mips/jz4740/board-qi_lb60.c
 | 
				
			||||||
@@ -312,7 +312,6 @@ static struct spi_board_info qi_lb60_spi
 | 
					@@ -313,7 +313,6 @@ static struct spi_board_info qi_lb60_spi
 | 
				
			||||||
 		.chip_select = 0,
 | 
					 		.chip_select = 0,
 | 
				
			||||||
 		.bus_num = 1,
 | 
					 		.bus_num = 1,
 | 
				
			||||||
 		.max_speed_hz = 30 * 1000,
 | 
					 		.max_speed_hz = 30 * 1000,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user