patches-3.8.10-rt6.tar.xz

md5sum:
5d67cb12ca9b97382a85b13d0a709b7b  patches-3.8.10-rt6.tar.xz

Announce:
 ---------------------
 Dear RT Folks,

 I'm pleased to announce the 3.8.10-rt6 release.

 changes since v3.8.10-rt5:
 - the i915 compiles again after I broke it in the last release. A patch
   was sent by Carsten Emde.

 Known issues:

     - SLxB is broken on PowerPC.
     - suspend / resume seems to program program the timer wrong and wait
       ages until it continues.

 The delta patch against v3.8.10-rt5 is appended below and can be found here:

   https://www.kernel.org/pub/linux/kernel/projects/rt/3.8/incr/patch-3.8.10-rt5-rt6.patch.xz

 The RT patch against 3.8.9 can be found here:

   https://www.kernel.org/pub/linux/kernel/projects/rt/3.8/patch-3.8.10-rt6.patch.xz

 The split quilt queue is available at:

   https://www.kernel.org/pub/linux/kernel/projects/rt/3.8/patches-3.8.10-rt6.tar.xz

 Sebastian
 ---------------------

http://marc.info/?l=linux-rt-users&m=136726632717595&w=2

Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
diff --git a/patches/cpsw-collected_cpsw_patches.patch b/patches/cpsw-collected_cpsw_patches.patch
index 26c5d99..b8cc132 100644
--- a/patches/cpsw-collected_cpsw_patches.patch
+++ b/patches/cpsw-collected_cpsw_patches.patch
@@ -1061,8 +1061,21 @@
 Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
 ---
 
-diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
-index c2f14e8..91fe4f1 100644
+---
+ arch/arm/boot/dts/am33xx.dtsi           |   16 
+ drivers/net/ethernet/ti/Kconfig         |    4 
+ drivers/net/ethernet/ti/cpmac.c         |   11 
+ drivers/net/ethernet/ti/cpsw.c          |  814 ++++++++++++++++++++++++++------
+ drivers/net/ethernet/ti/cpsw_ale.c      |  107 +++-
+ drivers/net/ethernet/ti/cpsw_ale.h      |   24 
+ drivers/net/ethernet/ti/davinci_cpdma.c |  106 +++-
+ drivers/net/ethernet/ti/davinci_cpdma.h |   12 
+ drivers/net/ethernet/ti/davinci_emac.c  |   76 +-
+ drivers/net/ethernet/ti/davinci_mdio.c  |    5 
+ drivers/net/ethernet/ti/tlan.c          |    5 
+ include/linux/platform_data/cpsw.h      |    6 
+ 12 files changed, 946 insertions(+), 240 deletions(-)
+
 --- a/arch/arm/boot/dts/am33xx.dtsi
 +++ b/arch/arm/boot/dts/am33xx.dtsi
 @@ -349,7 +349,7 @@
@@ -1094,8 +1107,6 @@
 +		};
  	};
  };
-diff --git a/drivers/net/ethernet/ti/Kconfig b/drivers/net/ethernet/ti/Kconfig
-index 4426151..de71b1e 100644
 --- a/drivers/net/ethernet/ti/Kconfig
 +++ b/drivers/net/ethernet/ti/Kconfig
 @@ -88,8 +88,8 @@ config TLAN
@@ -1109,11 +1120,9 @@
  	select PHYLIB
  	---help---
  	  TI AR7 CPMAC Ethernet support
-diff --git a/drivers/net/ethernet/ti/cpmac.c b/drivers/net/ethernet/ti/cpmac.c
-index d9625f6..31bbbca 100644
 --- a/drivers/net/ethernet/ti/cpmac.c
 +++ b/drivers/net/ethernet/ti/cpmac.c
-@@ -904,10 +904,9 @@ static int cpmac_set_ringparam(struct net_device *dev,
+@@ -904,10 +904,9 @@ static int cpmac_set_ringparam(struct ne
  static void cpmac_get_drvinfo(struct net_device *dev,
  			      struct ethtool_drvinfo *info)
  {
@@ -1127,7 +1136,7 @@
  	info->regdump_len = 0;
  }
  
-@@ -1173,8 +1172,8 @@ static int cpmac_probe(struct platform_device *pdev)
+@@ -1173,8 +1172,8 @@ static int cpmac_probe(struct platform_d
  	snprintf(priv->phy_name, MII_BUS_ID_SIZE, PHY_ID_FMT,
  						mdio_bus_id, phy_id);
  
@@ -1138,8 +1147,6 @@
  
  	if (IS_ERR(priv->phy)) {
  		if (netif_msg_drv(priv))
-diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
-index 40aff68..4e2d224 100644
 --- a/drivers/net/ethernet/ti/cpsw.c
 +++ b/drivers/net/ethernet/ti/cpsw.c
 @@ -32,6 +32,7 @@
@@ -1226,7 +1233,7 @@
  	struct net_device_stats		stats;
  	int				rx_packet_max;
  	int				host_port;
-@@ -315,17 +348,69 @@ struct cpsw_priv {
+@@ -315,16 +348,68 @@ struct cpsw_priv {
  	/* snapshot of IRQ numbers */
  	u32 irqs_table[4];
  	u32 num_irqs;
@@ -1273,7 +1280,7 @@
 +			priv = netdev_priv(ndev);			\
 +			skb->dev = ndev;				\
 +		}							\
-+	} while (0)
+ 	} while (0)
 +#define cpsw_add_mcast(priv, addr)					\
 +	do {								\
 +		if (priv->data.dual_emac) {				\
@@ -1289,8 +1296,8 @@
 +				ALE_ALL_PORTS << priv->host_port,	\
 +				0, 0, 0);				\
 +		}							\
- 	} while (0)
- 
++	} while (0)
++
 +static inline int cpsw_get_slave_port(struct cpsw_priv *priv, u32 slave_num)
 +{
 +	if (priv->host_port == 0)
@@ -1298,11 +1305,10 @@
 +	else
 +		return slave_num;
 +}
-+
+ 
  static void cpsw_ndo_set_rx_mode(struct net_device *ndev)
  {
- 	struct cpsw_priv *priv = netdev_priv(ndev);
-@@ -344,8 +429,7 @@ static void cpsw_ndo_set_rx_mode(struct net_device *ndev)
+@@ -344,8 +429,7 @@ static void cpsw_ndo_set_rx_mode(struct
  
  		/* program multicast address list into ALE register */
  		netdev_for_each_mc_addr(ha, ndev) {
@@ -1312,7 +1318,7 @@
  		}
  	}
  }
-@@ -374,9 +458,12 @@ void cpsw_tx_handler(void *token, int len, int status)
+@@ -374,9 +458,12 @@ void cpsw_tx_handler(void *token, int le
  	struct net_device	*ndev = skb->dev;
  	struct cpsw_priv	*priv = netdev_priv(ndev);
  
@@ -1327,7 +1333,7 @@
  	priv->stats.tx_packets++;
  	priv->stats.tx_bytes += len;
  	dev_kfree_skb_any(skb);
-@@ -385,61 +472,69 @@ void cpsw_tx_handler(void *token, int len, int status)
+@@ -385,61 +472,69 @@ void cpsw_tx_handler(void *token, int le
  void cpsw_rx_handler(void *token, int len, int status)
  {
  	struct sk_buff		*skb = token;
@@ -1428,7 +1434,7 @@
  }
  
  static int cpsw_poll(struct napi_struct *napi, int budget)
-@@ -448,19 +543,27 @@ static int cpsw_poll(struct napi_struct *napi, int budget)
+@@ -448,19 +543,27 @@ static int cpsw_poll(struct napi_struct
  	int			num_tx, num_rx;
  
  	num_tx = cpdma_chan_process(priv->txch, 128);
@@ -1463,7 +1469,7 @@
  	return num_rx;
  }
  
-@@ -548,6 +651,77 @@ static void cpsw_adjust_link(struct net_device *ndev)
+@@ -548,6 +651,77 @@ static void cpsw_adjust_link(struct net_
  	}
  }
  
@@ -1541,7 +1547,7 @@
  static inline int __show_stat(char *buf, int maxlen, const char *name, u32 val)
  {
  	static char *leader = "........................................";
-@@ -559,6 +733,54 @@ static inline int __show_stat(char *buf, int maxlen, const char *name, u32 val)
+@@ -559,6 +733,54 @@ static inline int __show_stat(char *buf,
  				leader + strlen(name), val);
  }
  
@@ -1596,7 +1602,7 @@
  static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
  {
  	char name[32];
-@@ -588,11 +810,14 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
+@@ -588,11 +810,14 @@ static void cpsw_slave_open(struct cpsw_
  
  	slave_port = cpsw_get_slave_port(priv, slave->slave_num);
  
@@ -1614,7 +1620,7 @@
  	if (IS_ERR(slave->phy)) {
  		dev_err(priv->dev, "phy %s not found on slave %d\n",
  			slave->data->phy_id, slave->slave_num);
-@@ -604,14 +829,44 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
+@@ -604,14 +829,44 @@ static void cpsw_slave_open(struct cpsw_
  	}
  }
  
@@ -1660,7 +1666,7 @@
  
  	/* setup host port priority mapping */
  	__raw_writel(CPDMA_TX_PRIORITY_MAP,
-@@ -621,18 +876,32 @@ static void cpsw_init_host_port(struct cpsw_priv *priv)
+@@ -621,18 +876,32 @@ static void cpsw_init_host_port(struct c
  	cpsw_ale_control_set(priv->ale, priv->host_port,
  			     ALE_PORT_STATE, ALE_PORT_STATE_FORWARD);
  
@@ -1697,7 +1703,7 @@
  	netif_carrier_off(ndev);
  
  	pm_runtime_get_sync(&priv->pdev->dev);
-@@ -644,53 +913,81 @@ static int cpsw_ndo_open(struct net_device *ndev)
+@@ -644,53 +913,81 @@ static int cpsw_ndo_open(struct net_devi
  		 CPSW_RTL_VERSION(reg));
  
  	/* initialize host and slave ports */
@@ -1813,7 +1819,7 @@
  }
  
  static int cpsw_ndo_stop(struct net_device *ndev)
-@@ -701,12 +998,17 @@ static int cpsw_ndo_stop(struct net_device *ndev)
+@@ -701,12 +998,17 @@ static int cpsw_ndo_stop(struct net_devi
  	netif_stop_queue(priv->ndev);
  	napi_disable(&priv->napi);
  	netif_carrier_off(priv->ndev);
@@ -1835,7 +1841,7 @@
  	return 0;
  }
  
-@@ -724,18 +1026,24 @@ static netdev_tx_t cpsw_ndo_start_xmit(struct sk_buff *skb,
+@@ -724,18 +1026,24 @@ static netdev_tx_t cpsw_ndo_start_xmit(s
  		return NETDEV_TX_OK;
  	}
  
@@ -1863,7 +1869,7 @@
  	return NETDEV_TX_OK;
  fail:
  	priv->stats.tx_dropped++;
-@@ -770,10 +1078,10 @@ static void cpsw_ndo_change_rx_flags(struct net_device *ndev, int flags)
+@@ -770,10 +1078,10 @@ static void cpsw_ndo_change_rx_flags(str
  
  static void cpsw_hwtstamp_v1(struct cpsw_priv *priv)
  {
@@ -1876,7 +1882,7 @@
  		slave_write(slave, 0, CPSW1_TS_CTL);
  		return;
  	}
-@@ -781,10 +1089,10 @@ static void cpsw_hwtstamp_v1(struct cpsw_priv *priv)
+@@ -781,10 +1089,10 @@ static void cpsw_hwtstamp_v1(struct cpsw
  	seq_id = (30 << CPSW_V1_SEQ_ID_OFS_SHIFT) | ETH_P_1588;
  	ts_en = EVENT_MSG_BITS << CPSW_V1_MSG_TYPE_OFS;
  
@@ -1889,7 +1895,7 @@
  		ts_en |= CPSW_V1_TS_RX_EN;
  
  	slave_write(slave, ts_en, CPSW1_TS_CTL);
-@@ -793,16 +1101,21 @@ static void cpsw_hwtstamp_v1(struct cpsw_priv *priv)
+@@ -793,16 +1101,21 @@ static void cpsw_hwtstamp_v1(struct cpsw
  
  static void cpsw_hwtstamp_v2(struct cpsw_priv *priv)
  {
@@ -1914,7 +1920,7 @@
  		ctrl |= CTRL_RX_TS_BITS;
  
  	mtype = (30 << TS_SEQ_ID_OFFSET_SHIFT) | EVENT_MSG_BITS;
-@@ -815,7 +1128,7 @@ static void cpsw_hwtstamp_v2(struct cpsw_priv *priv)
+@@ -815,7 +1128,7 @@ static void cpsw_hwtstamp_v2(struct cpsw
  static int cpsw_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
  {
  	struct cpsw_priv *priv = netdev_priv(dev);
@@ -1923,7 +1929,7 @@
  	struct hwtstamp_config cfg;
  
  	if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
-@@ -879,14 +1192,26 @@ static int cpsw_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
+@@ -879,14 +1192,26 @@ static int cpsw_hwtstamp_ioctl(struct ne
  
  static int cpsw_ndo_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
  {
@@ -1952,7 +1958,7 @@
  }
  
  static void cpsw_ndo_tx_timeout(struct net_device *ndev)
-@@ -901,7 +1226,9 @@ static void cpsw_ndo_tx_timeout(struct net_device *ndev)
+@@ -901,7 +1226,9 @@ static void cpsw_ndo_tx_timeout(struct n
  	cpdma_chan_start(priv->txch);
  	cpdma_ctlr_int_ctrl(priv->dma, true);
  	cpsw_intr_enable(priv);
@@ -1963,7 +1969,7 @@
  }
  
  static struct net_device_stats *cpsw_ndo_get_stats(struct net_device *ndev)
-@@ -920,10 +1247,79 @@ static void cpsw_ndo_poll_controller(struct net_device *ndev)
+@@ -920,10 +1247,79 @@ static void cpsw_ndo_poll_controller(str
  	cpsw_interrupt(ndev->irq, priv);
  	cpdma_ctlr_int_ctrl(priv->dma, true);
  	cpsw_intr_enable(priv);
@@ -2044,7 +2050,7 @@
  static const struct net_device_ops cpsw_netdev_ops = {
  	.ndo_open		= cpsw_ndo_open,
  	.ndo_stop		= cpsw_ndo_stop,
-@@ -938,15 +1334,18 @@ static const struct net_device_ops cpsw_netdev_ops = {
+@@ -938,15 +1334,18 @@ static const struct net_device_ops cpsw_
  #ifdef CONFIG_NET_POLL_CONTROLLER
  	.ndo_poll_controller	= cpsw_ndo_poll_controller,
  #endif
@@ -2066,7 +2072,7 @@
  }
  
  static u32 cpsw_get_msglevel(struct net_device *ndev)
-@@ -974,7 +1373,7 @@ static int cpsw_get_ts_info(struct net_device *ndev,
+@@ -974,7 +1373,7 @@ static int cpsw_get_ts_info(struct net_d
  		SOF_TIMESTAMPING_RX_SOFTWARE |
  		SOF_TIMESTAMPING_SOFTWARE |
  		SOF_TIMESTAMPING_RAW_HARDWARE;
@@ -2075,7 +2081,7 @@
  	info->tx_types =
  		(1 << HWTSTAMP_TX_OFF) |
  		(1 << HWTSTAMP_TX_ON);
-@@ -993,12 +1392,39 @@ static int cpsw_get_ts_info(struct net_device *ndev,
+@@ -993,12 +1392,39 @@ static int cpsw_get_ts_info(struct net_d
  	return 0;
  }
  
@@ -2115,7 +2121,7 @@
  };
  
  static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_priv *priv,
-@@ -1011,6 +1437,7 @@ static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_priv *priv,
+@@ -1011,6 +1437,7 @@ static void cpsw_slave_init(struct cpsw_
  	slave->data	= data;
  	slave->regs	= regs + slave_reg_ofs;
  	slave->sliver	= regs + sliver_reg_ofs;
@@ -2123,7 +2129,7 @@
  }
  
  static int cpsw_probe_dt(struct cpsw_platform_data *data,
-@@ -1030,12 +1457,12 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1030,12 +1457,12 @@ static int cpsw_probe_dt(struct cpsw_pla
  	}
  	data->slaves = prop;
  
@@ -2139,7 +2145,7 @@
  
  	if (of_property_read_u32(node, "cpts_clock_mult", &prop)) {
  		pr_err("Missing cpts_clock_mult property in the DT.\n");
-@@ -1051,12 +1478,10 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1051,12 +1478,10 @@ static int cpsw_probe_dt(struct cpsw_pla
  	}
  	data->cpts_clock_shift = prop;
  
@@ -2155,7 +2161,7 @@
  
  	if (of_property_read_u32(node, "cpdma_channels", &prop)) {
  		pr_err("Missing cpdma_channels property in the DT.\n");
-@@ -1093,6 +1518,9 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1093,6 +1518,9 @@ static int cpsw_probe_dt(struct cpsw_pla
  	}
  	data->mac_control = prop;
  
@@ -2165,7 +2171,7 @@
  	/*
  	 * Populate all the child nodes here...
  	 */
-@@ -1111,7 +1539,7 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1111,7 +1539,7 @@ static int cpsw_probe_dt(struct cpsw_pla
  		struct platform_device *mdio;
  
  		parp = of_get_property(slave_node, "phy_id", &lenp);
@@ -2174,7 +2180,7 @@
  			pr_err("Missing slave[%d] phy_id property\n", i);
  			ret = -EINVAL;
  			goto error_ret;
-@@ -1126,6 +1554,18 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1126,6 +1554,18 @@ static int cpsw_probe_dt(struct cpsw_pla
  		if (mac_addr)
  			memcpy(slave_data->mac_addr, mac_addr, ETH_ALEN);
  
@@ -2193,7 +2199,7 @@
  		i++;
  	}
  
-@@ -1136,9 +1576,85 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1136,9 +1576,85 @@ error_ret:
  	return ret;
  }
  
@@ -2280,7 +2286,7 @@
  	struct net_device		*ndev;
  	struct cpsw_priv		*priv;
  	struct cpdma_params		dma_params;
-@@ -1162,6 +1678,11 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1162,6 +1678,11 @@ static int cpsw_probe(struct platform_de
  	priv->dev  = &ndev->dev;
  	priv->msg_enable = netif_msg_init(debug_level, CPSW_DEBUG);
  	priv->rx_packet_max = max(rx_packet_max, 128);
@@ -2292,7 +2298,7 @@
  
  	/*
  	 * This may be required here for child devices.
-@@ -1194,12 +1715,17 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1194,12 +1715,17 @@ static int cpsw_probe(struct platform_de
  	for (i = 0; i < data->slaves; i++)
  		priv->slaves[i].slave_num = i;
  
@@ -2310,7 +2316,7 @@
  
  	priv->cpsw_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  	if (!priv->cpsw_res) {
-@@ -1248,7 +1774,7 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1248,7 +1774,7 @@ static int cpsw_probe(struct platform_de
  	switch (priv->version) {
  	case CPSW_VERSION_1:
  		priv->host_port_regs = ss_regs + CPSW1_HOST_PORT_OFFSET;
@@ -2319,7 +2325,7 @@
  		dma_params.dmaregs   = ss_regs + CPSW1_CPDMA_OFFSET;
  		dma_params.txhdp     = ss_regs + CPSW1_STATERAM_OFFSET;
  		ale_params.ale_regs  = ss_regs + CPSW1_ALE_OFFSET;
-@@ -1259,7 +1785,7 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1259,7 +1785,7 @@ static int cpsw_probe(struct platform_de
  		break;
  	case CPSW_VERSION_2:
  		priv->host_port_regs = ss_regs + CPSW2_HOST_PORT_OFFSET;
@@ -2328,7 +2334,7 @@
  		dma_params.dmaregs   = ss_regs + CPSW2_CPDMA_OFFSET;
  		dma_params.txhdp     = ss_regs + CPSW2_STATERAM_OFFSET;
  		ale_params.ale_regs  = ss_regs + CPSW2_ALE_OFFSET;
-@@ -1341,12 +1867,12 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1341,12 +1867,12 @@ static int cpsw_probe(struct platform_de
  				goto clean_ale_ret;
  			}
  			priv->irqs_table[k] = i;
@@ -2343,7 +2349,7 @@
  
  	ndev->netdev_ops = &cpsw_netdev_ops;
  	SET_ETHTOOL_OPS(ndev, &cpsw_ethtool_ops);
-@@ -1361,17 +1887,26 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1361,17 +1887,26 @@ static int cpsw_probe(struct platform_de
  		goto clean_irq_ret;
  	}
  
@@ -2372,7 +2378,7 @@
  clean_ale_ret:
  	cpsw_ale_destroy(priv->ale);
  clean_dma_ret:
-@@ -1394,7 +1929,8 @@ static int cpsw_probe(struct platform_device *pdev)
+@@ -1394,7 +1929,8 @@ clean_slave_ret:
  	pm_runtime_disable(&pdev->dev);
  	kfree(priv->slaves);
  clean_ndev_ret:
@@ -2382,7 +2388,7 @@
  	return ret;
  }
  
-@@ -1402,12 +1938,17 @@ static int cpsw_remove(struct platform_device *pdev)
+@@ -1402,12 +1938,17 @@ static int cpsw_remove(struct platform_d
  {
  	struct net_device *ndev = platform_get_drvdata(pdev);
  	struct cpsw_priv *priv = netdev_priv(ndev);
@@ -2403,7 +2409,7 @@
  	cpsw_ale_destroy(priv->ale);
  	cpdma_chan_destroy(priv->txch);
  	cpdma_chan_destroy(priv->rxch);
-@@ -1421,8 +1962,10 @@ static int cpsw_remove(struct platform_device *pdev)
+@@ -1421,8 +1962,10 @@ static int cpsw_remove(struct platform_d
  	pm_runtime_disable(&pdev->dev);
  	clk_put(priv->clk);
  	kfree(priv->slaves);
@@ -2415,7 +2421,7 @@
  	return 0;
  }
  
-@@ -1458,6 +2001,7 @@ static const struct of_device_id cpsw_of_mtable[] = {
+@@ -1458,6 +2001,7 @@ static const struct of_device_id cpsw_of
  	{ .compatible = "ti,cpsw", },
  	{ /* sentinel */ },
  };
@@ -2423,11 +2429,9 @@
  
  static struct platform_driver cpsw_driver = {
  	.driver = {
-diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c
-index 0e9ccc2..7fa60d6 100644
 --- a/drivers/net/ethernet/ti/cpsw_ale.c
 +++ b/drivers/net/ethernet/ti/cpsw_ale.c
-@@ -148,7 +148,7 @@ static int cpsw_ale_write(struct cpsw_ale *ale, int idx, u32 *ale_entry)
+@@ -148,7 +148,7 @@ static int cpsw_ale_write(struct cpsw_al
  	return idx;
  }
  
@@ -2436,7 +2440,7 @@
  {
  	u32 ale_entry[ALE_ENTRY_WORDS];
  	int type, idx;
-@@ -160,6 +160,8 @@ static int cpsw_ale_match_addr(struct cpsw_ale *ale, u8 *addr)
+@@ -160,6 +160,8 @@ static int cpsw_ale_match_addr(struct cp
  		type = cpsw_ale_get_entry_type(ale_entry);
  		if (type != ALE_TYPE_ADDR && type != ALE_TYPE_VLAN_ADDR)
  			continue;
@@ -2445,7 +2449,7 @@
  		cpsw_ale_get_addr(ale_entry, entry_addr);
  		if (memcmp(entry_addr, addr, 6) == 0)
  			return idx;
-@@ -167,6 +169,22 @@ static int cpsw_ale_match_addr(struct cpsw_ale *ale, u8 *addr)
+@@ -167,6 +169,22 @@ static int cpsw_ale_match_addr(struct cp
  	return -ENOENT;
  }
  
@@ -2468,7 +2472,7 @@
  static int cpsw_ale_match_free(struct cpsw_ale *ale)
  {
  	u32 ale_entry[ALE_ENTRY_WORDS];
-@@ -274,19 +292,32 @@ int cpsw_ale_flush(struct cpsw_ale *ale, int port_mask)
+@@ -274,19 +292,32 @@ int cpsw_ale_flush(struct cpsw_ale *ale,
  	return 0;
  }
  
@@ -2504,7 +2508,7 @@
  	if (idx < 0)
  		idx = cpsw_ale_match_free(ale);
  	if (idx < 0)
-@@ -298,12 +329,13 @@ int cpsw_ale_add_ucast(struct cpsw_ale *ale, u8 *addr, int port, int flags)
+@@ -298,12 +329,13 @@ int cpsw_ale_add_ucast(struct cpsw_ale *
  	return 0;
  }
  
@@ -2520,7 +2524,7 @@
  	if (idx < 0)
  		return -ENOENT;
  
-@@ -313,18 +345,19 @@ int cpsw_ale_del_ucast(struct cpsw_ale *ale, u8 *addr, int port)
+@@ -313,18 +345,19 @@ int cpsw_ale_del_ucast(struct cpsw_ale *
  }
  
  int cpsw_ale_add_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
@@ -2544,7 +2548,7 @@
  	cpsw_ale_set_mcast_state(ale_entry, mcast_state);
  
  	mask = cpsw_ale_get_port_mask(ale_entry);
-@@ -342,12 +375,13 @@ int cpsw_ale_add_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask,
+@@ -342,12 +375,13 @@ int cpsw_ale_add_mcast(struct cpsw_ale *
  	return 0;
  }
  
@@ -2560,10 +2564,14 @@
  	if (idx < 0)
  		return -EINVAL;
  
-@@ -362,6 +396,55 @@ int cpsw_ale_del_mcast(struct cpsw_ale *ale, u8 *addr, int port_mask)
- 	return 0;
- }
+@@ -358,6 +392,55 @@ int cpsw_ale_del_mcast(struct cpsw_ale *
+ 	else
+ 		cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE);
  
++	cpsw_ale_write(ale, idx, ale_entry);
++	return 0;
++}
++
 +int cpsw_ale_add_vlan(struct cpsw_ale *ale, u16 vid, int port, int untag,
 +		      int reg_mcast, int unreg_mcast)
 +{
@@ -2609,15 +2617,9 @@
 +	else
 +		cpsw_ale_set_entry_type(ale_entry, ALE_TYPE_FREE);
 +
-+	cpsw_ale_write(ale, idx, ale_entry);
-+	return 0;
-+}
-+
- struct ale_control_info {
- 	const char	*name;
- 	int		offset, port_offset;
-diff --git a/drivers/net/ethernet/ti/cpsw_ale.h b/drivers/net/ethernet/ti/cpsw_ale.h
-index 2bd09cb..30daa12 100644
+ 	cpsw_ale_write(ale, idx, ale_entry);
+ 	return 0;
+ }
 --- a/drivers/net/ethernet/ti/cpsw_ale.h
 +++ b/drivers/net/ethernet/ti/cpsw_ale.h
 @@ -64,8 +64,14 @@ enum cpsw_ale_port_state {
@@ -2637,7 +2639,7 @@
  
  #define ALE_MCAST_FWD			0
  #define ALE_MCAST_BLOCK_LEARN_FWD	1
-@@ -81,11 +87,17 @@ void cpsw_ale_stop(struct cpsw_ale *ale);
+@@ -81,11 +87,17 @@ void cpsw_ale_stop(struct cpsw_ale *ale)
  int cpsw_ale_set_ageout(struct cpsw_ale *ale, int ageout);
  int cpsw_ale_flush(struct cpsw_ale *ale, int port_mask);
  int cpsw_ale_flush_multicast(struct cpsw_ale *ale, int port_mask);
@@ -2659,8 +2661,6 @@
  
  int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control);
  int cpsw_ale_control_set(struct cpsw_ale *ale, int port,
-diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c
-index 4995673..49dfd59 100644
 --- a/drivers/net/ethernet/ti/davinci_cpdma.c
 +++ b/drivers/net/ethernet/ti/davinci_cpdma.c
 @@ -20,6 +20,7 @@
@@ -2712,7 +2712,7 @@
  /*
   * Utility constructs for a cpdma descriptor pool.  Some devices (e.g. davinci
   * emac) have dedicated on-chip memory for these descriptors.  Some other
-@@ -217,17 +229,27 @@ desc_from_phys(struct cpdma_desc_pool *pool, dma_addr_t dma)
+@@ -217,17 +229,27 @@ desc_from_phys(struct cpdma_desc_pool *p
  }
  
  static struct cpdma_desc __iomem *
@@ -2744,7 +2744,7 @@
  		bitmap_set(pool->bitmap, index, num_desc);
  		desc = pool->iomap + pool->desc_size * index;
  		pool->used_desc++;
-@@ -291,14 +313,16 @@ int cpdma_ctlr_start(struct cpdma_ctlr *ctlr)
+@@ -291,14 +313,16 @@ int cpdma_ctlr_start(struct cpdma_ctlr *
  	}
  
  	if (ctlr->params.has_soft_reset) {
@@ -2764,7 +2764,7 @@
  	}
  
  	for (i = 0; i < ctlr->num_chan; i++) {
-@@ -439,10 +463,8 @@ int cpdma_ctlr_destroy(struct cpdma_ctlr *ctlr)
+@@ -439,10 +463,8 @@ int cpdma_ctlr_destroy(struct cpdma_ctlr
  	if (ctlr->state != CPDMA_STATE_IDLE)
  		cpdma_ctlr_stop(ctlr);
  
@@ -2777,7 +2777,7 @@
  
  	cpdma_desc_pool_destroy(ctlr->pool);
  	spin_unlock_irqrestore(&ctlr->lock, flags);
-@@ -473,11 +495,13 @@ int cpdma_ctlr_int_ctrl(struct cpdma_ctlr *ctlr, bool enable)
+@@ -473,11 +495,13 @@ int cpdma_ctlr_int_ctrl(struct cpdma_ctl
  	spin_unlock_irqrestore(&ctlr->lock, flags);
  	return 0;
  }
@@ -2793,7 +2793,7 @@
  
  struct cpdma_chan *cpdma_chan_create(struct cpdma_ctlr *ctlr, int chan_num,
  				     cpdma_handler_fn handler)
-@@ -652,7 +676,7 @@ static void __cpdma_chan_submit(struct cpdma_chan *chan,
+@@ -652,7 +676,7 @@ static void __cpdma_chan_submit(struct c
  }
  
  int cpdma_chan_submit(struct cpdma_chan *chan, void *token, void *data,
@@ -2802,7 +2802,7 @@
  {
  	struct cpdma_ctlr		*ctlr = chan->ctlr;
  	struct cpdma_desc __iomem	*desc;
-@@ -668,7 +692,7 @@ int cpdma_chan_submit(struct cpdma_chan *chan, void *token, void *data,
+@@ -668,7 +692,7 @@ int cpdma_chan_submit(struct cpdma_chan
  		goto unlock_ret;
  	}
  
@@ -2811,7 +2811,7 @@
  	if (!desc) {
  		chan->stats.desc_alloc_fail++;
  		ret = -ENOMEM;
-@@ -682,6 +706,7 @@ int cpdma_chan_submit(struct cpdma_chan *chan, void *token, void *data,
+@@ -682,6 +706,7 @@ int cpdma_chan_submit(struct cpdma_chan
  
  	buffer = dma_map_single(ctlr->dev, data, len, chan->dir);
  	mode = CPDMA_DESC_OWNER | CPDMA_DESC_SOP | CPDMA_DESC_EOP;
@@ -2819,7 +2819,7 @@
  
  	desc_write(desc, hw_next,   0);
  	desc_write(desc, hw_buffer, buffer);
-@@ -704,6 +729,29 @@ int cpdma_chan_submit(struct cpdma_chan *chan, void *token, void *data,
+@@ -704,6 +729,29 @@ unlock_ret:
  }
  EXPORT_SYMBOL_GPL(cpdma_chan_submit);
  
@@ -2849,7 +2849,7 @@
  static void __cpdma_chan_free(struct cpdma_chan *chan,
  			      struct cpdma_desc __iomem *desc,
  			      int outlen, int status)
-@@ -728,6 +776,7 @@ static int __cpdma_chan_process(struct cpdma_chan *chan)
+@@ -728,6 +776,7 @@ static int __cpdma_chan_process(struct c
  	struct cpdma_ctlr		*ctlr = chan->ctlr;
  	struct cpdma_desc __iomem	*desc;
  	int				status, outlen;
@@ -2857,7 +2857,7 @@
  	struct cpdma_desc_pool		*pool = ctlr->pool;
  	dma_addr_t			desc_dma;
  	unsigned long			flags;
-@@ -749,7 +798,8 @@ static int __cpdma_chan_process(struct cpdma_chan *chan)
+@@ -749,7 +798,8 @@ static int __cpdma_chan_process(struct c
  		status = -EBUSY;
  		goto unlock_ret;
  	}
@@ -2867,7 +2867,7 @@
  
  	chan->head = desc_from_phys(pool, desc_read(desc, hw_next));
  	chan_write(chan, cp, desc_dma);
-@@ -762,8 +812,12 @@ static int __cpdma_chan_process(struct cpdma_chan *chan)
+@@ -762,8 +812,12 @@ static int __cpdma_chan_process(struct c
  	}
  
  	spin_unlock_irqrestore(&chan->lock, flags);
@@ -2881,7 +2881,7 @@
  	return status;
  
  unlock_ret:
-@@ -822,7 +876,7 @@ int cpdma_chan_stop(struct cpdma_chan *chan)
+@@ -822,7 +876,7 @@ int cpdma_chan_stop(struct cpdma_chan *c
  	struct cpdma_desc_pool	*pool = ctlr->pool;
  	unsigned long		flags;
  	int			ret;
@@ -2890,7 +2890,7 @@
  
  	spin_lock_irqsave(&chan->lock, flags);
  	if (chan->state != CPDMA_STATE_ACTIVE) {
-@@ -837,14 +891,15 @@ int cpdma_chan_stop(struct cpdma_chan *chan)
+@@ -837,14 +891,15 @@ int cpdma_chan_stop(struct cpdma_chan *c
  	dma_reg_write(ctlr, chan->td, chan_linear(chan));
  
  	/* wait for teardown complete */
@@ -2910,15 +2910,13 @@
  	chan_write(chan, cp, CPDMA_TEARDOWN_VALUE);
  
  	/* handle completed packets */
-@@ -984,3 +1039,6 @@ int cpdma_control_set(struct cpdma_ctlr *ctlr, int control, int value)
+@@ -984,3 +1039,6 @@ unlock_ret:
  	spin_unlock_irqrestore(&ctlr->lock, flags);
  	return ret;
  }
 +EXPORT_SYMBOL_GPL(cpdma_control_set);
 +
 +MODULE_LICENSE("GPL");
-diff --git a/drivers/net/ethernet/ti/davinci_cpdma.h b/drivers/net/ethernet/ti/davinci_cpdma.h
-index afa19a0..86dee48 100644
 --- a/drivers/net/ethernet/ti/davinci_cpdma.h
 +++ b/drivers/net/ethernet/ti/davinci_cpdma.h
 @@ -24,6 +24,13 @@
@@ -2935,7 +2933,7 @@
  struct cpdma_params {
  	struct device		*dev;
  	void __iomem		*dmaregs;
-@@ -82,12 +89,13 @@ int cpdma_chan_dump(struct cpdma_chan *chan);
+@@ -82,12 +89,13 @@ int cpdma_chan_dump(struct cpdma_chan *c
  int cpdma_chan_get_stats(struct cpdma_chan *chan,
  			 struct cpdma_chan_stats *stats);
  int cpdma_chan_submit(struct cpdma_chan *chan, void *token, void *data,
@@ -2951,11 +2949,9 @@
  
  enum cpdma_control {
  	CPDMA_CMD_IDLE,			/* write-only */
-diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
-index 2a3e2c5..860e15d 100644
 --- a/drivers/net/ethernet/ti/davinci_emac.c
 +++ b/drivers/net/ethernet/ti/davinci_emac.c
-@@ -120,7 +120,6 @@ static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1";
+@@ -120,7 +120,6 @@ static const char emac_version_string[]
  #define EMAC_DEF_TX_CH			(0) /* Default 0th channel */
  #define EMAC_DEF_RX_CH			(0) /* Default 0th channel */
  #define EMAC_DEF_RX_NUM_DESC		(128)
@@ -2971,7 +2967,7 @@
  	const char *phy_id;
  #ifdef CONFIG_OF
  	struct device_node *phy_node;
-@@ -480,8 +478,8 @@ static void emac_dump_regs(struct emac_priv *priv)
+@@ -480,8 +478,8 @@ static void emac_dump_regs(struct emac_p
  static void emac_get_drvinfo(struct net_device *ndev,
  			     struct ethtool_drvinfo *info)
  {
@@ -2982,7 +2978,7 @@
  }
  
  /**
-@@ -1039,7 +1037,7 @@ static void emac_rx_handler(void *token, int len, int status)
+@@ -1039,7 +1037,7 @@ static void emac_rx_handler(void *token,
  
  recycle:
  	ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
@@ -2991,7 +2987,7 @@
  
  	WARN_ON(ret == -ENOMEM);
  	if (unlikely(ret < 0))
-@@ -1050,12 +1048,12 @@ static void emac_tx_handler(void *token, int len, int status)
+@@ -1050,12 +1048,12 @@ static void emac_tx_handler(void *token,
  {
  	struct sk_buff		*skb = token;
  	struct net_device	*ndev = skb->dev;
@@ -3008,7 +3004,7 @@
  	ndev->stats.tx_packets++;
  	ndev->stats.tx_bytes += len;
  	dev_kfree_skb_any(skb);
-@@ -1094,14 +1092,17 @@ static int emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
+@@ -1094,14 +1092,17 @@ static int emac_dev_xmit(struct sk_buff
  	skb_tx_timestamp(skb);
  
  	ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
@@ -3028,7 +3024,7 @@
  		netif_stop_queue(ndev);
  
  	return NETDEV_TX_OK;
-@@ -1264,7 +1265,6 @@ static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
+@@ -1264,7 +1265,6 @@ static int emac_dev_setmac_addr(struct n
  	/* Store mac addr in priv and rx channel and set it in EMAC hw */
  	memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
  	memcpy(ndev->dev_addr, sa->sa_data, ndev->addr_len);
@@ -3036,7 +3032,7 @@
  
  	/* MAC address is configured only after the interface is enabled. */
  	if (netif_running(ndev)) {
-@@ -1438,7 +1438,7 @@ static int emac_poll(struct napi_struct *napi, int budget)
+@@ -1438,7 +1438,7 @@ static int emac_poll(struct napi_struct
   * Polled functionality used by netconsole and others in non interrupt mode
   *
   */
@@ -3045,7 +3041,7 @@
  {
  	struct emac_priv *priv = netdev_priv(ndev);
  
-@@ -1558,7 +1558,7 @@ static int emac_dev_open(struct net_device *ndev)
+@@ -1558,7 +1558,7 @@ static int emac_dev_open(struct net_devi
  			break;
  
  		ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
@@ -3054,7 +3050,7 @@
  		if (WARN_ON(ret < 0))
  			break;
  	}
-@@ -1600,7 +1600,7 @@ static int emac_dev_open(struct net_device *ndev)
+@@ -1600,7 +1600,7 @@ static int emac_dev_open(struct net_devi
  
  	if (priv->phy_id && *priv->phy_id) {
  		priv->phydev = phy_connect(ndev, priv->phy_id,
@@ -3063,7 +3059,7 @@
  					   PHY_INTERFACE_MODE_MII);
  
  		if (IS_ERR(priv->phydev)) {
-@@ -1865,21 +1865,18 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -1865,21 +1865,18 @@ static int davinci_emac_probe(struct pla
  
  
  	/* obtain emac clock from kernel */
@@ -3088,7 +3084,7 @@
  
  	platform_set_drvdata(pdev, ndev);
  	priv = netdev_priv(ndev);
-@@ -1893,7 +1890,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -1893,7 +1890,7 @@ static int davinci_emac_probe(struct pla
  	if (!pdata) {
  		dev_err(&pdev->dev, "no platform data\n");
  		rc = -ENODEV;
@@ -3097,7 +3093,7 @@
  	}
  
  	/* MAC addr and PHY mask , RMII enable info from platform_data */
-@@ -1913,23 +1910,23 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -1913,23 +1910,23 @@ static int davinci_emac_probe(struct pla
  	if (!res) {
  		dev_err(&pdev->dev,"error getting res\n");
  		rc = -ENOENT;
@@ -3127,7 +3123,7 @@
  	}
  	priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
  	ndev->base_addr = (unsigned long)priv->remap_addr;
-@@ -1962,7 +1959,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -1962,7 +1959,7 @@ static int davinci_emac_probe(struct pla
  	if (!priv->dma) {
  		dev_err(&pdev->dev, "error initializing DMA\n");
  		rc = -ENOMEM;
@@ -3136,7 +3132,7 @@
  	}
  
  	priv->txchan = cpdma_chan_create(priv->dma, tx_chan_num(EMAC_DEF_TX_CH),
-@@ -1971,14 +1968,14 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -1971,14 +1968,14 @@ static int davinci_emac_probe(struct pla
  				       emac_rx_handler);
  	if (WARN_ON(!priv->txchan || !priv->rxchan)) {
  		rc = -ENOMEM;
@@ -3153,7 +3149,7 @@
  	}
  	ndev->irq = res->start;
  
-@@ -2000,7 +1997,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -2000,7 +1997,7 @@ static int davinci_emac_probe(struct pla
  	if (rc) {
  		dev_err(&pdev->dev, "error in register_netdev\n");
  		rc = -ENODEV;
@@ -3162,7 +3158,7 @@
  	}
  
  
-@@ -2015,20 +2012,14 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -2015,20 +2012,14 @@ static int davinci_emac_probe(struct pla
  
  	return 0;
  
@@ -3185,7 +3181,7 @@
  	return rc;
  }
  
-@@ -2041,14 +2032,12 @@ static int davinci_emac_probe(struct platform_device *pdev)
+@@ -2041,14 +2032,12 @@ no_ndev:
   */
  static int davinci_emac_remove(struct platform_device *pdev)
  {
@@ -3200,7 +3196,7 @@
  
  	if (priv->txchan)
  		cpdma_chan_destroy(priv->txchan);
-@@ -2056,10 +2045,7 @@ static int davinci_emac_remove(struct platform_device *pdev)
+@@ -2056,10 +2045,7 @@ static int davinci_emac_remove(struct pl
  		cpdma_chan_destroy(priv->rxchan);
  	cpdma_ctlr_destroy(priv->dma);
  
@@ -3211,11 +3207,9 @@
  	free_netdev(ndev);
  
  	return 0;
-diff --git a/drivers/net/ethernet/ti/davinci_mdio.c b/drivers/net/ethernet/ti/davinci_mdio.c
-index cca2550..12aec17 100644
 --- a/drivers/net/ethernet/ti/davinci_mdio.c
 +++ b/drivers/net/ethernet/ti/davinci_mdio.c
-@@ -320,10 +320,8 @@ static int davinci_mdio_probe(struct platform_device *pdev)
+@@ -320,10 +320,8 @@ static int davinci_mdio_probe(struct pla
  	int ret, addr;
  
  	data = kzalloc(sizeof(*data), GFP_KERNEL);
@@ -3227,7 +3221,7 @@
  
  	data->bus = mdiobus_alloc();
  	if (!data->bus) {
-@@ -487,6 +485,7 @@ static const struct of_device_id davinci_mdio_of_mtable[] = {
+@@ -487,6 +485,7 @@ static const struct of_device_id davinci
  	{ .compatible = "ti,davinci_mdio", },
  	{ /* sentinel */ },
  };
@@ -3235,11 +3229,9 @@
  
  static struct platform_driver davinci_mdio_driver = {
  	.driver = {
-diff --git a/drivers/net/ethernet/ti/tlan.c b/drivers/net/ethernet/ti/tlan.c
-index 2272538..60c400f 100644
 --- a/drivers/net/ethernet/ti/tlan.c
 +++ b/drivers/net/ethernet/ti/tlan.c
-@@ -320,6 +320,7 @@ static void tlan_remove_one(struct pci_dev *pdev)
+@@ -320,6 +320,7 @@ static void tlan_remove_one(struct pci_d
  	free_netdev(dev);
  
  	pci_set_drvdata(pdev, NULL);
@@ -3247,7 +3239,7 @@
  }
  
  static void tlan_start(struct net_device *dev)
-@@ -1911,10 +1912,8 @@ static void tlan_reset_lists(struct net_device *dev)
+@@ -1911,10 +1912,8 @@ static void tlan_reset_lists(struct net_
  		list->frame_size = TLAN_MAX_FRAME_SIZE;
  		list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER;
  		skb = netdev_alloc_skb_ip_align(dev, TLAN_MAX_FRAME_SIZE + 5);
@@ -3259,8 +3251,6 @@
  
  		list->buffer[0].address = pci_map_single(priv->pci_dev,
  							 skb->data,
-diff --git a/include/linux/platform_data/cpsw.h b/include/linux/platform_data/cpsw.h
-index 24368a2..bb3cd58 100644
 --- a/include/linux/platform_data/cpsw.h
 +++ b/include/linux/platform_data/cpsw.h
 @@ -21,6 +21,8 @@ struct cpsw_slave_data {
diff --git a/patches/cpsw-net-cpsw-Use-fallback-for-active_slave.patch b/patches/cpsw-net-cpsw-Use-fallback-for-active_slave.patch
index 5f607a9..3b4a69b 100644
--- a/patches/cpsw-net-cpsw-Use-fallback-for-active_slave.patch
+++ b/patches/cpsw-net-cpsw-Use-fallback-for-active_slave.patch
@@ -11,11 +11,9 @@
  drivers/net/ethernet/ti/cpsw.c |    8 ++++++--
  1 file changed, 6 insertions(+), 2 deletions(-)
 
-diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
-index 1b2126d..4701ab3 100644
 --- a/drivers/net/ethernet/ti/cpsw.c
 +++ b/drivers/net/ethernet/ti/cpsw.c
-@@ -1424,8 +1424,12 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1467,8 +1467,12 @@ static int cpsw_probe_dt(struct cpsw_pla
  
  	if (of_property_read_u32(node, "active_slave", &prop)) {
  		pr_err("Missing active_slave property in the DT.\n");
@@ -30,6 +28,3 @@
  	}
  	data->active_slave = prop;
  
--- 
-1.7.10.4
-
diff --git a/patches/cpsw-net-cpsw-use-a-lock-around-source-testing.patch b/patches/cpsw-net-cpsw-use-a-lock-around-source-testing.patch
index cefdc4d..635b5a5 100644
--- a/patches/cpsw-net-cpsw-use-a-lock-around-source-testing.patch
+++ b/patches/cpsw-net-cpsw-use-a-lock-around-source-testing.patch
@@ -14,11 +14,9 @@
  drivers/net/ethernet/ti/cpsw.c |   12 ++++++++++--
  1 file changed, 10 insertions(+), 2 deletions(-)
 
-diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
-index 2633be6..ef942cd 100644
 --- a/drivers/net/ethernet/ti/cpsw.c
 +++ b/drivers/net/ethernet/ti/cpsw.c
-@@ -490,7 +490,7 @@ void cpsw_rx_handler(void *token, int len, int status)
+@@ -490,7 +490,7 @@ void cpsw_rx_handler(void *token, int le
  		skb_put(skb, len);
  		cpts_rx_timestamp(priv->cpts, skb);
  		skb->protocol = eth_type_trans(skb, ndev);
@@ -27,7 +25,7 @@
  		priv->stats.rx_bytes += len;
  		priv->stats.rx_packets++;
  	} else {
-@@ -507,19 +507,24 @@ void cpsw_rx_handler(void *token, int len, int status)
+@@ -507,19 +507,24 @@ void cpsw_rx_handler(void *token, int le
  static irqreturn_t cpsw_interrupt(int irq, void *dev_id)
  {
  	struct cpsw_priv *priv = dev_id;
@@ -53,7 +51,7 @@
  
  	if (netif_running(priv->ndev)) {
  		napi_schedule(&priv->napi);
-@@ -541,7 +546,9 @@ static int cpsw_poll(struct napi_struct *napi, int budget)
+@@ -541,7 +546,9 @@ static int cpsw_poll(struct napi_struct
  {
  	struct cpsw_priv	*priv = napi_to_priv(napi);
  	int			num_tx, num_rx;
@@ -63,7 +61,7 @@
  	num_tx = cpdma_chan_process(priv->txch, 128);
  	if (num_tx)
  		cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX);
-@@ -559,6 +566,7 @@ static int cpsw_poll(struct napi_struct *napi, int budget)
+@@ -559,6 +566,7 @@ static int cpsw_poll(struct napi_struct
  			prim_cpsw->irq_enabled = true;
  		}
  	}
@@ -71,6 +69,3 @@
  
  	if (num_rx || num_tx)
  		cpsw_dbg(priv, intr, "poll %d rx, %d tx pkts\n",
--- 
-1.7.10.4
-
diff --git a/patches/cpsw-revert-stable-patches.patch b/patches/cpsw-revert-stable-patches.patch
index f12db86..c4bbcef 100644
--- a/patches/cpsw-revert-stable-patches.patch
+++ b/patches/cpsw-revert-stable-patches.patch
@@ -5,11 +5,14 @@
 
 Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
 ---
-diff --git b/drivers/net/ethernet/ti/cpsw.c a/drivers/net/ethernet/ti/cpsw.c
-index 3b1be52..40aff68 100644
---- b/drivers/net/ethernet/ti/cpsw.c
-+++ a/drivers/net/ethernet/ti/cpsw.c
-@@ -375,7 +375,7 @@ void cpsw_tx_handler(void *token, int len, int status)
+---
+ drivers/net/ethernet/ti/cpsw.c         |    4 ++--
+ drivers/net/ethernet/ti/davinci_emac.c |    2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/ti/cpsw.c
++++ b/drivers/net/ethernet/ti/cpsw.c
+@@ -375,7 +375,7 @@ void cpsw_tx_handler(void *token, int le
  	struct cpsw_priv	*priv = netdev_priv(ndev);
  
  	if (unlikely(netif_queue_stopped(ndev)))
@@ -18,7 +21,7 @@
  	cpts_tx_timestamp(&priv->cpts, skb);
  	priv->stats.tx_packets++;
  	priv->stats.tx_bytes += len;
-@@ -1111,7 +1111,7 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
+@@ -1111,7 +1111,7 @@ static int cpsw_probe_dt(struct cpsw_pla
  		struct platform_device *mdio;
  
  		parp = of_get_property(slave_node, "phy_id", &lenp);
@@ -27,11 +30,9 @@
  			pr_err("Missing slave[%d] phy_id property\n", i);
  			ret = -EINVAL;
  			goto error_ret;
-diff --git b/drivers/net/ethernet/ti/davinci_emac.c a/drivers/net/ethernet/ti/davinci_emac.c
-index 4ebcb24..2a3e2c5 100644
---- b/drivers/net/ethernet/ti/davinci_emac.c
-+++ a/drivers/net/ethernet/ti/davinci_emac.c
-@@ -1055,7 +1055,7 @@ static void emac_tx_handler(void *token, int len, int status)
+--- a/drivers/net/ethernet/ti/davinci_emac.c
++++ b/drivers/net/ethernet/ti/davinci_emac.c
+@@ -1055,7 +1055,7 @@ static void emac_tx_handler(void *token,
  	atomic_dec(&priv->cur_tx);
  
  	if (unlikely(netif_queue_stopped(ndev)))
diff --git a/patches/drm-i915-move-i915_trace_irq_get-out-of-the-tracing-.patch b/patches/drm-i915-move-i915_trace_irq_get-out-of-the-tracing-.patch
index ec04603..ace4f87 100644
--- a/patches/drm-i915-move-i915_trace_irq_get-out-of-the-tracing-.patch
+++ b/patches/drm-i915-move-i915_trace_irq_get-out-of-the-tracing-.patch
@@ -5,19 +5,31 @@
  macro
 
 Reported-by: Joakim Hernberg <jbh@alchemy.lu>
+[C.Emde@osadl.org: pull out seqno and define it so it compiled]
 Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
 ---
- drivers/gpu/drm/i915/i915_gem_execbuffer.c |    1 +
+ drivers/gpu/drm/i915/i915_gem_execbuffer.c |    5 ++++-
  drivers/gpu/drm/i915/i915_trace.h          |    1 -
  drivers/gpu/drm/i915/intel_ringbuffer.h    |    2 ++
- 3 files changed, 3 insertions(+), 1 deletion(-)
+ 3 files changed, 6 insertions(+), 2 deletions(-)
 
 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-@@ -1069,6 +1069,7 @@ i915_gem_do_execbuffer(struct drm_device
+@@ -814,6 +814,7 @@ i915_gem_do_execbuffer(struct drm_device
+ 	struct intel_ring_buffer *ring;
+ 	u32 ctx_id = i915_execbuffer2_get_context_id(*args);
+ 	u32 exec_start, exec_len;
++	u32 seqno;
+ 	u32 mask;
+ 	u32 flags;
+ 	int ret, mode, i;
+@@ -1068,7 +1069,9 @@ i915_gem_do_execbuffer(struct drm_device
+ 			goto err;
  	}
  
- 	trace_i915_gem_ring_dispatch(ring, intel_ring_get_seqno(ring), flags);
+-	trace_i915_gem_ring_dispatch(ring, intel_ring_get_seqno(ring), flags);
++	seqno = intel_ring_get_seqno(ring);
++	trace_i915_gem_ring_dispatch(ring, seqno, flags);
 +	i915_trace_irq_get(ring, seqno);
  
  	i915_gem_execbuffer_move_to_active(&objects, ring);
diff --git a/patches/fs-fscache-remove-spin_lock-from-the-condition-in-wh.patch b/patches/fs-fscache-remove-spin_lock-from-the-condition-in-wh.patch
index fb97bd5..e02077b 100644
--- a/patches/fs-fscache-remove-spin_lock-from-the-condition-in-wh.patch
+++ b/patches/fs-fscache-remove-spin_lock-from-the-condition-in-wh.patch
@@ -13,11 +13,9 @@
  fs/fscache/page.c |   13 ++++++++-----
  1 file changed, 8 insertions(+), 5 deletions(-)
 
-diff --git a/fs/fscache/page.c b/fs/fscache/page.c
-index ff000e5..c84696c 100644
 --- a/fs/fscache/page.c
 +++ b/fs/fscache/page.c
-@@ -796,11 +796,13 @@ void fscache_invalidate_writes(struct fscache_cookie *cookie)
+@@ -796,11 +796,13 @@ void fscache_invalidate_writes(struct fs
  
  	_enter("");
  
@@ -36,7 +34,7 @@
  		for (i = n - 1; i >= 0; i--) {
  			page = results[i];
  			radix_tree_delete(&cookie->stores, page->index);
-@@ -810,6 +812,7 @@ void fscache_invalidate_writes(struct fscache_cookie *cookie)
+@@ -810,6 +812,7 @@ void fscache_invalidate_writes(struct fs
  
  		for (i = n - 1; i >= 0; i--)
  			page_cache_release(results[i]);
@@ -44,6 +42,3 @@
  	}
  
  	spin_unlock(&cookie->stores_lock);
--- 
-1.7.10.4
-
diff --git a/patches/localversion.patch b/patches/localversion.patch
index e5fcadf..9dfd443 100644
--- a/patches/localversion.patch
+++ b/patches/localversion.patch
@@ -12,4 +12,4 @@
 --- /dev/null
 +++ b/localversion-rt
 @@ -0,0 +1 @@
-+-rt5
++-rt6
diff --git a/patches/mm-convert-swap-to-percpu-locked.patch b/patches/mm-convert-swap-to-percpu-locked.patch
index 0e8ac43..661de88 100644
--- a/patches/mm-convert-swap-to-percpu-locked.patch
+++ b/patches/mm-convert-swap-to-percpu-locked.patch
@@ -24,7 +24,7 @@
  static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);
  
 +static DEFINE_LOCAL_IRQ_LOCK(rotate_lock);
-+static DEFINE_LOCAL_IRQ_LOCK(swap_lock);
++static DEFINE_LOCAL_IRQ_LOCK(swapvec_lock);
 +
  /*
   * This path almost never happens for VM activity - pages are normally
@@ -48,14 +48,14 @@
  {
  	if (PageLRU(page) && !PageActive(page) && !PageUnevictable(page)) {
 -		struct pagevec *pvec = &get_cpu_var(activate_page_pvecs);
-+		struct pagevec *pvec = &get_locked_var(swap_lock,
++		struct pagevec *pvec = &get_locked_var(swapvec_lock,
 +						       activate_page_pvecs);
  
  		page_cache_get(page);
  		if (!pagevec_add(pvec, page))
  			pagevec_lru_move_fn(pvec, __activate_page, NULL);
 -		put_cpu_var(activate_page_pvecs);
-+		put_locked_var(swap_lock, activate_page_pvecs);
++		put_locked_var(swapvec_lock, activate_page_pvecs);
  	}
  }
  
@@ -64,14 +64,14 @@
  void __lru_cache_add(struct page *page, enum lru_list lru)
  {
 -	struct pagevec *pvec = &get_cpu_var(lru_add_pvecs)[lru];
-+	struct pagevec *pvec = &get_locked_var(swap_lock, lru_add_pvecs)[lru];
++	struct pagevec *pvec = &get_locked_var(swapvec_lock, lru_add_pvecs)[lru];
  
  	page_cache_get(page);
  	if (!pagevec_space(pvec))
  		__pagevec_lru_add(pvec, lru);
  	pagevec_add(pvec, page);
 -	put_cpu_var(lru_add_pvecs);
-+	put_locked_var(swap_lock, lru_add_pvecs);
++	put_locked_var(swapvec_lock, lru_add_pvecs);
  }
  EXPORT_SYMBOL(__lru_cache_add);
  
@@ -92,13 +92,13 @@
  
  	if (likely(get_page_unless_zero(page))) {
 -		struct pagevec *pvec = &get_cpu_var(lru_deactivate_pvecs);
-+		struct pagevec *pvec = &get_locked_var(swap_lock,
++		struct pagevec *pvec = &get_locked_var(swapvec_lock,
 +						       lru_deactivate_pvecs);
  
  		if (!pagevec_add(pvec, page))
  			pagevec_lru_move_fn(pvec, lru_deactivate_fn, NULL);
 -		put_cpu_var(lru_deactivate_pvecs);
-+		put_locked_var(swap_lock, lru_deactivate_pvecs);
++		put_locked_var(swapvec_lock, lru_deactivate_pvecs);
  	}
  }
  
@@ -106,8 +106,8 @@
  {
 -	lru_add_drain_cpu(get_cpu());
 -	put_cpu();
-+	lru_add_drain_cpu(local_lock_cpu(swap_lock));
-+	local_unlock_cpu(swap_lock);
++	lru_add_drain_cpu(local_lock_cpu(swapvec_lock));
++	local_unlock_cpu(swapvec_lock);
  }
  
  static void lru_add_drain_per_cpu(struct work_struct *dummy)
diff --git a/patches/powerpc-preempt-lazy-support.patch b/patches/powerpc-preempt-lazy-support.patch
index 1e0c13f..d8fe3d0 100644
--- a/patches/powerpc-preempt-lazy-support.patch
+++ b/patches/powerpc-preempt-lazy-support.patch
@@ -8,8 +8,8 @@
  arch/powerpc/include/asm/thread_info.h |   10 ++++++++--
  arch/powerpc/kernel/asm-offsets.c      |    1 +
  arch/powerpc/kernel/entry_32.S         |   17 ++++++++++++-----
- arch/powerpc/kernel/entry_64.S         |   12 +++++++++---
- 5 files changed, 31 insertions(+), 10 deletions(-)
+ arch/powerpc/kernel/entry_64.S         |   14 +++++++++++---
+ 5 files changed, 33 insertions(+), 10 deletions(-)
 
 --- a/arch/powerpc/Kconfig
 +++ b/arch/powerpc/Kconfig
@@ -137,11 +137,13 @@
  	beq	1f
  	bl	.restore_interrupts
  	bl	.schedule
-@@ -642,10 +642,16 @@ resume_kernel:
+@@ -642,10 +642,18 @@ resume_kernel:
  
  #ifdef CONFIG_PREEMPT
  	/* Check if we need to preempt */
 +	lwz	r8,TI_PREEMPT(r9)
++	cmpwi	0,r8,0		/* if non-zero, just restore regs and return */
++	bne	restore
  	andi.	r0,r4,_TIF_NEED_RESCHED
 +	bne+	check_count
 +
@@ -155,7 +157,7 @@
  	cmpwi	cr1,r8,0
  	ld	r0,SOFTE(r1)
  	cmpdi	r0,0
-@@ -662,7 +668,7 @@ resume_kernel:
+@@ -662,7 +670,7 @@ resume_kernel:
  	/* Re-test flags and eventually loop */
  	CURRENT_THREAD_INFO(r9, r1)
  	ld	r4,TI_FLAGS(r9)
diff --git a/patches/rt-add-rt-spinlock-to-headers.patch b/patches/rt-add-rt-spinlock-to-headers.patch
index 40ea9a5..1117bfb 100644
--- a/patches/rt-add-rt-spinlock-to-headers.patch
+++ b/patches/rt-add-rt-spinlock-to-headers.patch
@@ -4,10 +4,10 @@
 
 Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
 ---
- include/linux/rwlock_types_rt.h   |   33 +++++++++++++++++++++++++
- include/linux/spinlock_types.h    |   11 ++++++--
- include/linux/spinlock_types_rt.h |   49 ++++++++++++++++++++++++++++++++++++++
- 3 files changed, 90 insertions(+), 3 deletions(-)
+ include/linux/rwlock_types_rt.h   |   33 ++++++++++++++++++++++++
+ include/linux/spinlock_types.h    |   11 +++++---
+ include/linux/spinlock_types_rt.h |   51 ++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 92 insertions(+), 3 deletions(-)
 
 --- /dev/null
 +++ b/include/linux/rwlock_types_rt.h
@@ -66,7 +66,7 @@
  #endif /* __LINUX_SPINLOCK_TYPES_H */
 --- /dev/null
 +++ b/include/linux/spinlock_types_rt.h
-@@ -0,0 +1,49 @@
+@@ -0,0 +1,51 @@
 +#ifndef __LINUX_SPINLOCK_TYPES_RT_H
 +#define __LINUX_SPINLOCK_TYPES_RT_H
 +
@@ -74,6 +74,8 @@
 +#error "Do not include directly. Include spinlock_types.h instead"
 +#endif
 +
++#include <linux/cache.h>
++
 +/*
 + * PREEMPT_RT: spinlocks - an RT mutex plus lock-break field:
 + */
diff --git a/patches/sched-better-debug-output-for-might-sleep.patch b/patches/sched-better-debug-output-for-might-sleep.patch
index ffb507e..3268af3 100644
--- a/patches/sched-better-debug-output-for-might-sleep.patch
+++ b/patches/sched-better-debug-output-for-might-sleep.patch
@@ -45,7 +45,7 @@
  	print_modules();
  	if (irqs_disabled())
  		print_irqtrace_events(prev);
-+#ifdef DEBUG_PREEMPT
++#ifdef CONFIG_DEBUG_PREEMPT
 +	if (in_atomic_preempt_off()) {
 +		pr_err("Preemption disabled at:");
 +		print_ip_sym(current->preempt_disable_ip);
@@ -59,7 +59,7 @@
  	debug_show_held_locks(current);
  	if (irqs_disabled())
  		print_irqtrace_events(current);
-+#ifdef DEBUG_PREEMPT
++#ifdef CONFIG_DEBUG_PREEMPT
 +	if (!preempt_count_equals(preempt_offset)) {
 +		pr_err("Preemption disabled at:");
 +		print_ip_sym(current->preempt_disable_ip);
diff --git a/patches/sched-fix-the-wrong-macro-name-of-CONFIG_DEBUG_PREEM.patch b/patches/sched-fix-the-wrong-macro-name-of-CONFIG_DEBUG_PREEM.patch
deleted file mode 100644
index 5d99014..0000000
--- a/patches/sched-fix-the-wrong-macro-name-of-CONFIG_DEBUG_PREEM.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 9c62439e3ede6a24f325a9cf88bddedc6d8e4ef5 Mon Sep 17 00:00:00 2001
-From: Qiang Huang <h.huangqiang@huawei.com>
-Date: Mon, 8 Apr 2013 19:47:29 +0800
-Subject: [PATCH 3/5] sched: fix the wrong macro name of CONFIG_DEBUG_PREEMPT
-
-Might be a typo, would cause some debug code never be run.
-
-Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- kernel/sched/core.c |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/kernel/sched/core.c
-+++ b/kernel/sched/core.c
-@@ -2885,7 +2885,7 @@ static noinline void __schedule_bug(stru
- 	print_modules();
- 	if (irqs_disabled())
- 		print_irqtrace_events(prev);
--#ifdef DEBUG_PREEMPT
-+#ifdef CONFIG_DEBUG_PREEMPT
- 	if (in_atomic_preempt_off()) {
- 		pr_err("Preemption disabled at:");
- 		print_ip_sym(current->preempt_disable_ip);
-@@ -7412,7 +7412,7 @@ void __might_sleep(const char *file, int
- 	debug_show_held_locks(current);
- 	if (irqs_disabled())
- 		print_irqtrace_events(current);
--#ifdef DEBUG_PREEMPT
-+#ifdef CONFIG_DEBUG_PREEMPT
- 	if (!preempt_count_equals(preempt_offset)) {
- 		pr_err("Preemption disabled at:");
- 		print_ip_sym(current->preempt_disable_ip);
diff --git a/patches/series b/patches/series
index b079da0..53490eb 100644
--- a/patches/series
+++ b/patches/series
@@ -276,7 +276,6 @@
 
 # MM SWAP
 mm-convert-swap-to-percpu-locked.patch
-swap-Use-unique-local-lock-name-for-swap_lock.patch
 
 # MM vmstat
 mm-make-vmstat-rt-aware.patch
@@ -411,7 +410,6 @@
 spinlock-types-separate-raw.patch
 rtmutex-avoid-include-hell.patch
 rt-add-rt-spinlock-to-headers.patch
-spinlock-include-cache.h.patch
 rt-add-rt-to-mutex-headers.patch
 rwsem-add-rt-variant.patch
 rt-add-rt-locks.patch
@@ -607,7 +605,6 @@
 
 # Enable full RT
 powerpc-preempt-lazy-support.patch
-powerpc-64bit-PREEMPT_RT-Check-preempt_count-before-.patch
 wait-simple-implementation.patch
 rcutiny-use-simple-waitqueue.patch
 treercu-use-simple-waitqueue.patch
@@ -624,7 +621,6 @@
 might-sleep-check-for-idle.patch
 wait-simple-rework-for-completions.patch
 completion-use-simple-wait-queues.patch
-sched-fix-the-wrong-macro-name-of-CONFIG_DEBUG_PREEM.patch
 
 kconfig-disable-a-few-options-rt.patch
 kconfig-preempt-rt-full.patch
diff --git a/patches/spinlock-include-cache.h.patch b/patches/spinlock-include-cache.h.patch
deleted file mode 100644
index c7560ac..0000000
--- a/patches/spinlock-include-cache.h.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 30202d1996c96177fd9eeb5efc2d1869b7939a75 Mon Sep 17 00:00:00 2001
-From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Date: Thu, 25 Apr 2013 18:31:39 +0200
-Subject: [PATCH 2/5] spinlock: include cache.h
-
-It is used by DEFINE_SPINLOCK
-
-Reported-by: <Arpit Goel <arpitgoel@gmail.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/spinlock_types_rt.h |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/include/linux/spinlock_types_rt.h
-+++ b/include/linux/spinlock_types_rt.h
-@@ -5,6 +5,8 @@
- #error "Do not include directly. Include spinlock_types.h instead"
- #endif
- 
-+#include <linux/cache.h>
-+
- /*
-  * PREEMPT_RT: spinlocks - an RT mutex plus lock-break field:
-  */
diff --git a/patches/swap-Use-unique-local-lock-name-for-swap_lock.patch b/patches/swap-Use-unique-local-lock-name-for-swap_lock.patch
deleted file mode 100644
index b3a2284..0000000
--- a/patches/swap-Use-unique-local-lock-name-for-swap_lock.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 1288d422e020182955745ee09e26d4e6174923c0 Mon Sep 17 00:00:00 2001
-From: Steven Rostedt <rostedt@goodmis.org>
-Date: Tue, 23 Apr 2013 16:10:00 -0400
-Subject: [PATCH] swap: Use unique local lock name for swap_lock
-
->From lib/Kconfig.debug on CONFIG_FORCE_WEAK_PER_CPU:
-
----
-s390 and alpha require percpu variables in modules to be
-defined weak to work around addressing range issue which
-puts the following two restrictions on percpu variable
-definitions.
-
-1. percpu symbols must be unique whether static or not
-2. percpu variables can't be defined inside a function
-
-To ensure that generic code follows the above rules, this
-option forces all percpu variables to be defined as weak.
----
-
-The addition of the local IRQ swap_lock in mm/swap.c broke this config
-as the name "swap_lock" is used through out the kernel. Just do a "git
-grep swap_lock" to see, and the new swap_lock is a local lock which
-defines the swap_lock for per_cpu.
-
-The fix was to rename swap_lock to swapvec_lock which keeps it unique.
-
-Reported-by: Mike Galbraith <bitbucket@online.de>
-Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- mm/swap.c |   18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
---- a/mm/swap.c
-+++ b/mm/swap.c
-@@ -42,7 +42,7 @@ static DEFINE_PER_CPU(struct pagevec, lr
- static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs);
- 
- static DEFINE_LOCAL_IRQ_LOCK(rotate_lock);
--static DEFINE_LOCAL_IRQ_LOCK(swap_lock);
-+static DEFINE_LOCAL_IRQ_LOCK(swapvec_lock);
- 
- /*
-  * This path almost never happens for VM activity - pages are normally
-@@ -407,13 +407,13 @@ static void activate_page_drain(int cpu)
- void activate_page(struct page *page)
- {
- 	if (PageLRU(page) && !PageActive(page) && !PageUnevictable(page)) {
--		struct pagevec *pvec = &get_locked_var(swap_lock,
-+		struct pagevec *pvec = &get_locked_var(swapvec_lock,
- 						       activate_page_pvecs);
- 
- 		page_cache_get(page);
- 		if (!pagevec_add(pvec, page))
- 			pagevec_lru_move_fn(pvec, __activate_page, NULL);
--		put_locked_var(swap_lock, activate_page_pvecs);
-+		put_locked_var(swapvec_lock, activate_page_pvecs);
- 	}
- }
- 
-@@ -461,13 +461,13 @@ EXPORT_SYMBOL(mark_page_accessed);
-  */
- void __lru_cache_add(struct page *page, enum lru_list lru)
- {
--	struct pagevec *pvec = &get_locked_var(swap_lock, lru_add_pvecs)[lru];
-+	struct pagevec *pvec = &get_locked_var(swapvec_lock, lru_add_pvecs)[lru];
- 
- 	page_cache_get(page);
- 	if (!pagevec_space(pvec))
- 		__pagevec_lru_add(pvec, lru);
- 	pagevec_add(pvec, page);
--	put_locked_var(swap_lock, lru_add_pvecs);
-+	put_locked_var(swapvec_lock, lru_add_pvecs);
- }
- EXPORT_SYMBOL(__lru_cache_add);
- 
-@@ -632,19 +632,19 @@ void deactivate_page(struct page *page)
- 		return;
- 
- 	if (likely(get_page_unless_zero(page))) {
--		struct pagevec *pvec = &get_locked_var(swap_lock,
-+		struct pagevec *pvec = &get_locked_var(swapvec_lock,
- 						       lru_deactivate_pvecs);
- 
- 		if (!pagevec_add(pvec, page))
- 			pagevec_lru_move_fn(pvec, lru_deactivate_fn, NULL);
--		put_locked_var(swap_lock, lru_deactivate_pvecs);
-+		put_locked_var(swapvec_lock, lru_deactivate_pvecs);
- 	}
- }
- 
- void lru_add_drain(void)
- {
--	lru_add_drain_cpu(local_lock_cpu(swap_lock));
--	local_unlock_cpu(swap_lock);
-+	lru_add_drain_cpu(local_lock_cpu(swapvec_lock));
-+	local_unlock_cpu(swapvec_lock);
- }
- 
- static void lru_add_drain_per_cpu(struct work_struct *dummy)