diff options
author | Paul Gortmaker <paul.gortmaker@windriver.com> | 2013-05-07 19:21:59 -0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2013-05-07 19:21:59 -0400 |
commit | 91331fbb4539e5699d195be7f5d9b2e63ecc46cd (patch) | |
tree | 6cd4a5c30a94d78a39be70bc41f2c6ff846f406d | |
parent | cb31b24343566a6e2b65bf4b4840391aa6c5c6ff (diff) | |
download | 3.8-rt-patches-91331fbb4539e5699d195be7f5d9b2e63ecc46cd.tar.gz |
patches-3.8.10-rt6.tar.xzv3.8.10-rt6
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>
-rw-r--r-- | patches/cpsw-collected_cpsw_patches.patch | 242 | ||||
-rw-r--r-- | patches/cpsw-net-cpsw-Use-fallback-for-active_slave.patch | 7 | ||||
-rw-r--r-- | patches/cpsw-net-cpsw-use-a-lock-around-source-testing.patch | 13 | ||||
-rw-r--r-- | patches/cpsw-revert-stable-patches.patch | 23 | ||||
-rw-r--r-- | patches/drm-i915-move-i915_trace_irq_get-out-of-the-tracing-.patch | 20 | ||||
-rw-r--r-- | patches/fs-fscache-remove-spin_lock-from-the-condition-in-wh.patch | 9 | ||||
-rw-r--r-- | patches/localversion.patch | 2 | ||||
-rw-r--r-- | patches/mm-convert-swap-to-percpu-locked.patch | 18 | ||||
-rw-r--r-- | patches/powerpc-preempt-lazy-support.patch | 10 | ||||
-rw-r--r-- | patches/rt-add-rt-spinlock-to-headers.patch | 12 | ||||
-rw-r--r-- | patches/sched-better-debug-output-for-might-sleep.patch | 4 | ||||
-rw-r--r-- | patches/sched-fix-the-wrong-macro-name-of-CONFIG_DEBUG_PREEM.patch | 33 | ||||
-rw-r--r-- | patches/series | 4 | ||||
-rw-r--r-- | patches/spinlock-include-cache.h.patch | 24 | ||||
-rw-r--r-- | patches/swap-Use-unique-local-lock-name-for-swap_lock.patch | 101 |
15 files changed, 176 insertions, 346 deletions
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 @@ including the following patches: 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 @@ index c2f14e8..91fe4f1 100644 + }; }; }; -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 @@ index 4426151..de71b1e 100644 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 @@ index d9625f6..31bbbca 100644 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 @@ index d9625f6..31bbbca 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 + 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 @@ index 40aff68..4e2d224 100644 + 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 @@ index 40aff68..4e2d224 100644 + 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 @@ index 40aff68..4e2d224 100644 } } } -@@ -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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 } 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 /* 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 } 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 } 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 @@ index 40aff68..4e2d224 100644 } 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 } 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 }; 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 @@ index 40aff68..4e2d224 100644 } 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 /* * 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 /* * 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 40aff68..4e2d224 100644 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 @@ index 0e9ccc2..7fa60d6 100644 { 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 @@ index 0e9ccc2..7fa60d6 100644 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 @@ index 0e9ccc2..7fa60d6 100644 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 @@ index 0e9ccc2..7fa60d6 100644 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 @@ index 0e9ccc2..7fa60d6 100644 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 @@ index 0e9ccc2..7fa60d6 100644 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 @@ index 0e9ccc2..7fa60d6 100644 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 @@ index 0e9ccc2..7fa60d6 100644 + 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 @@ index 2bd09cb..30daa12 100644 #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 @@ index 2bd09cb..30daa12 100644 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 @@ index 4995673..49dfd59 100644 /* * 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 } 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 { 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index 4995673..49dfd59 100644 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 @@ index afa19a0..86dee48 100644 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 @@ index afa19a0..86dee48 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 } /** -@@ -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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 /* 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 @@ index 2a3e2c5..860e15d 100644 { 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 } /* 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 @@ index 2a3e2c5..860e15d 100644 } 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 @@ index 2a3e2c5..860e15d 100644 } 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 @@ index 2a3e2c5..860e15d 100644 } 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 @@ index 2a3e2c5..860e15d 100644 } -@@ -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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index 2a3e2c5..860e15d 100644 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 @@ index cca2550..12aec17 100644 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 @@ index cca2550..12aec17 100644 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 @@ index 2272538..60c400f 100644 } 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 @@ index 2272538..60c400f 100644 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 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> 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 @@ index 1b2126d..4701ab3 100644 } 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 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> 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 @@ index 2633be6..ef942cd 100644 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 @@ index 2633be6..ef942cd 100644 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 @@ index 2633be6..ef942cd 100644 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 @@ index 2633be6..ef942cd 100644 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 @@ and apply them from net & net-next branch. 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 @@ index 3b1be52..40aff68 100644 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 @@ index 3b1be52..40aff68 100644 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 @@ Subject: [PATCH 1/5] drm/i915: move i915_trace_irq_get() out of the tracing 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 @@ Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> 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 @@ index ff000e5..c84696c 100644 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 @@ index ff000e5..c84696c 100644 } 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 @@ Link: http://lkml.kernel.org/n/tip-8vdw4bfcsds27cvox6rpb334@git.kernel.org --- /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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> { 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> { - 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Date: Wed, 29 Jun 2011 19:43:35 +0200 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> #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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +#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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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 @@ Signed-off-by: Thomas Gleixner <tglx@linutronix.de> 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-page-alloc-fix.patch # 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 @@ rt-mutex-add-sleeping-spinlocks-support.patch 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 @@ drm-i915-move-i915_trace_irq_get-out-of-the-tracing-.patch # 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 @@ idle-state.patch 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) |