diff options
author | Koen Kooi <koen@dominion.thruhere.net> | 2012-05-04 11:05:58 +0200 |
---|---|---|
committer | Denys Dmytriyenko <denys@ti.com> | 2012-05-10 15:31:55 -0400 |
commit | 1af87d9126c541cb890c46bb8fd98b4d8d796bd6 (patch) | |
tree | 2eeb3f7f09ca3395b823c3d54c02eba88488bce8 | |
parent | 649c697bf885f0abc4c7fcc16a05a556e0a02f29 (diff) | |
download | meta-ti-1af87d9126c541cb890c46bb8fd98b4d8d796bd6.tar.gz |
linux-ti335x-psp 3.2: update to 3.2.16
3.2.16 is the final release in the 3.2-stable series by Greg KH.
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Signed-off-by: Denys Dmytriyenko <denys@ti.com>
131 files changed, 8773 insertions, 3 deletions
diff --git a/conf/machine/include/ti33x.inc b/conf/machine/include/ti33x.inc index c5926a80..e04da03b 100644 --- a/conf/machine/include/ti33x.inc +++ b/conf/machine/include/ti33x.inc | |||
@@ -4,7 +4,7 @@ require conf/machine/include/soc-family.inc | |||
4 | require conf/machine/include/tune-cortexa8.inc | 4 | require conf/machine/include/tune-cortexa8.inc |
5 | PREFERRED_PROVIDER_virtual/kernel = "linux-ti33x-psp" | 5 | PREFERRED_PROVIDER_virtual/kernel = "linux-ti33x-psp" |
6 | # Increase this everytime you change something in the kernel | 6 | # Increase this everytime you change something in the kernel |
7 | MACHINE_KERNEL_PR = "r10" | 7 | MACHINE_KERNEL_PR = "r11" |
8 | 8 | ||
9 | KERNEL_IMAGETYPE = "uImage" | 9 | KERNEL_IMAGETYPE = "uImage" |
10 | 10 | ||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0001-x86-bpf_jit-fix-a-bug-in-emitting-the-16-bit-immedia.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0001-x86-bpf_jit-fix-a-bug-in-emitting-the-16-bit-immedia.patch new file mode 100644 index 00000000..6ca5b968 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0001-x86-bpf_jit-fix-a-bug-in-emitting-the-16-bit-immedia.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From 7e602bd1af2343c068cef31c272ffbb1f24e4569 Mon Sep 17 00:00:00 2001 | ||
2 | From: "zhuangfeiran@ict.ac.cn" <zhuangfeiran@ict.ac.cn> | ||
3 | Date: Wed, 28 Mar 2012 23:27:00 +0000 | ||
4 | Subject: [PATCH 01/60] x86 bpf_jit: fix a bug in emitting the 16-bit | ||
5 | immediate operand of AND | ||
6 | |||
7 | [ Upstream commit 1d24fb3684f347226747c6b11ea426b7b992694e ] | ||
8 | |||
9 | When K >= 0xFFFF0000, AND needs the two least significant bytes of K as | ||
10 | its operand, but EMIT2() gives it the least significant byte of K and | ||
11 | 0x2. EMIT() should be used here to replace EMIT2(). | ||
12 | |||
13 | Signed-off-by: Feiran Zhuang <zhuangfeiran@ict.ac.cn> | ||
14 | Acked-by: Eric Dumazet <eric.dumazet@gmail.com> | ||
15 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | arch/x86/net/bpf_jit_comp.c | 2 +- | ||
19 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
20 | |||
21 | diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c | ||
22 | index 5671752..5a5b6e4 100644 | ||
23 | --- a/arch/x86/net/bpf_jit_comp.c | ||
24 | +++ b/arch/x86/net/bpf_jit_comp.c | ||
25 | @@ -289,7 +289,7 @@ void bpf_jit_compile(struct sk_filter *fp) | ||
26 | EMIT2(0x24, K & 0xFF); /* and imm8,%al */ | ||
27 | } else if (K >= 0xFFFF0000) { | ||
28 | EMIT2(0x66, 0x25); /* and imm16,%ax */ | ||
29 | - EMIT2(K, 2); | ||
30 | + EMIT(K, 2); | ||
31 | } else { | ||
32 | EMIT1_off32(0x25, K); /* and imm32,%eax */ | ||
33 | } | ||
34 | -- | ||
35 | 1.7.9.5 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0002-tg3-Fix-5717-serdes-powerdown-problem.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0002-tg3-Fix-5717-serdes-powerdown-problem.patch new file mode 100644 index 00000000..1a703dcd --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0002-tg3-Fix-5717-serdes-powerdown-problem.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 1ac4686cd4465f081e95dc1f6de93bb6f5157a48 Mon Sep 17 00:00:00 2001 | ||
2 | From: Matt Carlson <mcarlson@broadcom.com> | ||
3 | Date: Mon, 2 Apr 2012 09:01:40 +0000 | ||
4 | Subject: [PATCH 02/60] tg3: Fix 5717 serdes powerdown problem | ||
5 | |||
6 | [ Upstream commit 085f1afc56619bda424941412fdeaff1e32c21dc ] | ||
7 | |||
8 | If port 0 of a 5717 serdes device powers down, it hides the phy from | ||
9 | port 1. This patch works around the problem by keeping port 0's phy | ||
10 | powered up. | ||
11 | |||
12 | Signed-off-by: Matt Carlson <mcarlson@broadcom.com> | ||
13 | Signed-off-by: Michael Chan <mchan@broadcom.com> | ||
14 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/net/ethernet/broadcom/tg3.c | 4 +++- | ||
18 | 1 file changed, 3 insertions(+), 1 deletion(-) | ||
19 | |||
20 | diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c | ||
21 | index bf40741..3d55883 100644 | ||
22 | --- a/drivers/net/ethernet/broadcom/tg3.c | ||
23 | +++ b/drivers/net/ethernet/broadcom/tg3.c | ||
24 | @@ -2794,7 +2794,9 @@ static void tg3_power_down_phy(struct tg3 *tp, bool do_low_power) | ||
25 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || | ||
26 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || | ||
27 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5780 && | ||
28 | - (tp->phy_flags & TG3_PHYFLG_MII_SERDES))) | ||
29 | + (tp->phy_flags & TG3_PHYFLG_MII_SERDES)) || | ||
30 | + (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && | ||
31 | + !tp->pci_fn)) | ||
32 | return; | ||
33 | |||
34 | if (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5784_AX || | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0003-sky2-dont-overwrite-settings-for-PHY-Quick-link.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0003-sky2-dont-overwrite-settings-for-PHY-Quick-link.patch new file mode 100644 index 00000000..38890ecb --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0003-sky2-dont-overwrite-settings-for-PHY-Quick-link.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From 52136862cecf42801481b683e0c316e9bc7658ee Mon Sep 17 00:00:00 2001 | ||
2 | From: Lino Sanfilippo <LinoSanfilippo@gmx.de> | ||
3 | Date: Fri, 30 Mar 2012 07:28:59 +0000 | ||
4 | Subject: [PATCH 03/60] sky2: dont overwrite settings for PHY Quick link | ||
5 | |||
6 | [ Upstream commit 2240eb4ae3dc4acff20d1a8947c441c451513e37 ] | ||
7 | |||
8 | This patch corrects a bug in function sky2_open() of the Marvell Yukon 2 driver | ||
9 | in which the settings for PHY quick link are overwritten. | ||
10 | |||
11 | Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> | ||
12 | Acked-by: Stephen Hemminger <shemminger@vyattta.com> | ||
13 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/net/ethernet/marvell/sky2.c | 5 +++-- | ||
17 | 1 file changed, 3 insertions(+), 2 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c | ||
20 | index f612b35..7eb8a00 100644 | ||
21 | --- a/drivers/net/ethernet/marvell/sky2.c | ||
22 | +++ b/drivers/net/ethernet/marvell/sky2.c | ||
23 | @@ -1766,13 +1766,14 @@ static int sky2_open(struct net_device *dev) | ||
24 | |||
25 | sky2_hw_up(sky2); | ||
26 | |||
27 | + /* Enable interrupts from phy/mac for port */ | ||
28 | + imask = sky2_read32(hw, B0_IMSK); | ||
29 | + | ||
30 | if (hw->chip_id == CHIP_ID_YUKON_OPT || | ||
31 | hw->chip_id == CHIP_ID_YUKON_PRM || | ||
32 | hw->chip_id == CHIP_ID_YUKON_OP_2) | ||
33 | imask |= Y2_IS_PHY_QLNK; /* enable PHY Quick Link */ | ||
34 | |||
35 | - /* Enable interrupts from phy/mac for port */ | ||
36 | - imask = sky2_read32(hw, B0_IMSK); | ||
37 | imask |= portirq_msk[port]; | ||
38 | sky2_write32(hw, B0_IMSK, imask); | ||
39 | sky2_read32(hw, B0_IMSK); | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0004-rose_dev-fix-memcpy-bug-in-rose_set_mac_address.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0004-rose_dev-fix-memcpy-bug-in-rose_set_mac_address.patch new file mode 100644 index 00000000..6e7fb2e4 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0004-rose_dev-fix-memcpy-bug-in-rose_set_mac_address.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | From 1ea3a4959cbe6145d661bd86ad83f70a61927974 Mon Sep 17 00:00:00 2001 | ||
2 | From: "danborkmann@iogearbox.net" <danborkmann@iogearbox.net> | ||
3 | Date: Tue, 27 Mar 2012 22:47:43 +0000 | ||
4 | Subject: [PATCH 04/60] rose_dev: fix memcpy-bug in rose_set_mac_address | ||
5 | |||
6 | [ Upstream commit 81213b5e8ae68e204aa7a3f83c4f9100405dbff9 ] | ||
7 | |||
8 | If both addresses equal, nothing needs to be done. If the device is down, | ||
9 | then we simply copy the new address to dev->dev_addr. If the device is up, | ||
10 | then we add another loopback device with the new address, and if that does | ||
11 | not fail, we remove the loopback device with the old address. And only | ||
12 | then, we update the dev->dev_addr. | ||
13 | |||
14 | Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch> | ||
15 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | net/rose/rose_dev.c | 4 ++-- | ||
19 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
20 | |||
21 | diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c | ||
22 | index 178ff4f..2679507 100644 | ||
23 | --- a/net/rose/rose_dev.c | ||
24 | +++ b/net/rose/rose_dev.c | ||
25 | @@ -96,11 +96,11 @@ static int rose_set_mac_address(struct net_device *dev, void *addr) | ||
26 | struct sockaddr *sa = addr; | ||
27 | int err; | ||
28 | |||
29 | - if (!memcpy(dev->dev_addr, sa->sa_data, dev->addr_len)) | ||
30 | + if (!memcmp(dev->dev_addr, sa->sa_data, dev->addr_len)) | ||
31 | return 0; | ||
32 | |||
33 | if (dev->flags & IFF_UP) { | ||
34 | - err = rose_add_loopback_node((rose_address *)dev->dev_addr); | ||
35 | + err = rose_add_loopback_node((rose_address *)sa->sa_data); | ||
36 | if (err) | ||
37 | return err; | ||
38 | |||
39 | -- | ||
40 | 1.7.9.5 | ||
41 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0005-net-usb-cdc_eem-fix-mtu.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0005-net-usb-cdc_eem-fix-mtu.patch new file mode 100644 index 00000000..42e8bde7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0005-net-usb-cdc_eem-fix-mtu.patch | |||
@@ -0,0 +1,38 @@ | |||
1 | From 1a9aa23e139f1305c1b8e1609e8275ed7456c9ba Mon Sep 17 00:00:00 2001 | ||
2 | From: Rabin Vincent <rabin@rab.in> | ||
3 | Date: Thu, 29 Mar 2012 07:15:15 +0000 | ||
4 | Subject: [PATCH 05/60] net: usb: cdc_eem: fix mtu | ||
5 | |||
6 | [ Upstream commit 78fb72f7936c01d5b426c03a691eca082b03f2b9 ] | ||
7 | |||
8 | Make CDC EEM recalculate the hard_mtu after adjusting the | ||
9 | hard_header_len. | ||
10 | |||
11 | Without this, usbnet adjusts the MTU down to 1494 bytes, and the host is | ||
12 | unable to receive standard 1500-byte frames from the device. | ||
13 | |||
14 | Tested with the Linux USB Ethernet gadget. | ||
15 | |||
16 | Cc: Oliver Neukum <oliver@neukum.name> | ||
17 | Signed-off-by: Rabin Vincent <rabin@rab.in> | ||
18 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/net/usb/cdc_eem.c | 1 + | ||
22 | 1 file changed, 1 insertion(+) | ||
23 | |||
24 | diff --git a/drivers/net/usb/cdc_eem.c b/drivers/net/usb/cdc_eem.c | ||
25 | index 882f53f..82d43b2 100644 | ||
26 | --- a/drivers/net/usb/cdc_eem.c | ||
27 | +++ b/drivers/net/usb/cdc_eem.c | ||
28 | @@ -93,6 +93,7 @@ static int eem_bind(struct usbnet *dev, struct usb_interface *intf) | ||
29 | /* no jumbogram (16K) support for now */ | ||
30 | |||
31 | dev->net->hard_header_len += EEM_HEAD + ETH_FCS_LEN; | ||
32 | + dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; | ||
33 | |||
34 | return 0; | ||
35 | } | ||
36 | -- | ||
37 | 1.7.9.5 | ||
38 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0006-Fix-non-TBI-PHY-access-a-bad-merge-undid-bug-fix-in-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0006-Fix-non-TBI-PHY-access-a-bad-merge-undid-bug-fix-in-.patch new file mode 100644 index 00000000..f4cf9331 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0006-Fix-non-TBI-PHY-access-a-bad-merge-undid-bug-fix-in-.patch | |||
@@ -0,0 +1,49 @@ | |||
1 | From 5d9449356576f8bb42022c55e966a6d00a27d810 Mon Sep 17 00:00:00 2001 | ||
2 | From: Kenth Eriksson <kenth.eriksson@transmode.com> | ||
3 | Date: Tue, 27 Mar 2012 22:05:54 +0000 | ||
4 | Subject: [PATCH 06/60] Fix non TBI PHY access; a bad merge undid bug fix in a | ||
5 | previous commit. | ||
6 | |||
7 | [ Upstream commit 464b57da56910c8737ede75ad820b9a7afc46b3e ] | ||
8 | |||
9 | The merge done in commit b26e478f undid bug fix in commit c3e072f8 | ||
10 | ("net: fsl_pq_mdio: fix non tbi phy access"), with the result that non | ||
11 | TBI (e.g. MDIO) PHYs cannot be accessed. | ||
12 | |||
13 | Signed-off-by: Kenth Eriksson <kenth.eriksson@transmode.com> | ||
14 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/net/ethernet/freescale/fsl_pq_mdio.c | 13 ++++++------- | ||
18 | 1 file changed, 6 insertions(+), 7 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c | ||
21 | index 4d9f84b..ada234a 100644 | ||
22 | --- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c | ||
23 | +++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c | ||
24 | @@ -356,16 +356,15 @@ static int fsl_pq_mdio_probe(struct platform_device *ofdev) | ||
25 | |||
26 | if (prop) | ||
27 | tbiaddr = *prop; | ||
28 | - } | ||
29 | - | ||
30 | - if (tbiaddr == -1) { | ||
31 | - err = -EBUSY; | ||
32 | |||
33 | - goto err_free_irqs; | ||
34 | + if (tbiaddr == -1) { | ||
35 | + err = -EBUSY; | ||
36 | + goto err_free_irqs; | ||
37 | + } else { | ||
38 | + out_be32(tbipa, tbiaddr); | ||
39 | + } | ||
40 | } | ||
41 | |||
42 | - out_be32(tbipa, tbiaddr); | ||
43 | - | ||
44 | err = of_mdiobus_register(new_bus, np); | ||
45 | if (err) { | ||
46 | printk (KERN_ERR "%s: Cannot register as MDIO bus\n", | ||
47 | -- | ||
48 | 1.7.9.5 | ||
49 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0007-ASoC-wm8994-Update-WM8994-DCS-calibration.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0007-ASoC-wm8994-Update-WM8994-DCS-calibration.patch new file mode 100644 index 00000000..b52abe1a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0007-ASoC-wm8994-Update-WM8994-DCS-calibration.patch | |||
@@ -0,0 +1,31 @@ | |||
1 | From be6768ee3f1d5ade04946ae2d9b9642e795b4dc3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
3 | Date: Wed, 21 Mar 2012 13:22:40 +0000 | ||
4 | Subject: [PATCH 07/60] ASoC: wm8994: Update WM8994 DCS calibration | ||
5 | |||
6 | commit e16605855d58803fe0608417150c7a618b4f8243 upstream. | ||
7 | |||
8 | Based on latest production information. | ||
9 | |||
10 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
11 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
12 | --- | ||
13 | sound/soc/codecs/wm8994.c | 2 +- | ||
14 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
15 | |||
16 | diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c | ||
17 | index 6e502af..2f1f5f8 100644 | ||
18 | --- a/sound/soc/codecs/wm8994.c | ||
19 | +++ b/sound/soc/codecs/wm8994.c | ||
20 | @@ -3190,7 +3190,7 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec) | ||
21 | case 2: | ||
22 | case 3: | ||
23 | wm8994->hubs.dcs_codes_l = -9; | ||
24 | - wm8994->hubs.dcs_codes_r = -5; | ||
25 | + wm8994->hubs.dcs_codes_r = -7; | ||
26 | break; | ||
27 | default: | ||
28 | break; | ||
29 | -- | ||
30 | 1.7.9.5 | ||
31 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0008-mtd-ixp4xx-oops-in-ixp4xx_flash_probe.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0008-mtd-ixp4xx-oops-in-ixp4xx_flash_probe.patch new file mode 100644 index 00000000..b704a972 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0008-mtd-ixp4xx-oops-in-ixp4xx_flash_probe.patch | |||
@@ -0,0 +1,52 @@ | |||
1 | From 5afee8ffbb086ee0d779cba829f1d0faa0f35b9c Mon Sep 17 00:00:00 2001 | ||
2 | From: Marc Kleine-Budde <mkl@blackshift.org> | ||
3 | Date: Wed, 8 Feb 2012 20:24:29 +0100 | ||
4 | Subject: [PATCH 08/60] mtd: ixp4xx: oops in ixp4xx_flash_probe | ||
5 | |||
6 | commit a3c1e3b732b3708a80e4035b9d845f3f7c7dd0c9 upstream. | ||
7 | |||
8 | In commit "c797533 mtd: abstract last MTD partition parser argument" the | ||
9 | third argument of "mtd_device_parse_register()" changed from start address | ||
10 | of the MTD device to a pointer to a struct. | ||
11 | |||
12 | The "ixp4xx_flash_probe()" function was not converted properly, causing | ||
13 | an oops during boot. | ||
14 | |||
15 | This patch fixes the problem by filling the needed information into a | ||
16 | "struct mtd_part_parser_data" and passing it to | ||
17 | "mtd_device_parse_register()". | ||
18 | |||
19 | Signed-off-by: Marc Kleine-Budde <mkl@blackshift.org> | ||
20 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
21 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | drivers/mtd/maps/ixp4xx.c | 5 ++++- | ||
25 | 1 file changed, 4 insertions(+), 1 deletion(-) | ||
26 | |||
27 | diff --git a/drivers/mtd/maps/ixp4xx.c b/drivers/mtd/maps/ixp4xx.c | ||
28 | index 3040901..696372f 100644 | ||
29 | --- a/drivers/mtd/maps/ixp4xx.c | ||
30 | +++ b/drivers/mtd/maps/ixp4xx.c | ||
31 | @@ -182,6 +182,9 @@ static int ixp4xx_flash_probe(struct platform_device *dev) | ||
32 | { | ||
33 | struct flash_platform_data *plat = dev->dev.platform_data; | ||
34 | struct ixp4xx_flash_info *info; | ||
35 | + struct mtd_part_parser_data ppdata = { | ||
36 | + .origin = dev->resource->start, | ||
37 | + }; | ||
38 | int err = -1; | ||
39 | |||
40 | if (!plat) | ||
41 | @@ -247,7 +250,7 @@ static int ixp4xx_flash_probe(struct platform_device *dev) | ||
42 | /* Use the fast version */ | ||
43 | info->map.write = ixp4xx_write16; | ||
44 | |||
45 | - err = mtd_device_parse_register(info->mtd, probes, dev->resource->start, | ||
46 | + err = mtd_device_parse_register(info->mtd, probes, &ppdata, | ||
47 | plat->parts, plat->nr_parts); | ||
48 | if (err) { | ||
49 | printk(KERN_ERR "Could not parse partitions\n"); | ||
50 | -- | ||
51 | 1.7.9.5 | ||
52 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0009-mtd-mips-lantiq-reintroduce-support-for-cmdline-part.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0009-mtd-mips-lantiq-reintroduce-support-for-cmdline-part.patch new file mode 100644 index 00000000..5d9a1e64 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0009-mtd-mips-lantiq-reintroduce-support-for-cmdline-part.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From 1f6651f5448df6b40e8feafccceed942f192a430 Mon Sep 17 00:00:00 2001 | ||
2 | From: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com> | ||
3 | Date: Thu, 23 Feb 2012 17:59:49 +0100 | ||
4 | Subject: [PATCH 09/60] mtd: mips: lantiq: reintroduce support for cmdline | ||
5 | partitions | ||
6 | |||
7 | commit bf011f2ed53d587fdd8148c173c4f09ed77bdf1a upstream. | ||
8 | |||
9 | Since commit ca97dec2ab5c87e9fbdf7e882e1820004a3966fa the | ||
10 | command line parsing of MTD partitions does not work anymore. | ||
11 | |||
12 | Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com> | ||
13 | Signed-off-by: John Crispin <blogic@openwrt.org> | ||
14 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
15 | Acked-by: John Crispin <blogic@openwrt.org> | ||
16 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/mtd/maps/lantiq-flash.c | 3 ++- | ||
20 | 1 file changed, 2 insertions(+), 1 deletion(-) | ||
21 | |||
22 | diff --git a/drivers/mtd/maps/lantiq-flash.c b/drivers/mtd/maps/lantiq-flash.c | ||
23 | index 4f10e27..764d468 100644 | ||
24 | --- a/drivers/mtd/maps/lantiq-flash.c | ||
25 | +++ b/drivers/mtd/maps/lantiq-flash.c | ||
26 | @@ -45,6 +45,7 @@ struct ltq_mtd { | ||
27 | }; | ||
28 | |||
29 | static char ltq_map_name[] = "ltq_nor"; | ||
30 | +static const char *ltq_probe_types[] __devinitconst = { "cmdlinepart", NULL }; | ||
31 | |||
32 | static map_word | ||
33 | ltq_read16(struct map_info *map, unsigned long adr) | ||
34 | @@ -168,7 +169,7 @@ ltq_mtd_probe(struct platform_device *pdev) | ||
35 | cfi->addr_unlock1 ^= 1; | ||
36 | cfi->addr_unlock2 ^= 1; | ||
37 | |||
38 | - err = mtd_device_parse_register(ltq_mtd->mtd, NULL, 0, | ||
39 | + err = mtd_device_parse_register(ltq_mtd->mtd, ltq_probe_types, 0, | ||
40 | ltq_mtd_data->parts, ltq_mtd_data->nr_parts); | ||
41 | if (err) { | ||
42 | dev_err(&pdev->dev, "failed to add partitions\n"); | ||
43 | -- | ||
44 | 1.7.9.5 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0010-mtd-nand-gpmi-use-correct-member-for-checking-NAND_B.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0010-mtd-nand-gpmi-use-correct-member-for-checking-NAND_B.patch new file mode 100644 index 00000000..e7cbea3e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0010-mtd-nand-gpmi-use-correct-member-for-checking-NAND_B.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From a34ab661a8d66083d7e6bd4ff4e9d6758699d8ab Mon Sep 17 00:00:00 2001 | ||
2 | From: Wolfram Sang <w.sang@pengutronix.de> | ||
3 | Date: Tue, 31 Jan 2012 13:10:43 +0100 | ||
4 | Subject: [PATCH 10/60] mtd: nand: gpmi: use correct member for checking | ||
5 | NAND_BBT_USE_FLASH | ||
6 | |||
7 | commit 5289966ea576a062b80319975b31b661c196ff9d upstream. | ||
8 | |||
9 | This has been moved from .options to .bbt_options meanwhile. So, it | ||
10 | currently checks for something totally different (NAND_OWN_BUFFERS) and | ||
11 | decides according to that. | ||
12 | |||
13 | Artem Bityutskiy: the options were moved in | ||
14 | a40f734 mtd: nand: consolidate redundant flash-based BBT flags | ||
15 | |||
16 | Artem Bityutskiy: CCing -stable | ||
17 | |||
18 | Signed-off-by: Wolfram Sang <w.sang@pengutronix.de> | ||
19 | Acked-by: Huang Shijie <b32955@freescale.com> | ||
20 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
21 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 2 +- | ||
25 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
26 | |||
27 | diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c | ||
28 | index 493ec2f..f39f83e 100644 | ||
29 | --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c | ||
30 | +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c | ||
31 | @@ -1124,7 +1124,7 @@ static int gpmi_block_markbad(struct mtd_info *mtd, loff_t ofs) | ||
32 | chip->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1); | ||
33 | |||
34 | /* Do we have a flash based bad block table ? */ | ||
35 | - if (chip->options & NAND_BBT_USE_FLASH) | ||
36 | + if (chip->bbt_options & NAND_BBT_USE_FLASH) | ||
37 | ret = nand_update_bbt(mtd, ofs); | ||
38 | else { | ||
39 | chipnr = (int)(ofs >> chip->chip_shift); | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0011-mtd-sst25l-initialize-writebufsize.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0011-mtd-sst25l-initialize-writebufsize.patch new file mode 100644 index 00000000..3fc30003 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0011-mtd-sst25l-initialize-writebufsize.patch | |||
@@ -0,0 +1,38 @@ | |||
1 | From 187a3e03c6c3ddb6ec2a62402f9df4e26ea59d96 Mon Sep 17 00:00:00 2001 | ||
2 | From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
3 | Date: Fri, 3 Feb 2012 10:16:50 +0200 | ||
4 | Subject: [PATCH 11/60] mtd: sst25l: initialize writebufsize | ||
5 | |||
6 | commit c4cc625ea5958d065c21cc0fcea29e9ed8f3d2bc upstream. | ||
7 | |||
8 | The writebufsize concept was introduce by commit | ||
9 | "0e4ca7e mtd: add writebufsize field to mtd_info struct" and it represents | ||
10 | the maximum amount of data the device writes to the media at a time. This is | ||
11 | an important parameter for UBIFS which is used during recovery and which | ||
12 | basically defines how big a corruption caused by a power cut can be. | ||
13 | |||
14 | Set writebufsize to the flash page size because it is the maximum amount of | ||
15 | data it writes at a time. | ||
16 | |||
17 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
18 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/mtd/devices/sst25l.c | 1 + | ||
22 | 1 file changed, 1 insertion(+) | ||
23 | |||
24 | diff --git a/drivers/mtd/devices/sst25l.c b/drivers/mtd/devices/sst25l.c | ||
25 | index d38ef3b..9c35250 100644 | ||
26 | --- a/drivers/mtd/devices/sst25l.c | ||
27 | +++ b/drivers/mtd/devices/sst25l.c | ||
28 | @@ -402,6 +402,7 @@ static int __devinit sst25l_probe(struct spi_device *spi) | ||
29 | flash->mtd.flags = MTD_CAP_NORFLASH; | ||
30 | flash->mtd.erasesize = flash_info->erase_size; | ||
31 | flash->mtd.writesize = flash_info->page_size; | ||
32 | + flash->mtd.writebufsize = flash_info->page_size; | ||
33 | flash->mtd.size = flash_info->page_size * flash_info->nr_pages; | ||
34 | flash->mtd.erase = sst25l_erase; | ||
35 | flash->mtd.read = sst25l_read; | ||
36 | -- | ||
37 | 1.7.9.5 | ||
38 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0012-mtd-block2mtd-initialize-writebufsize.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0012-mtd-block2mtd-initialize-writebufsize.patch new file mode 100644 index 00000000..1a57dc36 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0012-mtd-block2mtd-initialize-writebufsize.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From e9ade583fc6f98a39805d5cb7eba7048eaf17575 Mon Sep 17 00:00:00 2001 | ||
2 | From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
3 | Date: Fri, 3 Feb 2012 09:32:44 +0200 | ||
4 | Subject: [PATCH 12/60] mtd: block2mtd: initialize writebufsize | ||
5 | |||
6 | commit b604387411ec6a072e95910099262616edd2bd2f upstream. | ||
7 | |||
8 | The writebufsize concept was introduce by commit | ||
9 | "0e4ca7e mtd: add writebufsize field to mtd_info struct" and it represents | ||
10 | the maximum amount of data the device writes to the media at a time. This is | ||
11 | an important parameter for UBIFS which is used during recovery and which | ||
12 | basically defines how big a corruption caused by a power cut can be. | ||
13 | |||
14 | However, we forgot to set this parameter for block2mtd. Set it to PAGE_SIZE | ||
15 | because this is actually the amount of data we write at a time. | ||
16 | |||
17 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
18 | Acked-by: Joern Engel <joern@lazybastard.org> | ||
19 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | drivers/mtd/devices/block2mtd.c | 1 + | ||
23 | 1 file changed, 1 insertion(+) | ||
24 | |||
25 | diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c | ||
26 | index b78f231..8cd983c 100644 | ||
27 | --- a/drivers/mtd/devices/block2mtd.c | ||
28 | +++ b/drivers/mtd/devices/block2mtd.c | ||
29 | @@ -284,6 +284,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size) | ||
30 | dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK; | ||
31 | dev->mtd.erasesize = erase_size; | ||
32 | dev->mtd.writesize = 1; | ||
33 | + dev->mtd.writebufsize = PAGE_SIZE; | ||
34 | dev->mtd.type = MTD_RAM; | ||
35 | dev->mtd.flags = MTD_CAP_RAM; | ||
36 | dev->mtd.erase = block2mtd_erase; | ||
37 | -- | ||
38 | 1.7.9.5 | ||
39 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0013-mtd-lart-initialize-writebufsize.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0013-mtd-lart-initialize-writebufsize.patch new file mode 100644 index 00000000..12aaba01 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0013-mtd-lart-initialize-writebufsize.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 377b1a9ee6412981a7c01ea196c81401ded07d97 Mon Sep 17 00:00:00 2001 | ||
2 | From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
3 | Date: Fri, 3 Feb 2012 09:53:28 +0200 | ||
4 | Subject: [PATCH 13/60] mtd: lart: initialize writebufsize | ||
5 | |||
6 | commit fcc44a07dae0af16e84e93425fc8afe642ddc603 upstream. | ||
7 | |||
8 | The writebufsize concept was introduce by commit | ||
9 | "0e4ca7e mtd: add writebufsize field to mtd_info struct" and it represents | ||
10 | the maximum amount of data the device writes to the media at a time. This is | ||
11 | an important parameter for UBIFS which is used during recovery and which | ||
12 | basically defines how big a corruption caused by a power cut can be. | ||
13 | |||
14 | Set writebufsize to 4 because this drivers writes at max 4 bytes at a time. | ||
15 | |||
16 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
17 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/mtd/devices/lart.c | 1 + | ||
21 | 1 file changed, 1 insertion(+) | ||
22 | |||
23 | diff --git a/drivers/mtd/devices/lart.c b/drivers/mtd/devices/lart.c | ||
24 | index 3a11ea6..5f12668 100644 | ||
25 | --- a/drivers/mtd/devices/lart.c | ||
26 | +++ b/drivers/mtd/devices/lart.c | ||
27 | @@ -630,6 +630,7 @@ static int __init lart_flash_init (void) | ||
28 | mtd.name = module_name; | ||
29 | mtd.type = MTD_NORFLASH; | ||
30 | mtd.writesize = 1; | ||
31 | + mtd.writebufsize = 4; | ||
32 | mtd.flags = MTD_CAP_NORFLASH; | ||
33 | mtd.size = FLASH_BLOCKSIZE_PARAM * FLASH_NUMBLOCKS_16m_PARAM + FLASH_BLOCKSIZE_MAIN * FLASH_NUMBLOCKS_16m_MAIN; | ||
34 | mtd.erasesize = FLASH_BLOCKSIZE_MAIN; | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0014-mtd-m25p80-set-writebufsize.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0014-mtd-m25p80-set-writebufsize.patch new file mode 100644 index 00000000..6c7ac61d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0014-mtd-m25p80-set-writebufsize.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 60498eb2c6666663bf2d0f09d805048e32108fe8 Mon Sep 17 00:00:00 2001 | ||
2 | From: Brian Norris <computersforpeace@gmail.com> | ||
3 | Date: Tue, 31 Jan 2012 00:06:03 -0800 | ||
4 | Subject: [PATCH 14/60] mtd: m25p80: set writebufsize | ||
5 | |||
6 | commit b54f47c8bcfc5f766bf13ec31bd7dd1d4726d33b upstream. | ||
7 | |||
8 | Using UBI on m25p80 can give messages like: | ||
9 | |||
10 | UBI error: io_init: bad write buffer size 0 for 1 min. I/O unit | ||
11 | |||
12 | We need to initialize writebufsize; I think "page_size" is the correct | ||
13 | "bufsize", although I'm not sure. Comments? | ||
14 | |||
15 | Signed-off-by: Brian Norris <computersforpeace@gmail.com> | ||
16 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
17 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/mtd/devices/m25p80.c | 1 + | ||
21 | 1 file changed, 1 insertion(+) | ||
22 | |||
23 | diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c | ||
24 | index 884904d..9f9982f 100644 | ||
25 | --- a/drivers/mtd/devices/m25p80.c | ||
26 | +++ b/drivers/mtd/devices/m25p80.c | ||
27 | @@ -932,6 +932,7 @@ static int __devinit m25p_probe(struct spi_device *spi) | ||
28 | ppdata.of_node = spi->dev.of_node; | ||
29 | flash->mtd.dev.parent = &spi->dev; | ||
30 | flash->page_size = info->page_size; | ||
31 | + flash->mtd.writebufsize = flash->page_size; | ||
32 | |||
33 | if (info->addr_width) | ||
34 | flash->addr_width = info->addr_width; | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0015-ACPI-Do-cpufreq-clamping-for-throttling-per-package-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0015-ACPI-Do-cpufreq-clamping-for-throttling-per-package-.patch new file mode 100644 index 00000000..5a9fe06e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0015-ACPI-Do-cpufreq-clamping-for-throttling-per-package-.patch | |||
@@ -0,0 +1,132 @@ | |||
1 | From 74dd093eb7fe9227cbcf62d0d9467d679a46982b Mon Sep 17 00:00:00 2001 | ||
2 | From: Andi Kleen <andi@firstfloor.org> | ||
3 | Date: Mon, 6 Feb 2012 08:17:11 -0800 | ||
4 | Subject: [PATCH 15/60] ACPI: Do cpufreq clamping for throttling per package | ||
5 | v2 | ||
6 | |||
7 | commit 2815ab92ba3ab27556212cc306288dc95692824b upstream. | ||
8 | |||
9 | On Intel CPUs the processor typically uses the highest frequency | ||
10 | set by any logical CPU. When the system overheats | ||
11 | Linux first forces the frequency to the lowest available one | ||
12 | to lower the temperature. | ||
13 | |||
14 | However this was done only per logical CPU, which means all | ||
15 | logical CPUs in a package would need to go through this before | ||
16 | the frequency is actually lowered. | ||
17 | |||
18 | Worse this delay actually prevents real throttling, because | ||
19 | the real throttle code only proceeds when the lowest frequency | ||
20 | is already reached. | ||
21 | |||
22 | So when a throttle event happens force the lowest frequency | ||
23 | for all CPUs in the package where it happened. The per CPU | ||
24 | state is now kept per package, not per logical CPU. An alternative | ||
25 | would be to do it per cpufreq unit, but since we want to bring | ||
26 | down the temperature of the complete chip it's better | ||
27 | to do it for all. | ||
28 | |||
29 | In principle it may even make sense to do it for all CPUs, | ||
30 | but I kept it on the package for now. | ||
31 | |||
32 | With this change the frequency is actually lowered, which | ||
33 | in terms also allows real throttling to proceed. | ||
34 | |||
35 | I also removed an unnecessary per cpu variable initialization. | ||
36 | |||
37 | v2: Fix package mapping | ||
38 | |||
39 | Signed-off-by: Andi Kleen <ak@linux.intel.com> | ||
40 | Signed-off-by: Len Brown <len.brown@intel.com> | ||
41 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
42 | --- | ||
43 | drivers/acpi/processor_thermal.c | 45 +++++++++++++++++++++++++++++++------- | ||
44 | 1 file changed, 37 insertions(+), 8 deletions(-) | ||
45 | |||
46 | diff --git a/drivers/acpi/processor_thermal.c b/drivers/acpi/processor_thermal.c | ||
47 | index 870550d..4da7d9d 100644 | ||
48 | --- a/drivers/acpi/processor_thermal.c | ||
49 | +++ b/drivers/acpi/processor_thermal.c | ||
50 | @@ -58,6 +58,27 @@ ACPI_MODULE_NAME("processor_thermal"); | ||
51 | static DEFINE_PER_CPU(unsigned int, cpufreq_thermal_reduction_pctg); | ||
52 | static unsigned int acpi_thermal_cpufreq_is_init = 0; | ||
53 | |||
54 | +#define reduction_pctg(cpu) \ | ||
55 | + per_cpu(cpufreq_thermal_reduction_pctg, phys_package_first_cpu(cpu)) | ||
56 | + | ||
57 | +/* | ||
58 | + * Emulate "per package data" using per cpu data (which should really be | ||
59 | + * provided elsewhere) | ||
60 | + * | ||
61 | + * Note we can lose a CPU on cpu hotunplug, in this case we forget the state | ||
62 | + * temporarily. Fortunately that's not a big issue here (I hope) | ||
63 | + */ | ||
64 | +static int phys_package_first_cpu(int cpu) | ||
65 | +{ | ||
66 | + int i; | ||
67 | + int id = topology_physical_package_id(cpu); | ||
68 | + | ||
69 | + for_each_online_cpu(i) | ||
70 | + if (topology_physical_package_id(i) == id) | ||
71 | + return i; | ||
72 | + return 0; | ||
73 | +} | ||
74 | + | ||
75 | static int cpu_has_cpufreq(unsigned int cpu) | ||
76 | { | ||
77 | struct cpufreq_policy policy; | ||
78 | @@ -77,7 +98,7 @@ static int acpi_thermal_cpufreq_notifier(struct notifier_block *nb, | ||
79 | |||
80 | max_freq = ( | ||
81 | policy->cpuinfo.max_freq * | ||
82 | - (100 - per_cpu(cpufreq_thermal_reduction_pctg, policy->cpu) * 20) | ||
83 | + (100 - reduction_pctg(policy->cpu) * 20) | ||
84 | ) / 100; | ||
85 | |||
86 | cpufreq_verify_within_limits(policy, 0, max_freq); | ||
87 | @@ -103,16 +124,28 @@ static int cpufreq_get_cur_state(unsigned int cpu) | ||
88 | if (!cpu_has_cpufreq(cpu)) | ||
89 | return 0; | ||
90 | |||
91 | - return per_cpu(cpufreq_thermal_reduction_pctg, cpu); | ||
92 | + return reduction_pctg(cpu); | ||
93 | } | ||
94 | |||
95 | static int cpufreq_set_cur_state(unsigned int cpu, int state) | ||
96 | { | ||
97 | + int i; | ||
98 | + | ||
99 | if (!cpu_has_cpufreq(cpu)) | ||
100 | return 0; | ||
101 | |||
102 | - per_cpu(cpufreq_thermal_reduction_pctg, cpu) = state; | ||
103 | - cpufreq_update_policy(cpu); | ||
104 | + reduction_pctg(cpu) = state; | ||
105 | + | ||
106 | + /* | ||
107 | + * Update all the CPUs in the same package because they all | ||
108 | + * contribute to the temperature and often share the same | ||
109 | + * frequency. | ||
110 | + */ | ||
111 | + for_each_online_cpu(i) { | ||
112 | + if (topology_physical_package_id(i) == | ||
113 | + topology_physical_package_id(cpu)) | ||
114 | + cpufreq_update_policy(i); | ||
115 | + } | ||
116 | return 0; | ||
117 | } | ||
118 | |||
119 | @@ -120,10 +153,6 @@ void acpi_thermal_cpufreq_init(void) | ||
120 | { | ||
121 | int i; | ||
122 | |||
123 | - for (i = 0; i < nr_cpu_ids; i++) | ||
124 | - if (cpu_present(i)) | ||
125 | - per_cpu(cpufreq_thermal_reduction_pctg, i) = 0; | ||
126 | - | ||
127 | i = cpufreq_register_notifier(&acpi_thermal_cpufreq_notifier_block, | ||
128 | CPUFREQ_POLICY_NOTIFIER); | ||
129 | if (!i) | ||
130 | -- | ||
131 | 1.7.9.5 | ||
132 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0016-PNPACPI-Fix-device-ref-leaking-in-acpi_pnp_match.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0016-PNPACPI-Fix-device-ref-leaking-in-acpi_pnp_match.patch new file mode 100644 index 00000000..3e12d940 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0016-PNPACPI-Fix-device-ref-leaking-in-acpi_pnp_match.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From 2d081f28eff72e6dec19f1e720a03ee656e93902 Mon Sep 17 00:00:00 2001 | ||
2 | From: Yinghai Lu <yinghai@kernel.org> | ||
3 | Date: Sat, 3 Mar 2012 13:29:20 -0800 | ||
4 | Subject: [PATCH 16/60] PNPACPI: Fix device ref leaking in acpi_pnp_match | ||
5 | |||
6 | commit 89e96ada572fb216e582dbe3f64e1a6939a37f74 upstream. | ||
7 | |||
8 | During testing pci root bus removal, found some root bus bridge is not freed. | ||
9 | If booting with pnpacpi=off, those hostbridge could be freed without problem. | ||
10 | It turns out that some devices reference are not released during acpi_pnp_match. | ||
11 | that match should not hold one device ref during every calling. | ||
12 | Add pu_device calling before returning. | ||
13 | |||
14 | Signed-off-by: Yinghai Lu <yinghai@kernel.org> | ||
15 | Signed-off-by: Len Brown <len.brown@intel.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/pnp/pnpacpi/core.c | 7 ++++++- | ||
19 | 1 file changed, 6 insertions(+), 1 deletion(-) | ||
20 | |||
21 | diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c | ||
22 | index b00c176..d21e8f5 100644 | ||
23 | --- a/drivers/pnp/pnpacpi/core.c | ||
24 | +++ b/drivers/pnp/pnpacpi/core.c | ||
25 | @@ -321,9 +321,14 @@ static int __init acpi_pnp_match(struct device *dev, void *_pnp) | ||
26 | { | ||
27 | struct acpi_device *acpi = to_acpi_device(dev); | ||
28 | struct pnp_dev *pnp = _pnp; | ||
29 | + struct device *physical_device; | ||
30 | + | ||
31 | + physical_device = acpi_get_physical_device(acpi->handle); | ||
32 | + if (physical_device) | ||
33 | + put_device(physical_device); | ||
34 | |||
35 | /* true means it matched */ | ||
36 | - return !acpi_get_physical_device(acpi->handle) | ||
37 | + return !physical_device | ||
38 | && compare_pnp_id(pnp->id, acpi_device_hid(acpi)); | ||
39 | } | ||
40 | |||
41 | -- | ||
42 | 1.7.9.5 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0017-ACPICA-Fix-regression-in-FADT-revision-checks.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0017-ACPICA-Fix-regression-in-FADT-revision-checks.patch new file mode 100644 index 00000000..05e05f3d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0017-ACPICA-Fix-regression-in-FADT-revision-checks.patch | |||
@@ -0,0 +1,69 @@ | |||
1 | From 3dc8e6e70444a964715bc72938d2a1f5330a0aff Mon Sep 17 00:00:00 2001 | ||
2 | From: Julian Anastasov <ja@ssi.bg> | ||
3 | Date: Thu, 23 Feb 2012 22:40:43 +0200 | ||
4 | Subject: [PATCH 17/60] ACPICA: Fix regression in FADT revision checks | ||
5 | |||
6 | commit 3e80acd1af40fcd91a200b0416a7616b20c5d647 upstream. | ||
7 | |||
8 | commit 64b3db22c04586997ab4be46dd5a5b99f8a2d390 (2.6.39), | ||
9 | "Remove use of unreliable FADT revision field" causes regression | ||
10 | for old P4 systems because now cst_control and other fields are | ||
11 | not reset to 0. | ||
12 | |||
13 | The effect is that acpi_processor_power_init will notice | ||
14 | cst_control != 0 and a write to CST_CNT register is performed | ||
15 | that should not happen. As result, the system oopses after the | ||
16 | "No _CST, giving up" message, sometimes in acpi_ns_internalize_name, | ||
17 | sometimes in acpi_ns_get_type, usually at random places. May be | ||
18 | during migration to CPU 1 in acpi_processor_get_throttling. | ||
19 | |||
20 | Every one of these settings help to avoid this problem: | ||
21 | - acpi=off | ||
22 | - processor.nocst=1 | ||
23 | - maxcpus=1 | ||
24 | |||
25 | The fix is to update acpi_gbl_FADT.header.length after | ||
26 | the original value is used to check for old revisions. | ||
27 | |||
28 | https://bugzilla.kernel.org/show_bug.cgi?id=42700 | ||
29 | https://bugzilla.redhat.com/show_bug.cgi?id=727865 | ||
30 | |||
31 | Signed-off-by: Julian Anastasov <ja@ssi.bg> | ||
32 | Acked-by: Bob Moore <robert.moore@intel.com> | ||
33 | Signed-off-by: Len Brown <len.brown@intel.com> | ||
34 | Cc: Jonathan Nieder <jrnieder@gmail.com> | ||
35 | Cc: Josh Boyer <jwboyer@gmail.com> | ||
36 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
37 | --- | ||
38 | drivers/acpi/acpica/tbfadt.c | 8 ++++---- | ||
39 | 1 file changed, 4 insertions(+), 4 deletions(-) | ||
40 | |||
41 | diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c | ||
42 | index 6f5588e..4c531b4 100644 | ||
43 | --- a/drivers/acpi/acpica/tbfadt.c | ||
44 | +++ b/drivers/acpi/acpica/tbfadt.c | ||
45 | @@ -350,10 +350,6 @@ static void acpi_tb_convert_fadt(void) | ||
46 | u32 address32; | ||
47 | u32 i; | ||
48 | |||
49 | - /* Update the local FADT table header length */ | ||
50 | - | ||
51 | - acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt); | ||
52 | - | ||
53 | /* | ||
54 | * Expand the 32-bit FACS and DSDT addresses to 64-bit as necessary. | ||
55 | * Later code will always use the X 64-bit field. Also, check for an | ||
56 | @@ -395,6 +391,10 @@ static void acpi_tb_convert_fadt(void) | ||
57 | acpi_gbl_FADT.boot_flags = 0; | ||
58 | } | ||
59 | |||
60 | + /* Update the local FADT table header length */ | ||
61 | + | ||
62 | + acpi_gbl_FADT.header.length = sizeof(struct acpi_table_fadt); | ||
63 | + | ||
64 | /* | ||
65 | * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X" | ||
66 | * generic address structures as necessary. Later code will always use | ||
67 | -- | ||
68 | 1.7.9.5 | ||
69 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0018-modpost-fix-ALL_INIT_DATA_SECTIONS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0018-modpost-fix-ALL_INIT_DATA_SECTIONS.patch new file mode 100644 index 00000000..7bd2cc2f --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0018-modpost-fix-ALL_INIT_DATA_SECTIONS.patch | |||
@@ -0,0 +1,32 @@ | |||
1 | From 3d588be49327372d7c61bcf5e1c691031ecee200 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jan Beulich <JBeulich@suse.com> | ||
3 | Date: Thu, 8 Mar 2012 09:41:25 +0000 | ||
4 | Subject: [PATCH 18/60] modpost: fix ALL_INIT_DATA_SECTIONS | ||
5 | |||
6 | commit 9aaf440f8fabcebf9ea79a62ccf4c212e6544b49 upstream. | ||
7 | |||
8 | This was lacking a comma between two supposed to be separate strings. | ||
9 | |||
10 | Signed-off-by: Jan Beulich <jbeulich@suse.com> | ||
11 | Signed-off-by: Michal Marek <mmarek@suse.cz> | ||
12 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
13 | --- | ||
14 | scripts/mod/modpost.c | 2 +- | ||
15 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
16 | |||
17 | diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c | ||
18 | index 2bd594e..159b4cc 100644 | ||
19 | --- a/scripts/mod/modpost.c | ||
20 | +++ b/scripts/mod/modpost.c | ||
21 | @@ -849,7 +849,7 @@ static void check_section(const char *modname, struct elf_info *elf, | ||
22 | |||
23 | #define ALL_INIT_DATA_SECTIONS \ | ||
24 | ".init.setup$", ".init.rodata$", \ | ||
25 | - ".devinit.rodata$", ".cpuinit.rodata$", ".meminit.rodata$" \ | ||
26 | + ".devinit.rodata$", ".cpuinit.rodata$", ".meminit.rodata$", \ | ||
27 | ".init.data$", ".devinit.data$", ".cpuinit.data$", ".meminit.data$" | ||
28 | #define ALL_EXIT_DATA_SECTIONS \ | ||
29 | ".exit.data$", ".devexit.data$", ".cpuexit.data$", ".memexit.data$" | ||
30 | -- | ||
31 | 1.7.9.5 | ||
32 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0019-genirq-Adjust-irq-thread-affinity-on-IRQ_SET_MASK_OK.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0019-genirq-Adjust-irq-thread-affinity-on-IRQ_SET_MASK_OK.patch new file mode 100644 index 00000000..1bd31496 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0019-genirq-Adjust-irq-thread-affinity-on-IRQ_SET_MASK_OK.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | From a62ad6cb0e0456a184ba7678d456a14cd33dfeea Mon Sep 17 00:00:00 2001 | ||
2 | From: Jiang Liu <liuj97@gmail.com> | ||
3 | Date: Fri, 30 Mar 2012 23:11:33 +0800 | ||
4 | Subject: [PATCH 19/60] genirq: Adjust irq thread affinity on | ||
5 | IRQ_SET_MASK_OK_NOCOPY return value | ||
6 | |||
7 | commit f5cb92ac82d06cb583c1f66666314c5c0a4d7913 upstream. | ||
8 | |||
9 | irq_move_masked_irq() checks the return code of | ||
10 | chip->irq_set_affinity() only for 0, but IRQ_SET_MASK_OK_NOCOPY is | ||
11 | also a valid return code, which is there to avoid a redundant copy of | ||
12 | the cpumask. But in case of IRQ_SET_MASK_OK_NOCOPY we not only avoid | ||
13 | the redundant copy, we also fail to adjust the thread affinity of an | ||
14 | eventually threaded interrupt handler. | ||
15 | |||
16 | Handle IRQ_SET_MASK_OK (==0) and IRQ_SET_MASK_OK_NOCOPY(==1) return | ||
17 | values correctly by checking the valid return values seperately. | ||
18 | |||
19 | Signed-off-by: Jiang Liu <jiang.liu@huawei.com> | ||
20 | Cc: Jiang Liu <liuj97@gmail.com> | ||
21 | Cc: Keping Chen <chenkeping@huawei.com> | ||
22 | Link: http://lkml.kernel.org/r/1333120296-13563-2-git-send-email-jiang.liu@huawei.com | ||
23 | Signed-off-by: Thomas Gleixner <tglx@linutronix.de> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | kernel/irq/migration.c | 10 +++++++--- | ||
27 | 1 file changed, 7 insertions(+), 3 deletions(-) | ||
28 | |||
29 | diff --git a/kernel/irq/migration.c b/kernel/irq/migration.c | ||
30 | index 4742090..c3c8975 100644 | ||
31 | --- a/kernel/irq/migration.c | ||
32 | +++ b/kernel/irq/migration.c | ||
33 | @@ -43,12 +43,16 @@ void irq_move_masked_irq(struct irq_data *idata) | ||
34 | * masking the irqs. | ||
35 | */ | ||
36 | if (likely(cpumask_any_and(desc->pending_mask, cpu_online_mask) | ||
37 | - < nr_cpu_ids)) | ||
38 | - if (!chip->irq_set_affinity(&desc->irq_data, | ||
39 | - desc->pending_mask, false)) { | ||
40 | + < nr_cpu_ids)) { | ||
41 | + int ret = chip->irq_set_affinity(&desc->irq_data, | ||
42 | + desc->pending_mask, false); | ||
43 | + switch (ret) { | ||
44 | + case IRQ_SET_MASK_OK: | ||
45 | cpumask_copy(desc->irq_data.affinity, desc->pending_mask); | ||
46 | + case IRQ_SET_MASK_OK_NOCOPY: | ||
47 | irq_set_thread_affinity(desc); | ||
48 | } | ||
49 | + } | ||
50 | |||
51 | cpumask_clear(desc->pending_mask); | ||
52 | } | ||
53 | -- | ||
54 | 1.7.9.5 | ||
55 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0020-tracing-Fix-ftrace-stack-trace-entries.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0020-tracing-Fix-ftrace-stack-trace-entries.patch new file mode 100644 index 00000000..00288c5a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0020-tracing-Fix-ftrace-stack-trace-entries.patch | |||
@@ -0,0 +1,77 @@ | |||
1 | From fea2076685048df406c2fc4d6542837a4306c6fd Mon Sep 17 00:00:00 2001 | ||
2 | From: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> | ||
3 | Date: Thu, 22 Mar 2012 11:18:20 +0100 | ||
4 | Subject: [PATCH 20/60] tracing: Fix ftrace stack trace entries | ||
5 | |||
6 | commit 01de982abf8c9e10fc3089e10585cd2cc914bdab upstream. | ||
7 | |||
8 | 8 hex characters tell only half the tale for 64 bit CPUs, | ||
9 | so use the appropriate length. | ||
10 | |||
11 | Link: http://lkml.kernel.org/r/1332411501-8059-2-git-send-email-wolfgang.mauerer@siemens.com | ||
12 | |||
13 | Signed-off-by: Wolfgang Mauerer <wolfgang.mauerer@siemens.com> | ||
14 | Signed-off-by: Steven Rostedt <rostedt@goodmis.org> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | kernel/trace/trace_entries.h | 16 ++++++++++++---- | ||
18 | kernel/trace/trace_export.c | 2 +- | ||
19 | 2 files changed, 13 insertions(+), 5 deletions(-) | ||
20 | |||
21 | diff --git a/kernel/trace/trace_entries.h b/kernel/trace/trace_entries.h | ||
22 | index 9336590..205dcac 100644 | ||
23 | --- a/kernel/trace/trace_entries.h | ||
24 | +++ b/kernel/trace/trace_entries.h | ||
25 | @@ -156,6 +156,12 @@ FTRACE_ENTRY_DUP(wakeup, ctx_switch_entry, | ||
26 | |||
27 | #define FTRACE_STACK_ENTRIES 8 | ||
28 | |||
29 | +#ifndef CONFIG_64BIT | ||
30 | +# define IP_FMT "%08lx" | ||
31 | +#else | ||
32 | +# define IP_FMT "%016lx" | ||
33 | +#endif | ||
34 | + | ||
35 | FTRACE_ENTRY(kernel_stack, stack_entry, | ||
36 | |||
37 | TRACE_STACK, | ||
38 | @@ -165,8 +171,9 @@ FTRACE_ENTRY(kernel_stack, stack_entry, | ||
39 | __dynamic_array(unsigned long, caller ) | ||
40 | ), | ||
41 | |||
42 | - F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n" | ||
43 | - "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n", | ||
44 | + F_printk("\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" | ||
45 | + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" | ||
46 | + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n", | ||
47 | __entry->caller[0], __entry->caller[1], __entry->caller[2], | ||
48 | __entry->caller[3], __entry->caller[4], __entry->caller[5], | ||
49 | __entry->caller[6], __entry->caller[7]) | ||
50 | @@ -181,8 +188,9 @@ FTRACE_ENTRY(user_stack, userstack_entry, | ||
51 | __array( unsigned long, caller, FTRACE_STACK_ENTRIES ) | ||
52 | ), | ||
53 | |||
54 | - F_printk("\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n" | ||
55 | - "\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n\t=> (%08lx)\n", | ||
56 | + F_printk("\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" | ||
57 | + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n" | ||
58 | + "\t=> (" IP_FMT ")\n\t=> (" IP_FMT ")\n", | ||
59 | __entry->caller[0], __entry->caller[1], __entry->caller[2], | ||
60 | __entry->caller[3], __entry->caller[4], __entry->caller[5], | ||
61 | __entry->caller[6], __entry->caller[7]) | ||
62 | diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c | ||
63 | index bbeec31..ad4000c 100644 | ||
64 | --- a/kernel/trace/trace_export.c | ||
65 | +++ b/kernel/trace/trace_export.c | ||
66 | @@ -150,7 +150,7 @@ ftrace_define_fields_##name(struct ftrace_event_call *event_call) \ | ||
67 | #define __dynamic_array(type, item) | ||
68 | |||
69 | #undef F_printk | ||
70 | -#define F_printk(fmt, args...) #fmt ", " __stringify(args) | ||
71 | +#define F_printk(fmt, args...) __stringify(fmt) ", " __stringify(args) | ||
72 | |||
73 | #undef FTRACE_ENTRY | ||
74 | #define FTRACE_ENTRY(call, struct_name, etype, tstruct, print) \ | ||
75 | -- | ||
76 | 1.7.9.5 | ||
77 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0021-tracing-Fix-ent_size-in-trace-output.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0021-tracing-Fix-ent_size-in-trace-output.patch new file mode 100644 index 00000000..d830db2d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0021-tracing-Fix-ent_size-in-trace-output.patch | |||
@@ -0,0 +1,58 @@ | |||
1 | From 23cc657edadf5b126485d90d9a6178478ccc7a9d Mon Sep 17 00:00:00 2001 | ||
2 | From: Steven Rostedt <srostedt@redhat.com> | ||
3 | Date: Tue, 27 Mar 2012 10:43:28 -0400 | ||
4 | Subject: [PATCH 21/60] tracing: Fix ent_size in trace output | ||
5 | |||
6 | commit 12b5da349a8b94c9dbc3430a6bc42eabd9eaf50b upstream. | ||
7 | |||
8 | When reading the trace file, the records of each of the per_cpu buffers | ||
9 | are examined to find the next event to print out. At the point of looking | ||
10 | at the event, the size of the event is recorded. But if the first event is | ||
11 | chosen, the other events in the other CPU buffers will reset the event size | ||
12 | that is stored in the iterator descriptor, causing the event size passed to | ||
13 | the output functions to be incorrect. | ||
14 | |||
15 | In most cases this is not a problem, but for the case of stack traces, it | ||
16 | is. With the change to the stack tracing to record a dynamic number of | ||
17 | back traces, the output depends on the size of the entry instead of the | ||
18 | fixed 8 back traces. When the entry size is not correct, the back traces | ||
19 | would not be fully printed. | ||
20 | |||
21 | Note, reading from the per-cpu trace files were not affected. | ||
22 | |||
23 | Reported-by: Thomas Gleixner <tglx@linutronix.de> | ||
24 | Tested-by: Thomas Gleixner <tglx@linutronix.de> | ||
25 | Signed-off-by: Steven Rostedt <rostedt@goodmis.org> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | kernel/trace/trace.c | 4 ++++ | ||
29 | 1 file changed, 4 insertions(+) | ||
30 | |||
31 | diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c | ||
32 | index f2bd275..697e49d 100644 | ||
33 | --- a/kernel/trace/trace.c | ||
34 | +++ b/kernel/trace/trace.c | ||
35 | @@ -1642,6 +1642,7 @@ __find_next_entry(struct trace_iterator *iter, int *ent_cpu, | ||
36 | int cpu_file = iter->cpu_file; | ||
37 | u64 next_ts = 0, ts; | ||
38 | int next_cpu = -1; | ||
39 | + int next_size = 0; | ||
40 | int cpu; | ||
41 | |||
42 | /* | ||
43 | @@ -1673,9 +1674,12 @@ __find_next_entry(struct trace_iterator *iter, int *ent_cpu, | ||
44 | next_cpu = cpu; | ||
45 | next_ts = ts; | ||
46 | next_lost = lost_events; | ||
47 | + next_size = iter->ent_size; | ||
48 | } | ||
49 | } | ||
50 | |||
51 | + iter->ent_size = next_size; | ||
52 | + | ||
53 | if (ent_cpu) | ||
54 | *ent_cpu = next_cpu; | ||
55 | |||
56 | -- | ||
57 | 1.7.9.5 | ||
58 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0022-m68k-mac-Add-missing-platform-check-before-registeri.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0022-m68k-mac-Add-missing-platform-check-before-registeri.patch new file mode 100644 index 00000000..05958eb6 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0022-m68k-mac-Add-missing-platform-check-before-registeri.patch | |||
@@ -0,0 +1,34 @@ | |||
1 | From fced6a21a4444111945939b57d4f274dcb9d0cdc Mon Sep 17 00:00:00 2001 | ||
2 | From: Geert Uytterhoeven <geert@linux-m68k.org> | ||
3 | Date: Sun, 18 Mar 2012 13:21:38 +0100 | ||
4 | Subject: [PATCH 22/60] m68k/mac: Add missing platform check before | ||
5 | registering platform devices | ||
6 | |||
7 | commit 6cfeba53911d6d2f17ebbd1246893557d5ff5aeb upstream. | ||
8 | |||
9 | On multi-platform kernels, the Mac platform devices should be registered | ||
10 | when running on Mac only. Else it may crash later. | ||
11 | |||
12 | Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | arch/m68k/mac/config.c | 3 +++ | ||
16 | 1 file changed, 3 insertions(+) | ||
17 | |||
18 | diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c | ||
19 | index c247de0..1918d76 100644 | ||
20 | --- a/arch/m68k/mac/config.c | ||
21 | +++ b/arch/m68k/mac/config.c | ||
22 | @@ -950,6 +950,9 @@ int __init mac_platform_init(void) | ||
23 | { | ||
24 | u8 *swim_base; | ||
25 | |||
26 | + if (!MACH_IS_MAC) | ||
27 | + return -ENODEV; | ||
28 | + | ||
29 | /* | ||
30 | * Serial devices | ||
31 | */ | ||
32 | -- | ||
33 | 1.7.9.5 | ||
34 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0023-mac80211-fix-possible-tid_rx-reorder_timer-use-after.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0023-mac80211-fix-possible-tid_rx-reorder_timer-use-after.patch new file mode 100644 index 00000000..52d26c3d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0023-mac80211-fix-possible-tid_rx-reorder_timer-use-after.patch | |||
@@ -0,0 +1,52 @@ | |||
1 | From 0cf704acf102ad1855f06ce26e56e34ebd63fc3c Mon Sep 17 00:00:00 2001 | ||
2 | From: Stanislaw Gruszka <sgruszka@redhat.com> | ||
3 | Date: Mon, 19 Mar 2012 16:00:26 +0100 | ||
4 | Subject: [PATCH 23/60] mac80211: fix possible tid_rx->reorder_timer use after | ||
5 | free | ||
6 | |||
7 | commit d72308bff5c2fa207949a5925b020bce74495e33 upstream. | ||
8 | |||
9 | Is possible that we will arm the tid_rx->reorder_timer after | ||
10 | del_timer_sync() in ___ieee80211_stop_rx_ba_session(). We need to stop | ||
11 | timer after RCU grace period finish, so move it to | ||
12 | ieee80211_free_tid_rx(). Timer will not be armed again, as | ||
13 | rcu_dereference(sta->ampdu_mlme.tid_rx[tid]) will return NULL. | ||
14 | |||
15 | Debug object detected problem with the following warning: | ||
16 | ODEBUG: free active (active state 0) object type: timer_list hint: sta_rx_agg_reorder_timer_expired+0x0/0xf0 [mac80211] | ||
17 | |||
18 | Bug report (with all warning messages): | ||
19 | https://bugzilla.redhat.com/show_bug.cgi?id=804007 | ||
20 | |||
21 | Reported-by: "jan p. springer" <jsd@igroup.org> | ||
22 | Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> | ||
23 | Signed-off-by: John W. Linville <linville@tuxdriver.com> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | net/mac80211/agg-rx.c | 3 ++- | ||
27 | 1 file changed, 2 insertions(+), 1 deletion(-) | ||
28 | |||
29 | diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c | ||
30 | index 41c2310..aea1559 100644 | ||
31 | --- a/net/mac80211/agg-rx.c | ||
32 | +++ b/net/mac80211/agg-rx.c | ||
33 | @@ -49,6 +49,8 @@ static void ieee80211_free_tid_rx(struct rcu_head *h) | ||
34 | container_of(h, struct tid_ampdu_rx, rcu_head); | ||
35 | int i; | ||
36 | |||
37 | + del_timer_sync(&tid_rx->reorder_timer); | ||
38 | + | ||
39 | for (i = 0; i < tid_rx->buf_size; i++) | ||
40 | dev_kfree_skb(tid_rx->reorder_buf[i]); | ||
41 | kfree(tid_rx->reorder_buf); | ||
42 | @@ -88,7 +90,6 @@ void ___ieee80211_stop_rx_ba_session(struct sta_info *sta, u16 tid, | ||
43 | tid, 0, reason); | ||
44 | |||
45 | del_timer_sync(&tid_rx->session_timer); | ||
46 | - del_timer_sync(&tid_rx->reorder_timer); | ||
47 | |||
48 | call_rcu(&tid_rx->rcu_head, ieee80211_free_tid_rx); | ||
49 | } | ||
50 | -- | ||
51 | 1.7.9.5 | ||
52 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0024-rtlwifi-rtl8192ce-rtl8192cu-rtl8192de-Fix-low-gain-s.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0024-rtlwifi-rtl8192ce-rtl8192cu-rtl8192de-Fix-low-gain-s.patch new file mode 100644 index 00000000..a6dfc462 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0024-rtlwifi-rtl8192ce-rtl8192cu-rtl8192de-Fix-low-gain-s.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From 2e80dec6dad3b037b7b6499048c139436c6f0710 Mon Sep 17 00:00:00 2001 | ||
2 | From: Larry Finger <Larry.Finger@lwfinger.net> | ||
3 | Date: Mon, 26 Mar 2012 09:59:48 -0500 | ||
4 | Subject: [PATCH 24/60] rtlwifi: rtl8192ce: rtl8192cu: rtl8192de: Fix low-gain | ||
5 | setting when scanning | ||
6 | |||
7 | commit 643c61e119459e9d750087b7b34be94491efebf9 upstream. | ||
8 | |||
9 | In https://bugzilla.redhat.com/show_bug.cgi?id=770207, slowdowns of driver | ||
10 | rtl8192ce are reported. One fix (commit a9b89e2) has already been applied, | ||
11 | and it helped, but the maximum RX speed would still drop to 1 Mbps. As in | ||
12 | the previous fix, the initial gain was determined to be the problem; however, | ||
13 | the problem arises from a setting of the gain when scans are started. | ||
14 | |||
15 | Driver rtl8192de also has the same code structure - this one is fixed as well. | ||
16 | |||
17 | Reported-and-Tested-by: Ivan Pesin <ivan.pesin@gmail.com> | ||
18 | Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> | ||
19 | Signed-off-by: John W. Linville <linville@tuxdriver.com> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c | 2 +- | ||
23 | drivers/net/wireless/rtlwifi/rtl8192de/phy.c | 2 +- | ||
24 | 2 files changed, 2 insertions(+), 2 deletions(-) | ||
25 | |||
26 | diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c b/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c | ||
27 | index 1f07558..f20678a 100644 | ||
28 | --- a/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c | ||
29 | +++ b/drivers/net/wireless/rtlwifi/rtl8192c/phy_common.c | ||
30 | @@ -1968,7 +1968,7 @@ void rtl92c_phy_set_io(struct ieee80211_hw *hw) | ||
31 | break; | ||
32 | case IO_CMD_PAUSE_DM_BY_SCAN: | ||
33 | rtlphy->initgain_backup.xaagccore1 = dm_digtable.cur_igvalue; | ||
34 | - dm_digtable.cur_igvalue = 0x17; | ||
35 | + dm_digtable.cur_igvalue = 0x37; | ||
36 | rtl92c_dm_write_dig(hw); | ||
37 | break; | ||
38 | default: | ||
39 | diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/phy.c b/drivers/net/wireless/rtlwifi/rtl8192de/phy.c | ||
40 | index 0883349..2cf4c5f 100644 | ||
41 | --- a/drivers/net/wireless/rtlwifi/rtl8192de/phy.c | ||
42 | +++ b/drivers/net/wireless/rtlwifi/rtl8192de/phy.c | ||
43 | @@ -3192,7 +3192,7 @@ static void rtl92d_phy_set_io(struct ieee80211_hw *hw) | ||
44 | break; | ||
45 | case IO_CMD_PAUSE_DM_BY_SCAN: | ||
46 | rtlphy->initgain_backup.xaagccore1 = de_digtable.cur_igvalue; | ||
47 | - de_digtable.cur_igvalue = 0x17; | ||
48 | + de_digtable.cur_igvalue = 0x37; | ||
49 | rtl92d_dm_write_dig(hw); | ||
50 | break; | ||
51 | default: | ||
52 | -- | ||
53 | 1.7.9.5 | ||
54 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0025-drm-Validate-requested-virtual-size-against-allocate.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0025-drm-Validate-requested-virtual-size-against-allocate.patch new file mode 100644 index 00000000..f38c6fb8 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0025-drm-Validate-requested-virtual-size-against-allocate.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | From 604965714e342993a12bd7aff566b9d4dd531fe9 Mon Sep 17 00:00:00 2001 | ||
2 | From: Chris Wilson <chris@chris-wilson.co.uk> | ||
3 | Date: Mon, 26 Mar 2012 21:15:53 +0100 | ||
4 | Subject: [PATCH 25/60] drm: Validate requested virtual size against allocated | ||
5 | fb size | ||
6 | |||
7 | commit 62fb376e214d3c1bfdf6fbb77dac162f6da04d7e upstream. | ||
8 | |||
9 | mplayer -vo fbdev tries to create a screen that is twice as tall as the | ||
10 | allocated framebuffer for "doublebuffering". By default, and all in-tree | ||
11 | users, only sufficient memory is allocated and mapped to satisfy the | ||
12 | smallest framebuffer and the virtual size is no larger than the actual. | ||
13 | For these users, we should therefore reject any userspace request to | ||
14 | create a screen that requires a buffer larger than the framebuffer | ||
15 | originally allocated. | ||
16 | |||
17 | References: https://bugs.freedesktop.org/show_bug.cgi?id=38138 | ||
18 | Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
19 | Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
20 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/gpu/drm/drm_fb_helper.c | 8 ++++++-- | ||
24 | 1 file changed, 6 insertions(+), 2 deletions(-) | ||
25 | |||
26 | diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c | ||
27 | index 80fe39d..dd58373 100644 | ||
28 | --- a/drivers/gpu/drm/drm_fb_helper.c | ||
29 | +++ b/drivers/gpu/drm/drm_fb_helper.c | ||
30 | @@ -610,9 +610,13 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var, | ||
31 | return -EINVAL; | ||
32 | |||
33 | /* Need to resize the fb object !!! */ | ||
34 | - if (var->bits_per_pixel > fb->bits_per_pixel || var->xres > fb->width || var->yres > fb->height) { | ||
35 | + if (var->bits_per_pixel > fb->bits_per_pixel || | ||
36 | + var->xres > fb->width || var->yres > fb->height || | ||
37 | + var->xres_virtual > fb->width || var->yres_virtual > fb->height) { | ||
38 | DRM_DEBUG("fb userspace requested width/height/bpp is greater than current fb " | ||
39 | - "object %dx%d-%d > %dx%d-%d\n", var->xres, var->yres, var->bits_per_pixel, | ||
40 | + "request %dx%d-%d (virtual %dx%d) > %dx%d-%d\n", | ||
41 | + var->xres, var->yres, var->bits_per_pixel, | ||
42 | + var->xres_virtual, var->yres_virtual, | ||
43 | fb->width, fb->height, fb->bits_per_pixel); | ||
44 | return -EINVAL; | ||
45 | } | ||
46 | -- | ||
47 | 1.7.9.5 | ||
48 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0026-drm-radeon-kms-fix-fans-after-resume.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0026-drm-radeon-kms-fix-fans-after-resume.patch new file mode 100644 index 00000000..44a92d2c --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0026-drm-radeon-kms-fix-fans-after-resume.patch | |||
@@ -0,0 +1,75 @@ | |||
1 | From bfb12525292fbd7a9837de23fc1e8dda589b43a1 Mon Sep 17 00:00:00 2001 | ||
2 | From: Alex Deucher <alexander.deucher@amd.com> | ||
3 | Date: Thu, 29 Mar 2012 19:04:08 -0400 | ||
4 | Subject: [PATCH 26/60] drm/radeon/kms: fix fans after resume | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | commit 402976fe51b2d1a58a29ba06fa1ca5ace3a4cdcd upstream. | ||
10 | |||
11 | On pre-R600 asics, the SpeedFanControl table is not | ||
12 | executed as part of ASIC_Init as it is on newer asics. | ||
13 | |||
14 | Fixes: | ||
15 | https://bugzilla.kernel.org/show_bug.cgi?id=29412 | ||
16 | |||
17 | Signed-off-by: Alex Deucher <alexander.deucher@amd.com> | ||
18 | Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> | ||
19 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | drivers/gpu/drm/radeon/atom.c | 15 ++++++++++++++- | ||
23 | drivers/gpu/drm/radeon/atom.h | 1 + | ||
24 | 2 files changed, 15 insertions(+), 1 deletion(-) | ||
25 | |||
26 | diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c | ||
27 | index 14cc88a..3a05cdb 100644 | ||
28 | --- a/drivers/gpu/drm/radeon/atom.c | ||
29 | +++ b/drivers/gpu/drm/radeon/atom.c | ||
30 | @@ -1304,8 +1304,11 @@ struct atom_context *atom_parse(struct card_info *card, void *bios) | ||
31 | |||
32 | int atom_asic_init(struct atom_context *ctx) | ||
33 | { | ||
34 | + struct radeon_device *rdev = ctx->card->dev->dev_private; | ||
35 | int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR); | ||
36 | uint32_t ps[16]; | ||
37 | + int ret; | ||
38 | + | ||
39 | memset(ps, 0, 64); | ||
40 | |||
41 | ps[0] = cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR)); | ||
42 | @@ -1315,7 +1318,17 @@ int atom_asic_init(struct atom_context *ctx) | ||
43 | |||
44 | if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) | ||
45 | return 1; | ||
46 | - return atom_execute_table(ctx, ATOM_CMD_INIT, ps); | ||
47 | + ret = atom_execute_table(ctx, ATOM_CMD_INIT, ps); | ||
48 | + if (ret) | ||
49 | + return ret; | ||
50 | + | ||
51 | + memset(ps, 0, 64); | ||
52 | + | ||
53 | + if (rdev->family < CHIP_R600) { | ||
54 | + if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL)) | ||
55 | + atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps); | ||
56 | + } | ||
57 | + return ret; | ||
58 | } | ||
59 | |||
60 | void atom_destroy(struct atom_context *ctx) | ||
61 | diff --git a/drivers/gpu/drm/radeon/atom.h b/drivers/gpu/drm/radeon/atom.h | ||
62 | index 93cfe20..25fea63 100644 | ||
63 | --- a/drivers/gpu/drm/radeon/atom.h | ||
64 | +++ b/drivers/gpu/drm/radeon/atom.h | ||
65 | @@ -44,6 +44,7 @@ | ||
66 | #define ATOM_CMD_SETSCLK 0x0A | ||
67 | #define ATOM_CMD_SETMCLK 0x0B | ||
68 | #define ATOM_CMD_SETPCLK 0x0C | ||
69 | +#define ATOM_CMD_SPDFANCNTL 0x39 | ||
70 | |||
71 | #define ATOM_DATA_FWI_PTR 0xC | ||
72 | #define ATOM_DATA_IIO_PTR 0x32 | ||
73 | -- | ||
74 | 1.7.9.5 | ||
75 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0027-drm-i915-no-lvds-quirk-on-MSI-DC500.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0027-drm-i915-no-lvds-quirk-on-MSI-DC500.patch new file mode 100644 index 00000000..2fc0804e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0027-drm-i915-no-lvds-quirk-on-MSI-DC500.patch | |||
@@ -0,0 +1,40 @@ | |||
1 | From 17729a991754faddaeec8880db9881a5bc4fab5e Mon Sep 17 00:00:00 2001 | ||
2 | From: Anisse Astier <anisse@astier.eu> | ||
3 | Date: Wed, 7 Mar 2012 18:36:35 +0100 | ||
4 | Subject: [PATCH 27/60] drm/i915: no-lvds quirk on MSI DC500 | ||
5 | |||
6 | commit 97effadb65ed08809e1720c8d3ee80b73a93665c upstream. | ||
7 | |||
8 | This hardware doesn't have an LVDS, it's a desktop box. Fix incorrect | ||
9 | LVDS detection. | ||
10 | |||
11 | Signed-off-by: Anisse Astier <anisse@astier.eu> | ||
12 | Acked-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
13 | Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/gpu/drm/i915/intel_lvds.c | 8 ++++++++ | ||
17 | 1 file changed, 8 insertions(+) | ||
18 | |||
19 | diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c | ||
20 | index b83f745..583c2d0 100644 | ||
21 | --- a/drivers/gpu/drm/i915/intel_lvds.c | ||
22 | +++ b/drivers/gpu/drm/i915/intel_lvds.c | ||
23 | @@ -731,6 +731,14 @@ static const struct dmi_system_id intel_no_lvds[] = { | ||
24 | DMI_MATCH(DMI_BOARD_NAME, "AT5NM10T-I"), | ||
25 | }, | ||
26 | }, | ||
27 | + { | ||
28 | + .callback = intel_no_lvds_dmi_callback, | ||
29 | + .ident = "MSI Wind Box DC500", | ||
30 | + .matches = { | ||
31 | + DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), | ||
32 | + DMI_MATCH(DMI_BOARD_NAME, "MS-7469"), | ||
33 | + }, | ||
34 | + }, | ||
35 | |||
36 | { } /* terminating entry */ | ||
37 | }; | ||
38 | -- | ||
39 | 1.7.9.5 | ||
40 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0028-drm-i915-Sanitize-BIOS-debugging-bits-from-PIPECONF.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0028-drm-i915-Sanitize-BIOS-debugging-bits-from-PIPECONF.patch new file mode 100644 index 00000000..c70337ae --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0028-drm-i915-Sanitize-BIOS-debugging-bits-from-PIPECONF.patch | |||
@@ -0,0 +1,62 @@ | |||
1 | From 2bb2e47c60f77b768affa48bf847526054143d81 Mon Sep 17 00:00:00 2001 | ||
2 | From: Chris Wilson <chris@chris-wilson.co.uk> | ||
3 | Date: Thu, 22 Mar 2012 15:00:50 +0000 | ||
4 | Subject: [PATCH 28/60] drm/i915: Sanitize BIOS debugging bits from PIPECONF | ||
5 | |||
6 | commit f47166d2b0001fcb752b40c5a2d4db986dfbea68 upstream. | ||
7 | |||
8 | Quoting the BSpec from time immemorial: | ||
9 | |||
10 | PIPEACONF, bits 28:27: Frame Start Delay (Debug) | ||
11 | |||
12 | Used to delay the frame start signal that is sent to the display planes. | ||
13 | Care must be taken to insure that there are enough lines during VBLANK | ||
14 | to support this setting. | ||
15 | |||
16 | An instance of the BIOS leaving these bits set was found in the wild, | ||
17 | where it caused our modesetting to go all squiffy and skewiff. | ||
18 | |||
19 | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47271 | ||
20 | Reported-and-tested-by: Eva Wang <evawang@linpus.com> | ||
21 | Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=43012 | ||
22 | Reported-and-tested-by: Carl Richell <carl@system76.com> | ||
23 | Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
24 | Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | drivers/gpu/drm/i915/i915_reg.h | 1 + | ||
28 | drivers/gpu/drm/i915/intel_display.c | 6 ++++++ | ||
29 | 2 files changed, 7 insertions(+) | ||
30 | |||
31 | diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h | ||
32 | index 1608d2a..2f99fd4 100644 | ||
33 | --- a/drivers/gpu/drm/i915/i915_reg.h | ||
34 | +++ b/drivers/gpu/drm/i915/i915_reg.h | ||
35 | @@ -2312,6 +2312,7 @@ | ||
36 | #define PIPECONF_DISABLE 0 | ||
37 | #define PIPECONF_DOUBLE_WIDE (1<<30) | ||
38 | #define I965_PIPECONF_ACTIVE (1<<30) | ||
39 | +#define PIPECONF_FRAME_START_DELAY_MASK (3<<27) | ||
40 | #define PIPECONF_SINGLE_WIDE 0 | ||
41 | #define PIPECONF_PIPE_UNLOCKED 0 | ||
42 | #define PIPECONF_PIPE_LOCKED (1<<25) | ||
43 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c | ||
44 | index 9ec9755..9011f48 100644 | ||
45 | --- a/drivers/gpu/drm/i915/intel_display.c | ||
46 | +++ b/drivers/gpu/drm/i915/intel_display.c | ||
47 | @@ -7278,6 +7278,12 @@ static void intel_sanitize_modesetting(struct drm_device *dev, | ||
48 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
49 | u32 reg, val; | ||
50 | |||
51 | + /* Clear any frame start delays used for debugging left by the BIOS */ | ||
52 | + for_each_pipe(pipe) { | ||
53 | + reg = PIPECONF(pipe); | ||
54 | + I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK); | ||
55 | + } | ||
56 | + | ||
57 | if (HAS_PCH_SPLIT(dev)) | ||
58 | return; | ||
59 | |||
60 | -- | ||
61 | 1.7.9.5 | ||
62 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0029-drm-i915-Add-lock-on-drm_helper_resume_force_mode.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0029-drm-i915-Add-lock-on-drm_helper_resume_force_mode.patch new file mode 100644 index 00000000..72dd824c --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0029-drm-i915-Add-lock-on-drm_helper_resume_force_mode.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 4ab7c0a9a8f866f035d64d0b71dc7cad9bf59f51 Mon Sep 17 00:00:00 2001 | ||
2 | From: Sean Paul <seanpaul@chromium.org> | ||
3 | Date: Fri, 23 Mar 2012 08:52:58 -0400 | ||
4 | Subject: [PATCH 29/60] drm/i915: Add lock on drm_helper_resume_force_mode | ||
5 | |||
6 | commit 927a2f119e8235238a2fc64871051b16c9bdae75 upstream. | ||
7 | |||
8 | i915_drm_thaw was not locking the mode_config lock when calling | ||
9 | drm_helper_resume_force_mode. When there were multiple wake sources, | ||
10 | this caused FDI training failure on SNB which in turn corrupted the | ||
11 | display. | ||
12 | |||
13 | Signed-off-by: Sean Paul <seanpaul@chromium.org> | ||
14 | Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
15 | Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/gpu/drm/i915/i915_drv.c | 2 ++ | ||
19 | 1 file changed, 2 insertions(+) | ||
20 | |||
21 | diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c | ||
22 | index d04597d..e52b705 100644 | ||
23 | --- a/drivers/gpu/drm/i915/i915_drv.c | ||
24 | +++ b/drivers/gpu/drm/i915/i915_drv.c | ||
25 | @@ -508,7 +508,9 @@ static int i915_drm_thaw(struct drm_device *dev) | ||
26 | drm_irq_install(dev); | ||
27 | |||
28 | /* Resume the modeset for every activated CRTC */ | ||
29 | + mutex_lock(&dev->mode_config.mutex); | ||
30 | drm_helper_resume_force_mode(dev); | ||
31 | + mutex_unlock(&dev->mode_config.mutex); | ||
32 | |||
33 | if (IS_IRONLAKE_M(dev)) | ||
34 | ironlake_enable_rc6(dev); | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0030-drm-i915-quirk-away-broken-OpRegion-VBT.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0030-drm-i915-quirk-away-broken-OpRegion-VBT.patch new file mode 100644 index 00000000..de8ad51e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0030-drm-i915-quirk-away-broken-OpRegion-VBT.patch | |||
@@ -0,0 +1,71 @@ | |||
1 | From 58767bacea3aca7d03afa92650f014213ef1681d Mon Sep 17 00:00:00 2001 | ||
2 | From: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
3 | Date: Sat, 24 Mar 2012 23:51:30 +0100 | ||
4 | Subject: [PATCH 30/60] drm/i915: quirk away broken OpRegion VBT | ||
5 | |||
6 | commit 25e341cfc33d94435472983825163e97fe370a6c upstream. | ||
7 | |||
8 | Somehow the BIOS manages to screw things up when copying the VBT | ||
9 | around, because the one we scrap from the VBIOS rom actually works. | ||
10 | |||
11 | Tested-by: Markus Heinz <markus.heinz@uni-dortmund.de> | ||
12 | Acked-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
13 | Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> | ||
14 | Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=28812 | ||
15 | Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/gpu/drm/i915/intel_bios.c | 23 ++++++++++++++++++++++- | ||
19 | 1 file changed, 22 insertions(+), 1 deletion(-) | ||
20 | |||
21 | diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c | ||
22 | index 63880e2..22efb08 100644 | ||
23 | --- a/drivers/gpu/drm/i915/intel_bios.c | ||
24 | +++ b/drivers/gpu/drm/i915/intel_bios.c | ||
25 | @@ -24,6 +24,7 @@ | ||
26 | * Eric Anholt <eric@anholt.net> | ||
27 | * | ||
28 | */ | ||
29 | +#include <linux/dmi.h> | ||
30 | #include <drm/drm_dp_helper.h> | ||
31 | #include "drmP.h" | ||
32 | #include "drm.h" | ||
33 | @@ -621,6 +622,26 @@ init_vbt_defaults(struct drm_i915_private *dev_priv) | ||
34 | dev_priv->edp.bpp = 18; | ||
35 | } | ||
36 | |||
37 | +static int __init intel_no_opregion_vbt_callback(const struct dmi_system_id *id) | ||
38 | +{ | ||
39 | + DRM_DEBUG_KMS("Falling back to manually reading VBT from " | ||
40 | + "VBIOS ROM for %s\n", | ||
41 | + id->ident); | ||
42 | + return 1; | ||
43 | +} | ||
44 | + | ||
45 | +static const struct dmi_system_id intel_no_opregion_vbt[] = { | ||
46 | + { | ||
47 | + .callback = intel_no_opregion_vbt_callback, | ||
48 | + .ident = "ThinkCentre A57", | ||
49 | + .matches = { | ||
50 | + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), | ||
51 | + DMI_MATCH(DMI_PRODUCT_NAME, "97027RG"), | ||
52 | + }, | ||
53 | + }, | ||
54 | + { } | ||
55 | +}; | ||
56 | + | ||
57 | /** | ||
58 | * intel_parse_bios - find VBT and initialize settings from the BIOS | ||
59 | * @dev: DRM device | ||
60 | @@ -641,7 +662,7 @@ intel_parse_bios(struct drm_device *dev) | ||
61 | init_vbt_defaults(dev_priv); | ||
62 | |||
63 | /* XXX Should this validation be moved to intel_opregion.c? */ | ||
64 | - if (dev_priv->opregion.vbt) { | ||
65 | + if (!dmi_check_system(intel_no_opregion_vbt) && dev_priv->opregion.vbt) { | ||
66 | struct vbt_header *vbt = dev_priv->opregion.vbt; | ||
67 | if (memcmp(vbt->signature, "$VBT", 4) == 0) { | ||
68 | DRM_DEBUG_KMS("Using VBT from OpRegion: %20s\n", | ||
69 | -- | ||
70 | 1.7.9.5 | ||
71 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0031-r8169-runtime-resume-before-shutdown.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0031-r8169-runtime-resume-before-shutdown.patch new file mode 100644 index 00000000..b246c48e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0031-r8169-runtime-resume-before-shutdown.patch | |||
@@ -0,0 +1,57 @@ | |||
1 | From 5cc5bed22b5a987cd388292e64b2b4d473ddef10 Mon Sep 17 00:00:00 2001 | ||
2 | From: =?UTF-8?q?fran=C3=A7ois=20romieu?= <romieu@fr.zoreil.com> | ||
3 | Date: Tue, 6 Mar 2012 01:14:12 +0000 | ||
4 | Subject: [PATCH 31/60] r8169: runtime resume before shutdown. | ||
5 | |||
6 | commit 2a15cd2ff488a9fdb55e5e34060f499853b27c77 upstream. | ||
7 | |||
8 | With runtime PM, if the ethernet cable is disconnected, the device is | ||
9 | transitioned to D3 state to conserve energy. If the system is shutdown | ||
10 | in this state, any register accesses in rtl_shutdown are dropped on | ||
11 | the floor. As the device was programmed by .runtime_suspend() to wake | ||
12 | on link changes, it is thus brought back up as soon as the link recovers. | ||
13 | |||
14 | Resuming every suspended device through the driver core would slow things | ||
15 | down and it is not clear how many devices really need it now. | ||
16 | |||
17 | Original report and D0 transition patch by Sameer Nanda. Patch has been | ||
18 | changed to comply with advices by Rafael J. Wysocki and the PM folks. | ||
19 | |||
20 | Reported-by: Sameer Nanda <snanda@chromium.org> | ||
21 | Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> | ||
22 | Cc: Rafael J. Wysocki <rjw@sisk.pl> | ||
23 | Cc: Hayes Wang <hayeswang@realtek.com> | ||
24 | Cc: Alan Stern <stern@rowland.harvard.edu> | ||
25 | Acked-by: Rafael J. Wysocki <rjw@sisk.pl> | ||
26 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
28 | --- | ||
29 | drivers/net/ethernet/realtek/r8169.c | 5 +++++ | ||
30 | 1 file changed, 5 insertions(+) | ||
31 | |||
32 | diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c | ||
33 | index 0cf2351..697cae3 100644 | ||
34 | --- a/drivers/net/ethernet/realtek/r8169.c | ||
35 | +++ b/drivers/net/ethernet/realtek/r8169.c | ||
36 | @@ -6194,6 +6194,9 @@ static void rtl_shutdown(struct pci_dev *pdev) | ||
37 | { | ||
38 | struct net_device *dev = pci_get_drvdata(pdev); | ||
39 | struct rtl8169_private *tp = netdev_priv(dev); | ||
40 | + struct device *d = &pdev->dev; | ||
41 | + | ||
42 | + pm_runtime_get_sync(d); | ||
43 | |||
44 | rtl8169_net_suspend(dev); | ||
45 | |||
46 | @@ -6215,6 +6218,8 @@ static void rtl_shutdown(struct pci_dev *pdev) | ||
47 | pci_wake_from_d3(pdev, true); | ||
48 | pci_set_power_state(pdev, PCI_D3hot); | ||
49 | } | ||
50 | + | ||
51 | + pm_runtime_put_noidle(d); | ||
52 | } | ||
53 | |||
54 | static struct pci_driver rtl8169_pci_driver = { | ||
55 | -- | ||
56 | 1.7.9.5 | ||
57 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0032-target-Fix-unsupported-WRITE_SAME-sense-payload.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0032-target-Fix-unsupported-WRITE_SAME-sense-payload.patch new file mode 100644 index 00000000..40f2252e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0032-target-Fix-unsupported-WRITE_SAME-sense-payload.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From a66bf3e98840599c67fd1d60563bb1aaa0c0622f Mon Sep 17 00:00:00 2001 | ||
2 | From: Martin Svec <martin.svec@zoner.cz> | ||
3 | Date: Mon, 6 Feb 2012 22:13:25 -0800 | ||
4 | Subject: [PATCH 32/60] target: Fix unsupported WRITE_SAME sense payload | ||
5 | |||
6 | commit 67236c44741e250199ccd77f1115568e68cf8848 upstream. | ||
7 | |||
8 | This patch fixes a bug in target-core where unsupported WRITE_SAME ops | ||
9 | from a target_check_write_same_discard() failure was incorrectly | ||
10 | returning CHECK_CONDITION w/ TCM_INVALID_CDB_FIELD sense data. | ||
11 | This was causing some clients to not properly fall back, so go ahead | ||
12 | and use the correct TCM_UNSUPPORTED_SCSI_OPCODE sense for this case. | ||
13 | |||
14 | Reported-by: Martin Svec <martin.svec@zoner.cz> | ||
15 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/target/target_core_transport.c | 6 +++--- | ||
19 | 1 file changed, 3 insertions(+), 3 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c | ||
22 | index cdb774b..5660916 100644 | ||
23 | --- a/drivers/target/target_core_transport.c | ||
24 | +++ b/drivers/target/target_core_transport.c | ||
25 | @@ -2666,7 +2666,7 @@ static int transport_generic_cmd_sequencer( | ||
26 | cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB; | ||
27 | |||
28 | if (target_check_write_same_discard(&cdb[10], dev) < 0) | ||
29 | - goto out_invalid_cdb_field; | ||
30 | + goto out_unsupported_cdb; | ||
31 | if (!passthrough) | ||
32 | cmd->execute_task = target_emulate_write_same; | ||
33 | break; | ||
34 | @@ -2949,7 +2949,7 @@ static int transport_generic_cmd_sequencer( | ||
35 | cmd->se_cmd_flags |= SCF_SCSI_CONTROL_SG_IO_CDB; | ||
36 | |||
37 | if (target_check_write_same_discard(&cdb[1], dev) < 0) | ||
38 | - goto out_invalid_cdb_field; | ||
39 | + goto out_unsupported_cdb; | ||
40 | if (!passthrough) | ||
41 | cmd->execute_task = target_emulate_write_same; | ||
42 | break; | ||
43 | @@ -2972,7 +2972,7 @@ static int transport_generic_cmd_sequencer( | ||
44 | * of byte 1 bit 3 UNMAP instead of original reserved field | ||
45 | */ | ||
46 | if (target_check_write_same_discard(&cdb[1], dev) < 0) | ||
47 | - goto out_invalid_cdb_field; | ||
48 | + goto out_unsupported_cdb; | ||
49 | if (!passthrough) | ||
50 | cmd->execute_task = target_emulate_write_same; | ||
51 | break; | ||
52 | -- | ||
53 | 1.7.9.5 | ||
54 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0033-kgdb-debug_core-pass-the-breakpoint-struct-instead-o.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0033-kgdb-debug_core-pass-the-breakpoint-struct-instead-o.patch new file mode 100644 index 00000000..310833f1 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0033-kgdb-debug_core-pass-the-breakpoint-struct-instead-o.patch | |||
@@ -0,0 +1,180 @@ | |||
1 | From 69214d0d1b5f2f3e05dee62617d28c7e9daccc80 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
3 | Date: Wed, 21 Mar 2012 10:17:03 -0500 | ||
4 | Subject: [PATCH 33/60] kgdb,debug_core: pass the breakpoint struct instead of | ||
5 | address and memory | ||
6 | |||
7 | commit 98b54aa1a2241b59372468bd1e9c2d207bdba54b upstream. | ||
8 | |||
9 | There is extra state information that needs to be exposed in the | ||
10 | kgdb_bpt structure for tracking how a breakpoint was installed. The | ||
11 | debug_core only uses the the probe_kernel_write() to install | ||
12 | breakpoints, but this is not enough for all the archs. Some arch such | ||
13 | as x86 need to use text_poke() in order to install a breakpoint into a | ||
14 | read only page. | ||
15 | |||
16 | Passing the kgdb_bpt structure to kgdb_arch_set_breakpoint() and | ||
17 | kgdb_arch_remove_breakpoint() allows other archs to set the type | ||
18 | variable which indicates how the breakpoint was installed. | ||
19 | |||
20 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | include/linux/kgdb.h | 4 ++-- | ||
24 | kernel/debug/debug_core.c | 53 ++++++++++++++++++++------------------------- | ||
25 | 2 files changed, 26 insertions(+), 31 deletions(-) | ||
26 | |||
27 | diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h | ||
28 | index fa39183..e5d689c 100644 | ||
29 | --- a/include/linux/kgdb.h | ||
30 | +++ b/include/linux/kgdb.h | ||
31 | @@ -207,8 +207,8 @@ extern void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long pc); | ||
32 | |||
33 | /* Optional functions. */ | ||
34 | extern int kgdb_validate_break_address(unsigned long addr); | ||
35 | -extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr); | ||
36 | -extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); | ||
37 | +extern int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt); | ||
38 | +extern int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt); | ||
39 | |||
40 | /** | ||
41 | * kgdb_arch_late - Perform any architecture specific initalization. | ||
42 | diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c | ||
43 | index 0d7c087..7fda904 100644 | ||
44 | --- a/kernel/debug/debug_core.c | ||
45 | +++ b/kernel/debug/debug_core.c | ||
46 | @@ -157,37 +157,39 @@ early_param("nokgdbroundup", opt_nokgdbroundup); | ||
47 | * Weak aliases for breakpoint management, | ||
48 | * can be overriden by architectures when needed: | ||
49 | */ | ||
50 | -int __weak kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr) | ||
51 | +int __weak kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) | ||
52 | { | ||
53 | int err; | ||
54 | |||
55 | - err = probe_kernel_read(saved_instr, (char *)addr, BREAK_INSTR_SIZE); | ||
56 | + err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr, | ||
57 | + BREAK_INSTR_SIZE); | ||
58 | if (err) | ||
59 | return err; | ||
60 | - | ||
61 | - return probe_kernel_write((char *)addr, arch_kgdb_ops.gdb_bpt_instr, | ||
62 | - BREAK_INSTR_SIZE); | ||
63 | + err = probe_kernel_write((char *)bpt->bpt_addr, | ||
64 | + arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE); | ||
65 | + return err; | ||
66 | } | ||
67 | |||
68 | -int __weak kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle) | ||
69 | +int __weak kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt) | ||
70 | { | ||
71 | - return probe_kernel_write((char *)addr, | ||
72 | - (char *)bundle, BREAK_INSTR_SIZE); | ||
73 | + return probe_kernel_write((char *)bpt->bpt_addr, | ||
74 | + (char *)bpt->saved_instr, BREAK_INSTR_SIZE); | ||
75 | } | ||
76 | |||
77 | int __weak kgdb_validate_break_address(unsigned long addr) | ||
78 | { | ||
79 | - char tmp_variable[BREAK_INSTR_SIZE]; | ||
80 | + struct kgdb_bkpt tmp; | ||
81 | int err; | ||
82 | - /* Validate setting the breakpoint and then removing it. In the | ||
83 | + /* Validate setting the breakpoint and then removing it. If the | ||
84 | * remove fails, the kernel needs to emit a bad message because we | ||
85 | * are deep trouble not being able to put things back the way we | ||
86 | * found them. | ||
87 | */ | ||
88 | - err = kgdb_arch_set_breakpoint(addr, tmp_variable); | ||
89 | + tmp.bpt_addr = addr; | ||
90 | + err = kgdb_arch_set_breakpoint(&tmp); | ||
91 | if (err) | ||
92 | return err; | ||
93 | - err = kgdb_arch_remove_breakpoint(addr, tmp_variable); | ||
94 | + err = kgdb_arch_remove_breakpoint(&tmp); | ||
95 | if (err) | ||
96 | printk(KERN_ERR "KGDB: Critical breakpoint error, kernel " | ||
97 | "memory destroyed at: %lx", addr); | ||
98 | @@ -231,7 +233,6 @@ static void kgdb_flush_swbreak_addr(unsigned long addr) | ||
99 | */ | ||
100 | int dbg_activate_sw_breakpoints(void) | ||
101 | { | ||
102 | - unsigned long addr; | ||
103 | int error; | ||
104 | int ret = 0; | ||
105 | int i; | ||
106 | @@ -240,16 +241,15 @@ int dbg_activate_sw_breakpoints(void) | ||
107 | if (kgdb_break[i].state != BP_SET) | ||
108 | continue; | ||
109 | |||
110 | - addr = kgdb_break[i].bpt_addr; | ||
111 | - error = kgdb_arch_set_breakpoint(addr, | ||
112 | - kgdb_break[i].saved_instr); | ||
113 | + error = kgdb_arch_set_breakpoint(&kgdb_break[i]); | ||
114 | if (error) { | ||
115 | ret = error; | ||
116 | - printk(KERN_INFO "KGDB: BP install failed: %lx", addr); | ||
117 | + printk(KERN_INFO "KGDB: BP install failed: %lx", | ||
118 | + kgdb_break[i].bpt_addr); | ||
119 | continue; | ||
120 | } | ||
121 | |||
122 | - kgdb_flush_swbreak_addr(addr); | ||
123 | + kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr); | ||
124 | kgdb_break[i].state = BP_ACTIVE; | ||
125 | } | ||
126 | return ret; | ||
127 | @@ -298,7 +298,6 @@ int dbg_set_sw_break(unsigned long addr) | ||
128 | |||
129 | int dbg_deactivate_sw_breakpoints(void) | ||
130 | { | ||
131 | - unsigned long addr; | ||
132 | int error; | ||
133 | int ret = 0; | ||
134 | int i; | ||
135 | @@ -306,15 +305,14 @@ int dbg_deactivate_sw_breakpoints(void) | ||
136 | for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) { | ||
137 | if (kgdb_break[i].state != BP_ACTIVE) | ||
138 | continue; | ||
139 | - addr = kgdb_break[i].bpt_addr; | ||
140 | - error = kgdb_arch_remove_breakpoint(addr, | ||
141 | - kgdb_break[i].saved_instr); | ||
142 | + error = kgdb_arch_remove_breakpoint(&kgdb_break[i]); | ||
143 | if (error) { | ||
144 | - printk(KERN_INFO "KGDB: BP remove failed: %lx\n", addr); | ||
145 | + printk(KERN_INFO "KGDB: BP remove failed: %lx\n", | ||
146 | + kgdb_break[i].bpt_addr); | ||
147 | ret = error; | ||
148 | } | ||
149 | |||
150 | - kgdb_flush_swbreak_addr(addr); | ||
151 | + kgdb_flush_swbreak_addr(kgdb_break[i].bpt_addr); | ||
152 | kgdb_break[i].state = BP_SET; | ||
153 | } | ||
154 | return ret; | ||
155 | @@ -348,7 +346,6 @@ int kgdb_isremovedbreak(unsigned long addr) | ||
156 | |||
157 | int dbg_remove_all_break(void) | ||
158 | { | ||
159 | - unsigned long addr; | ||
160 | int error; | ||
161 | int i; | ||
162 | |||
163 | @@ -356,12 +353,10 @@ int dbg_remove_all_break(void) | ||
164 | for (i = 0; i < KGDB_MAX_BREAKPOINTS; i++) { | ||
165 | if (kgdb_break[i].state != BP_ACTIVE) | ||
166 | goto setundefined; | ||
167 | - addr = kgdb_break[i].bpt_addr; | ||
168 | - error = kgdb_arch_remove_breakpoint(addr, | ||
169 | - kgdb_break[i].saved_instr); | ||
170 | + error = kgdb_arch_remove_breakpoint(&kgdb_break[i]); | ||
171 | if (error) | ||
172 | printk(KERN_ERR "KGDB: breakpoint remove failed: %lx\n", | ||
173 | - addr); | ||
174 | + kgdb_break[i].bpt_addr); | ||
175 | setundefined: | ||
176 | kgdb_break[i].state = BP_UNDEFINED; | ||
177 | } | ||
178 | -- | ||
179 | 1.7.9.5 | ||
180 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0034-kgdbts-Fix-kernel-oops-with-CONFIG_DEBUG_RODATA.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0034-kgdbts-Fix-kernel-oops-with-CONFIG_DEBUG_RODATA.patch new file mode 100644 index 00000000..38e88f17 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0034-kgdbts-Fix-kernel-oops-with-CONFIG_DEBUG_RODATA.patch | |||
@@ -0,0 +1,121 @@ | |||
1 | From 0c2fe32a76d9c3ab88685250abe3956f2ff555fe Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
3 | Date: Thu, 29 Mar 2012 06:55:44 -0500 | ||
4 | Subject: [PATCH 34/60] kgdbts: Fix kernel oops with CONFIG_DEBUG_RODATA | ||
5 | |||
6 | commit 456ca7ff24841bf2d2a2dfd690fe7d42ef70d932 upstream. | ||
7 | |||
8 | On x86 the kgdb test suite will oops when the kernel is compiled with | ||
9 | CONFIG_DEBUG_RODATA and you run the tests after boot time. This is | ||
10 | regression has existed since 2.6.26 by commit: b33cb815 (kgdbts: Use | ||
11 | HW breakpoints with CONFIG_DEBUG_RODATA). | ||
12 | |||
13 | The test suite can use hw breakpoints for all the tests, but it has to | ||
14 | execute the hardware breakpoint specific tests first in order to | ||
15 | determine that the hw breakpoints actually work. Specifically the | ||
16 | very first test causes an oops: | ||
17 | |||
18 | # echo V1I1 > /sys/module/kgdbts/parameters/kgdbts | ||
19 | kgdb: Registered I/O driver kgdbts. | ||
20 | kgdbts:RUN plant and detach test | ||
21 | |||
22 | Entering kdb (current=0xffff880017aa9320, pid 1078) on processor 0 due to Keyboard Entry | ||
23 | [0]kdb> kgdbts: ERROR PUT: end of test buffer on 'plant_and_detach_test' line 1 expected OK got $E14#aa | ||
24 | WARNING: at drivers/misc/kgdbts.c:730 run_simple_test+0x151/0x2c0() | ||
25 | [...oops clipped...] | ||
26 | |||
27 | This commit re-orders the running of the tests and puts the RODATA | ||
28 | check into its own function so as to correctly avoid the kernel oops | ||
29 | by detecting and using the hw breakpoints. | ||
30 | |||
31 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
32 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
33 | --- | ||
34 | drivers/misc/kgdbts.c | 52 ++++++++++++++++++++++++++----------------------- | ||
35 | 1 file changed, 28 insertions(+), 24 deletions(-) | ||
36 | |||
37 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
38 | index 3f7ad83..997e94d 100644 | ||
39 | --- a/drivers/misc/kgdbts.c | ||
40 | +++ b/drivers/misc/kgdbts.c | ||
41 | @@ -885,6 +885,22 @@ static void run_singlestep_break_test(void) | ||
42 | kgdbts_break_test(); | ||
43 | } | ||
44 | |||
45 | +static void test_debug_rodata(void) | ||
46 | +{ | ||
47 | +#ifdef CONFIG_DEBUG_RODATA | ||
48 | + /* Until there is an api to write to read-only text segments, use | ||
49 | + * HW breakpoints for the remainder of any tests, else print a | ||
50 | + * failure message if hw breakpoints do not work. | ||
51 | + */ | ||
52 | + if (!(arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT && hwbreaks_ok)) { | ||
53 | + eprintk("kgdbts: HW breakpoints BROKEN, ending tests\n"); | ||
54 | + return; | ||
55 | + } | ||
56 | + force_hwbrks = 1; | ||
57 | + v1printk("kgdbts:Using HW breakpoints for SW breakpoint tests\n"); | ||
58 | +#endif /* CONFIG_DEBUG_RODATA */ | ||
59 | +} | ||
60 | + | ||
61 | static void kgdbts_run_tests(void) | ||
62 | { | ||
63 | char *ptr; | ||
64 | @@ -907,6 +923,18 @@ static void kgdbts_run_tests(void) | ||
65 | if (ptr) | ||
66 | sstep_test = simple_strtol(ptr+1, NULL, 10); | ||
67 | |||
68 | + /* All HW break point tests */ | ||
69 | + if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) { | ||
70 | + hwbreaks_ok = 1; | ||
71 | + v1printk("kgdbts:RUN hw breakpoint test\n"); | ||
72 | + run_breakpoint_test(1); | ||
73 | + v1printk("kgdbts:RUN hw write breakpoint test\n"); | ||
74 | + run_hw_break_test(1); | ||
75 | + v1printk("kgdbts:RUN access write breakpoint test\n"); | ||
76 | + run_hw_break_test(0); | ||
77 | + } | ||
78 | + test_debug_rodata(); | ||
79 | + | ||
80 | /* required internal KGDB tests */ | ||
81 | v1printk("kgdbts:RUN plant and detach test\n"); | ||
82 | run_plant_and_detach_test(0); | ||
83 | @@ -924,35 +952,11 @@ static void kgdbts_run_tests(void) | ||
84 | |||
85 | /* ===Optional tests=== */ | ||
86 | |||
87 | - /* All HW break point tests */ | ||
88 | - if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) { | ||
89 | - hwbreaks_ok = 1; | ||
90 | - v1printk("kgdbts:RUN hw breakpoint test\n"); | ||
91 | - run_breakpoint_test(1); | ||
92 | - v1printk("kgdbts:RUN hw write breakpoint test\n"); | ||
93 | - run_hw_break_test(1); | ||
94 | - v1printk("kgdbts:RUN access write breakpoint test\n"); | ||
95 | - run_hw_break_test(0); | ||
96 | - } | ||
97 | - | ||
98 | if (nmi_sleep) { | ||
99 | v1printk("kgdbts:RUN NMI sleep %i seconds test\n", nmi_sleep); | ||
100 | run_nmi_sleep_test(nmi_sleep); | ||
101 | } | ||
102 | |||
103 | -#ifdef CONFIG_DEBUG_RODATA | ||
104 | - /* Until there is an api to write to read-only text segments, use | ||
105 | - * HW breakpoints for the remainder of any tests, else print a | ||
106 | - * failure message if hw breakpoints do not work. | ||
107 | - */ | ||
108 | - if (!(arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT && hwbreaks_ok)) { | ||
109 | - eprintk("kgdbts: HW breakpoints do not work," | ||
110 | - "skipping remaining tests\n"); | ||
111 | - return; | ||
112 | - } | ||
113 | - force_hwbrks = 1; | ||
114 | -#endif /* CONFIG_DEBUG_RODATA */ | ||
115 | - | ||
116 | /* If the do_fork test is run it will be the last test that is | ||
117 | * executed because a kernel thread will be spawned at the very | ||
118 | * end to unregister the debug hooks. | ||
119 | -- | ||
120 | 1.7.9.5 | ||
121 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0035-kgdbts-1-of-2-fix-single-step-awareness-to-work-corr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0035-kgdbts-1-of-2-fix-single-step-awareness-to-work-corr.patch new file mode 100644 index 00000000..d28b70c2 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0035-kgdbts-1-of-2-fix-single-step-awareness-to-work-corr.patch | |||
@@ -0,0 +1,212 @@ | |||
1 | From ae549aeda351058e0df140fd174ac71911773ece Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
3 | Date: Thu, 29 Mar 2012 17:41:24 -0500 | ||
4 | Subject: [PATCH 35/60] kgdbts: (1 of 2) fix single step awareness to work | ||
5 | correctly with SMP | ||
6 | |||
7 | commit 486c5987a00a89d56c2c04c506417ef8f823ca2e upstream. | ||
8 | |||
9 | The do_fork and sys_open tests have never worked properly on anything | ||
10 | other than a UP configuration with the kgdb test suite. This is | ||
11 | because the test suite did not fully implement the behavior of a real | ||
12 | debugger. A real debugger tracks the state of what thread it asked to | ||
13 | single step and can correctly continue other threads of execution or | ||
14 | conditionally stop while waiting for the original thread single step | ||
15 | request to return. | ||
16 | |||
17 | Below is a simple method to cause a fatal kernel oops with the kgdb | ||
18 | test suite on a 4 processor x86 system: | ||
19 | |||
20 | while [ 1 ] ; do ls > /dev/null 2> /dev/null; done& | ||
21 | while [ 1 ] ; do ls > /dev/null 2> /dev/null; done& | ||
22 | while [ 1 ] ; do ls > /dev/null 2> /dev/null; done& | ||
23 | while [ 1 ] ; do ls > /dev/null 2> /dev/null; done& | ||
24 | echo V1I1F1000 > /sys/module/kgdbts/parameters/kgdbts | ||
25 | |||
26 | Very soon after starting the test the kernel will oops with a message like: | ||
27 | |||
28 | kgdbts: BP mismatch 3b7da66480 expected ffffffff8106a590 | ||
29 | WARNING: at drivers/misc/kgdbts.c:303 check_and_rewind_pc+0xe0/0x100() | ||
30 | Call Trace: | ||
31 | [<ffffffff812994a0>] check_and_rewind_pc+0xe0/0x100 | ||
32 | [<ffffffff81298945>] validate_simple_test+0x25/0xc0 | ||
33 | [<ffffffff81298f77>] run_simple_test+0x107/0x2c0 | ||
34 | [<ffffffff81298a18>] kgdbts_put_char+0x18/0x20 | ||
35 | |||
36 | The warn will turn to a hard kernel crash shortly after that because | ||
37 | the pc will not get properly rewound to the right value after hitting | ||
38 | a breakpoint leading to a hard lockup. | ||
39 | |||
40 | This change is broken up into 2 pieces because archs that have hw | ||
41 | single stepping (2.6.26 and up) need different changes than archs that | ||
42 | do not have hw single stepping (3.0 and up). This change implements | ||
43 | the correct behavior for an arch that supports hw single stepping. | ||
44 | |||
45 | A minor defect was fixed where sys_open should be do_sys_open | ||
46 | for the sys_open break point test. This solves the problem of running | ||
47 | a 64 bit with a 32 bit user space. The sys_open() never gets called | ||
48 | when using the 32 bit file system for the kgdb testsuite because the | ||
49 | 32 bit binaries invoke the compat_sys_open() call leading to the test | ||
50 | never completing. | ||
51 | |||
52 | In order to mimic a real debugger, the kgdb test suite now tracks the | ||
53 | most recent thread that was continued (cont_thread_id), with the | ||
54 | intent to single step just this thread. When the response to the | ||
55 | single step request stops in a different thread that hit the original | ||
56 | break point that thread will now get continued, while the debugger | ||
57 | waits for the thread with the single step pending. Here is a high | ||
58 | level description of the sequence of events. | ||
59 | |||
60 | cont_instead_of_sstep = 0; | ||
61 | |||
62 | 1) set breakpoint at do_fork | ||
63 | 2) continue | ||
64 | 3) Save the thread id where we stop to cont_thread_id | ||
65 | 4) Remove breakpoint at do_fork | ||
66 | 5) Reset the PC if needed depending on kernel exception type | ||
67 | 6) if (cont_instead_of_sstep) { continue } else { single step } | ||
68 | 7) Check where we stopped | ||
69 | if current thread != cont_thread_id { | ||
70 | cont_instead_of_sstep = 1; | ||
71 | goto step 5 | ||
72 | } else { | ||
73 | cont_instead_of_sstep = 0; | ||
74 | } | ||
75 | 8) clean up and run test again if needed | ||
76 | |||
77 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
78 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
79 | --- | ||
80 | drivers/misc/kgdbts.c | 54 +++++++++++++++++++++++++++++++++++++++---------- | ||
81 | 1 file changed, 43 insertions(+), 11 deletions(-) | ||
82 | |||
83 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
84 | index 997e94d..3cad9fc 100644 | ||
85 | --- a/drivers/misc/kgdbts.c | ||
86 | +++ b/drivers/misc/kgdbts.c | ||
87 | @@ -134,6 +134,9 @@ static int force_hwbrks; | ||
88 | static int hwbreaks_ok; | ||
89 | static int hw_break_val; | ||
90 | static int hw_break_val2; | ||
91 | +static int cont_instead_of_sstep; | ||
92 | +static unsigned long cont_thread_id; | ||
93 | +static unsigned long sstep_thread_id; | ||
94 | #if defined(CONFIG_ARM) || defined(CONFIG_MIPS) || defined(CONFIG_SPARC) | ||
95 | static int arch_needs_sstep_emulation = 1; | ||
96 | #else | ||
97 | @@ -211,7 +214,7 @@ static unsigned long lookup_addr(char *arg) | ||
98 | if (!strcmp(arg, "kgdbts_break_test")) | ||
99 | addr = (unsigned long)kgdbts_break_test; | ||
100 | else if (!strcmp(arg, "sys_open")) | ||
101 | - addr = (unsigned long)sys_open; | ||
102 | + addr = (unsigned long)do_sys_open; | ||
103 | else if (!strcmp(arg, "do_fork")) | ||
104 | addr = (unsigned long)do_fork; | ||
105 | else if (!strcmp(arg, "hw_break_val")) | ||
106 | @@ -283,6 +286,16 @@ static void hw_break_val_write(void) | ||
107 | hw_break_val++; | ||
108 | } | ||
109 | |||
110 | +static int get_thread_id_continue(char *put_str, char *arg) | ||
111 | +{ | ||
112 | + char *ptr = &put_str[11]; | ||
113 | + | ||
114 | + if (put_str[1] != 'T' || put_str[2] != '0') | ||
115 | + return 1; | ||
116 | + kgdb_hex2long(&ptr, &cont_thread_id); | ||
117 | + return 0; | ||
118 | +} | ||
119 | + | ||
120 | static int check_and_rewind_pc(char *put_str, char *arg) | ||
121 | { | ||
122 | unsigned long addr = lookup_addr(arg); | ||
123 | @@ -324,6 +337,18 @@ static int check_single_step(char *put_str, char *arg) | ||
124 | gdb_regs_to_pt_regs(kgdbts_gdb_regs, &kgdbts_regs); | ||
125 | v2printk("Singlestep stopped at IP: %lx\n", | ||
126 | instruction_pointer(&kgdbts_regs)); | ||
127 | + | ||
128 | + if (sstep_thread_id != cont_thread_id && !arch_needs_sstep_emulation) { | ||
129 | + /* | ||
130 | + * Ensure we stopped in the same thread id as before, else the | ||
131 | + * debugger should continue until the original thread that was | ||
132 | + * single stepped is scheduled again, emulating gdb's behavior. | ||
133 | + */ | ||
134 | + v2printk("ThrID does not match: %lx\n", cont_thread_id); | ||
135 | + cont_instead_of_sstep = 1; | ||
136 | + ts.idx -= 4; | ||
137 | + return 0; | ||
138 | + } | ||
139 | if (instruction_pointer(&kgdbts_regs) == addr) { | ||
140 | eprintk("kgdbts: SingleStep failed at %lx\n", | ||
141 | instruction_pointer(&kgdbts_regs)); | ||
142 | @@ -368,7 +393,12 @@ static int got_break(char *put_str, char *arg) | ||
143 | static void emul_sstep_get(char *arg) | ||
144 | { | ||
145 | if (!arch_needs_sstep_emulation) { | ||
146 | - fill_get_buf(arg); | ||
147 | + if (cont_instead_of_sstep) { | ||
148 | + cont_instead_of_sstep = 0; | ||
149 | + fill_get_buf("c"); | ||
150 | + } else { | ||
151 | + fill_get_buf(arg); | ||
152 | + } | ||
153 | return; | ||
154 | } | ||
155 | switch (sstep_state) { | ||
156 | @@ -398,9 +428,11 @@ static void emul_sstep_get(char *arg) | ||
157 | static int emul_sstep_put(char *put_str, char *arg) | ||
158 | { | ||
159 | if (!arch_needs_sstep_emulation) { | ||
160 | - if (!strncmp(put_str+1, arg, 2)) | ||
161 | - return 0; | ||
162 | - return 1; | ||
163 | + char *ptr = &put_str[11]; | ||
164 | + if (put_str[1] != 'T' || put_str[2] != '0') | ||
165 | + return 1; | ||
166 | + kgdb_hex2long(&ptr, &sstep_thread_id); | ||
167 | + return 0; | ||
168 | } | ||
169 | switch (sstep_state) { | ||
170 | case 1: | ||
171 | @@ -502,10 +534,10 @@ static struct test_struct bad_read_test[] = { | ||
172 | static struct test_struct singlestep_break_test[] = { | ||
173 | { "?", "S0*" }, /* Clear break points */ | ||
174 | { "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */ | ||
175 | - { "c", "T0*", }, /* Continue */ | ||
176 | + { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ | ||
177 | + { "kgdbts_break_test", "OK", sw_rem_break }, /*remove breakpoint */ | ||
178 | { "g", "kgdbts_break_test", NULL, check_and_rewind_pc }, | ||
179 | { "write", "OK", write_regs }, /* Write registers */ | ||
180 | - { "kgdbts_break_test", "OK", sw_rem_break }, /*remove breakpoint */ | ||
181 | { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ | ||
182 | { "g", "kgdbts_break_test", NULL, check_single_step }, | ||
183 | { "kgdbts_break_test", "OK", sw_break, }, /* set sw breakpoint */ | ||
184 | @@ -523,10 +555,10 @@ static struct test_struct singlestep_break_test[] = { | ||
185 | static struct test_struct do_fork_test[] = { | ||
186 | { "?", "S0*" }, /* Clear break points */ | ||
187 | { "do_fork", "OK", sw_break, }, /* set sw breakpoint */ | ||
188 | - { "c", "T0*", }, /* Continue */ | ||
189 | + { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ | ||
190 | + { "do_fork", "OK", sw_rem_break }, /*remove breakpoint */ | ||
191 | { "g", "do_fork", NULL, check_and_rewind_pc }, /* check location */ | ||
192 | { "write", "OK", write_regs }, /* Write registers */ | ||
193 | - { "do_fork", "OK", sw_rem_break }, /*remove breakpoint */ | ||
194 | { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ | ||
195 | { "g", "do_fork", NULL, check_single_step }, | ||
196 | { "do_fork", "OK", sw_break, }, /* set sw breakpoint */ | ||
197 | @@ -541,10 +573,10 @@ static struct test_struct do_fork_test[] = { | ||
198 | static struct test_struct sys_open_test[] = { | ||
199 | { "?", "S0*" }, /* Clear break points */ | ||
200 | { "sys_open", "OK", sw_break, }, /* set sw breakpoint */ | ||
201 | - { "c", "T0*", }, /* Continue */ | ||
202 | + { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ | ||
203 | + { "sys_open", "OK", sw_rem_break }, /*remove breakpoint */ | ||
204 | { "g", "sys_open", NULL, check_and_rewind_pc }, /* check location */ | ||
205 | { "write", "OK", write_regs }, /* Write registers */ | ||
206 | - { "sys_open", "OK", sw_rem_break }, /*remove breakpoint */ | ||
207 | { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ | ||
208 | { "g", "sys_open", NULL, check_single_step }, | ||
209 | { "sys_open", "OK", sw_break, }, /* set sw breakpoint */ | ||
210 | -- | ||
211 | 1.7.9.5 | ||
212 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0036-kgdbts-2-of-2-fix-single-step-awareness-to-work-corr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0036-kgdbts-2-of-2-fix-single-step-awareness-to-work-corr.patch new file mode 100644 index 00000000..640bc3e8 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0036-kgdbts-2-of-2-fix-single-step-awareness-to-work-corr.patch | |||
@@ -0,0 +1,266 @@ | |||
1 | From 13053c284b41d7ca50da37f04c9940303b9d33e0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
3 | Date: Thu, 29 Mar 2012 17:41:24 -0500 | ||
4 | Subject: [PATCH 36/60] kgdbts: (2 of 2) fix single step awareness to work | ||
5 | correctly with SMP | ||
6 | |||
7 | commit 23bbd8e346f1ef3fc1219c79cea53d8d52b207d8 upstream. | ||
8 | |||
9 | The do_fork and sys_open tests have never worked properly on anything | ||
10 | other than a UP configuration with the kgdb test suite. This is | ||
11 | because the test suite did not fully implement the behavior of a real | ||
12 | debugger. A real debugger tracks the state of what thread it asked to | ||
13 | single step and can correctly continue other threads of execution or | ||
14 | conditionally stop while waiting for the original thread single step | ||
15 | request to return. | ||
16 | |||
17 | Below is a simple method to cause a fatal kernel oops with the kgdb | ||
18 | test suite on a 2 processor ARM system: | ||
19 | |||
20 | while [ 1 ] ; do ls > /dev/null 2> /dev/null; done& | ||
21 | while [ 1 ] ; do ls > /dev/null 2> /dev/null; done& | ||
22 | echo V1I1F100 > /sys/module/kgdbts/parameters/kgdbts | ||
23 | |||
24 | Very soon after starting the test the kernel will start warning with | ||
25 | messages like: | ||
26 | |||
27 | kgdbts: BP mismatch c002487c expected c0024878 | ||
28 | ------------[ cut here ]------------ | ||
29 | WARNING: at drivers/misc/kgdbts.c:317 check_and_rewind_pc+0x9c/0xc4() | ||
30 | [<c01f6520>] (check_and_rewind_pc+0x9c/0xc4) | ||
31 | [<c01f595c>] (validate_simple_test+0x3c/0xc4) | ||
32 | [<c01f60d4>] (run_simple_test+0x1e8/0x274) | ||
33 | |||
34 | The kernel will eventually recovers, but the test suite has completely | ||
35 | failed to test anything useful. | ||
36 | |||
37 | This patch implements behavior similar to a real debugger that does | ||
38 | not rely on hardware single stepping by using only software planted | ||
39 | breakpoints. | ||
40 | |||
41 | In order to mimic a real debugger, the kgdb test suite now tracks the | ||
42 | most recent thread that was continued (cont_thread_id), with the | ||
43 | intent to single step just this thread. When the response to the | ||
44 | single step request stops in a different thread that hit the original | ||
45 | break point that thread will now get continued, while the debugger | ||
46 | waits for the thread with the single step pending. Here is a high | ||
47 | level description of the sequence of events. | ||
48 | |||
49 | cont_instead_of_sstep = 0; | ||
50 | |||
51 | 1) set breakpoint at do_fork | ||
52 | 2) continue | ||
53 | 3) Save the thread id where we stop to cont_thread_id | ||
54 | 4) Remove breakpoint at do_fork | ||
55 | 5) Reset the PC if needed depending on kernel exception type | ||
56 | 6) soft single step | ||
57 | 7) Check where we stopped | ||
58 | if current thread != cont_thread_id { | ||
59 | if (here for more than 2 times for the same thead) { | ||
60 | ### must be a really busy system, start test again ### | ||
61 | goto step 1 | ||
62 | } | ||
63 | goto step 5 | ||
64 | } else { | ||
65 | cont_instead_of_sstep = 0; | ||
66 | } | ||
67 | 8) clean up and run test again if needed | ||
68 | 9) Clear out any threads that were waiting on a break point at the | ||
69 | point in time the test is ended with get_cont_catch(). This | ||
70 | happens sometimes because breakpoints are used in place of single | ||
71 | stepping and some threads could have been in the debugger exception | ||
72 | handling queue because breakpoints were hit concurrently on | ||
73 | different CPUs. This also means we wait at least one second before | ||
74 | unplumbing the debugger connection at the very end, so as respond | ||
75 | to any debug threads waiting to be serviced. | ||
76 | |||
77 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
78 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
79 | --- | ||
80 | drivers/misc/kgdbts.c | 73 +++++++++++++++++++++++++++++++++++++++++-------- | ||
81 | 1 file changed, 62 insertions(+), 11 deletions(-) | ||
82 | |||
83 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
84 | index 3cad9fc..d087456 100644 | ||
85 | --- a/drivers/misc/kgdbts.c | ||
86 | +++ b/drivers/misc/kgdbts.c | ||
87 | @@ -142,7 +142,9 @@ static int arch_needs_sstep_emulation = 1; | ||
88 | #else | ||
89 | static int arch_needs_sstep_emulation; | ||
90 | #endif | ||
91 | +static unsigned long cont_addr; | ||
92 | static unsigned long sstep_addr; | ||
93 | +static int restart_from_top_after_write; | ||
94 | static int sstep_state; | ||
95 | |||
96 | /* Storage for the registers, in GDB format. */ | ||
97 | @@ -190,7 +192,8 @@ static int kgdbts_unreg_thread(void *ptr) | ||
98 | */ | ||
99 | while (!final_ack) | ||
100 | msleep_interruptible(1500); | ||
101 | - | ||
102 | + /* Pause for any other threads to exit after final ack. */ | ||
103 | + msleep_interruptible(1000); | ||
104 | if (configured) | ||
105 | kgdb_unregister_io_module(&kgdbts_io_ops); | ||
106 | configured = 0; | ||
107 | @@ -312,13 +315,21 @@ static int check_and_rewind_pc(char *put_str, char *arg) | ||
108 | if (addr + BREAK_INSTR_SIZE == ip) | ||
109 | offset = -BREAK_INSTR_SIZE; | ||
110 | #endif | ||
111 | - if (strcmp(arg, "silent") && ip + offset != addr) { | ||
112 | + | ||
113 | + if (arch_needs_sstep_emulation && sstep_addr && | ||
114 | + ip + offset == sstep_addr && | ||
115 | + ((!strcmp(arg, "sys_open") || !strcmp(arg, "do_fork")))) { | ||
116 | + /* This is special case for emulated single step */ | ||
117 | + v2printk("Emul: rewind hit single step bp\n"); | ||
118 | + restart_from_top_after_write = 1; | ||
119 | + } else if (strcmp(arg, "silent") && ip + offset != addr) { | ||
120 | eprintk("kgdbts: BP mismatch %lx expected %lx\n", | ||
121 | ip + offset, addr); | ||
122 | return 1; | ||
123 | } | ||
124 | /* Readjust the instruction pointer if needed */ | ||
125 | ip += offset; | ||
126 | + cont_addr = ip; | ||
127 | #ifdef GDB_ADJUSTS_BREAK_OFFSET | ||
128 | instruction_pointer_set(&kgdbts_regs, ip); | ||
129 | #endif | ||
130 | @@ -328,6 +339,8 @@ static int check_and_rewind_pc(char *put_str, char *arg) | ||
131 | static int check_single_step(char *put_str, char *arg) | ||
132 | { | ||
133 | unsigned long addr = lookup_addr(arg); | ||
134 | + static int matched_id; | ||
135 | + | ||
136 | /* | ||
137 | * From an arch indepent point of view the instruction pointer | ||
138 | * should be on a different instruction | ||
139 | @@ -338,17 +351,28 @@ static int check_single_step(char *put_str, char *arg) | ||
140 | v2printk("Singlestep stopped at IP: %lx\n", | ||
141 | instruction_pointer(&kgdbts_regs)); | ||
142 | |||
143 | - if (sstep_thread_id != cont_thread_id && !arch_needs_sstep_emulation) { | ||
144 | + if (sstep_thread_id != cont_thread_id) { | ||
145 | /* | ||
146 | * Ensure we stopped in the same thread id as before, else the | ||
147 | * debugger should continue until the original thread that was | ||
148 | * single stepped is scheduled again, emulating gdb's behavior. | ||
149 | */ | ||
150 | v2printk("ThrID does not match: %lx\n", cont_thread_id); | ||
151 | + if (arch_needs_sstep_emulation) { | ||
152 | + if (matched_id && | ||
153 | + instruction_pointer(&kgdbts_regs) != addr) | ||
154 | + goto continue_test; | ||
155 | + matched_id++; | ||
156 | + ts.idx -= 2; | ||
157 | + sstep_state = 0; | ||
158 | + return 0; | ||
159 | + } | ||
160 | cont_instead_of_sstep = 1; | ||
161 | ts.idx -= 4; | ||
162 | return 0; | ||
163 | } | ||
164 | +continue_test: | ||
165 | + matched_id = 0; | ||
166 | if (instruction_pointer(&kgdbts_regs) == addr) { | ||
167 | eprintk("kgdbts: SingleStep failed at %lx\n", | ||
168 | instruction_pointer(&kgdbts_regs)); | ||
169 | @@ -390,6 +414,31 @@ static int got_break(char *put_str, char *arg) | ||
170 | return 1; | ||
171 | } | ||
172 | |||
173 | +static void get_cont_catch(char *arg) | ||
174 | +{ | ||
175 | + /* Always send detach because the test is completed at this point */ | ||
176 | + fill_get_buf("D"); | ||
177 | +} | ||
178 | + | ||
179 | +static int put_cont_catch(char *put_str, char *arg) | ||
180 | +{ | ||
181 | + /* This is at the end of the test and we catch any and all input */ | ||
182 | + v2printk("kgdbts: cleanup task: %lx\n", sstep_thread_id); | ||
183 | + ts.idx--; | ||
184 | + return 0; | ||
185 | +} | ||
186 | + | ||
187 | +static int emul_reset(char *put_str, char *arg) | ||
188 | +{ | ||
189 | + if (strncmp(put_str, "$OK", 3)) | ||
190 | + return 1; | ||
191 | + if (restart_from_top_after_write) { | ||
192 | + restart_from_top_after_write = 0; | ||
193 | + ts.idx = -1; | ||
194 | + } | ||
195 | + return 0; | ||
196 | +} | ||
197 | + | ||
198 | static void emul_sstep_get(char *arg) | ||
199 | { | ||
200 | if (!arch_needs_sstep_emulation) { | ||
201 | @@ -443,8 +492,7 @@ static int emul_sstep_put(char *put_str, char *arg) | ||
202 | v2printk("Stopped at IP: %lx\n", | ||
203 | instruction_pointer(&kgdbts_regs)); | ||
204 | /* Want to stop at IP + break instruction size by default */ | ||
205 | - sstep_addr = instruction_pointer(&kgdbts_regs) + | ||
206 | - BREAK_INSTR_SIZE; | ||
207 | + sstep_addr = cont_addr + BREAK_INSTR_SIZE; | ||
208 | break; | ||
209 | case 2: | ||
210 | if (strncmp(put_str, "$OK", 3)) { | ||
211 | @@ -456,6 +504,9 @@ static int emul_sstep_put(char *put_str, char *arg) | ||
212 | if (strncmp(put_str, "$T0", 3)) { | ||
213 | eprintk("kgdbts: failed continue sstep\n"); | ||
214 | return 1; | ||
215 | + } else { | ||
216 | + char *ptr = &put_str[11]; | ||
217 | + kgdb_hex2long(&ptr, &sstep_thread_id); | ||
218 | } | ||
219 | break; | ||
220 | case 4: | ||
221 | @@ -558,13 +609,13 @@ static struct test_struct do_fork_test[] = { | ||
222 | { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ | ||
223 | { "do_fork", "OK", sw_rem_break }, /*remove breakpoint */ | ||
224 | { "g", "do_fork", NULL, check_and_rewind_pc }, /* check location */ | ||
225 | - { "write", "OK", write_regs }, /* Write registers */ | ||
226 | + { "write", "OK", write_regs, emul_reset }, /* Write registers */ | ||
227 | { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ | ||
228 | { "g", "do_fork", NULL, check_single_step }, | ||
229 | { "do_fork", "OK", sw_break, }, /* set sw breakpoint */ | ||
230 | { "7", "T0*", skip_back_repeat_test }, /* Loop based on repeat_test */ | ||
231 | { "D", "OK", NULL, final_ack_set }, /* detach and unregister I/O */ | ||
232 | - { "", "" }, | ||
233 | + { "", "", get_cont_catch, put_cont_catch }, | ||
234 | }; | ||
235 | |||
236 | /* Test for hitting a breakpoint at sys_open for what ever the number | ||
237 | @@ -576,13 +627,13 @@ static struct test_struct sys_open_test[] = { | ||
238 | { "c", "T0*", NULL, get_thread_id_continue }, /* Continue */ | ||
239 | { "sys_open", "OK", sw_rem_break }, /*remove breakpoint */ | ||
240 | { "g", "sys_open", NULL, check_and_rewind_pc }, /* check location */ | ||
241 | - { "write", "OK", write_regs }, /* Write registers */ | ||
242 | + { "write", "OK", write_regs, emul_reset }, /* Write registers */ | ||
243 | { "s", "T0*", emul_sstep_get, emul_sstep_put }, /* Single step */ | ||
244 | { "g", "sys_open", NULL, check_single_step }, | ||
245 | { "sys_open", "OK", sw_break, }, /* set sw breakpoint */ | ||
246 | { "7", "T0*", skip_back_repeat_test }, /* Loop based on repeat_test */ | ||
247 | { "D", "OK", NULL, final_ack_set }, /* detach and unregister I/O */ | ||
248 | - { "", "" }, | ||
249 | + { "", "", get_cont_catch, put_cont_catch }, | ||
250 | }; | ||
251 | |||
252 | /* | ||
253 | @@ -725,8 +776,8 @@ static int run_simple_test(int is_get_char, int chr) | ||
254 | /* This callback is a put char which is when kgdb sends data to | ||
255 | * this I/O module. | ||
256 | */ | ||
257 | - if (ts.tst[ts.idx].get[0] == '\0' && | ||
258 | - ts.tst[ts.idx].put[0] == '\0') { | ||
259 | + if (ts.tst[ts.idx].get[0] == '\0' && ts.tst[ts.idx].put[0] == '\0' && | ||
260 | + !ts.tst[ts.idx].get_handler) { | ||
261 | eprintk("kgdbts: ERROR: beyond end of test on" | ||
262 | " '%s' line %i\n", ts.name, ts.idx); | ||
263 | return 0; | ||
264 | -- | ||
265 | 1.7.9.5 | ||
266 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0037-x86-kgdb-Fix-DEBUG_RODATA-limitation-using-text_poke.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0037-x86-kgdb-Fix-DEBUG_RODATA-limitation-using-text_poke.patch new file mode 100644 index 00000000..be073987 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0037-x86-kgdb-Fix-DEBUG_RODATA-limitation-using-text_poke.patch | |||
@@ -0,0 +1,166 @@ | |||
1 | From d3b769924c0a3a98809ab60e0f7449fef154b26c Mon Sep 17 00:00:00 2001 | ||
2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
3 | Date: Fri, 23 Mar 2012 09:35:05 -0500 | ||
4 | Subject: [PATCH 37/60] x86,kgdb: Fix DEBUG_RODATA limitation using | ||
5 | text_poke() | ||
6 | |||
7 | commit 3751d3e85cf693e10e2c47c03c8caa65e171099b upstream. | ||
8 | |||
9 | There has long been a limitation using software breakpoints with a | ||
10 | kernel compiled with CONFIG_DEBUG_RODATA going back to 2.6.26. For | ||
11 | this particular patch, it will apply cleanly and has been tested all | ||
12 | the way back to 2.6.36. | ||
13 | |||
14 | The kprobes code uses the text_poke() function which accommodates | ||
15 | writing a breakpoint into a read-only page. The x86 kgdb code can | ||
16 | solve the problem similarly by overriding the default breakpoint | ||
17 | set/remove routines and using text_poke() directly. | ||
18 | |||
19 | The x86 kgdb code will first attempt to use the traditional | ||
20 | probe_kernel_write(), and next try using a the text_poke() function. | ||
21 | The break point install method is tracked such that the correct break | ||
22 | point removal routine will get called later on. | ||
23 | |||
24 | Cc: x86@kernel.org | ||
25 | Cc: Thomas Gleixner <tglx@linutronix.de> | ||
26 | Cc: Ingo Molnar <mingo@redhat.com> | ||
27 | Cc: H. Peter Anvin <hpa@zytor.com> | ||
28 | Inspried-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> | ||
29 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | arch/x86/kernel/kgdb.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ | ||
33 | drivers/misc/kgdbts.c | 17 -------------- | ||
34 | include/linux/kgdb.h | 3 ++- | ||
35 | 3 files changed, 62 insertions(+), 18 deletions(-) | ||
36 | |||
37 | diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c | ||
38 | index faba577..2f45c4c 100644 | ||
39 | --- a/arch/x86/kernel/kgdb.c | ||
40 | +++ b/arch/x86/kernel/kgdb.c | ||
41 | @@ -43,6 +43,8 @@ | ||
42 | #include <linux/smp.h> | ||
43 | #include <linux/nmi.h> | ||
44 | #include <linux/hw_breakpoint.h> | ||
45 | +#include <linux/uaccess.h> | ||
46 | +#include <linux/memory.h> | ||
47 | |||
48 | #include <asm/debugreg.h> | ||
49 | #include <asm/apicdef.h> | ||
50 | @@ -740,6 +742,64 @@ void kgdb_arch_set_pc(struct pt_regs *regs, unsigned long ip) | ||
51 | regs->ip = ip; | ||
52 | } | ||
53 | |||
54 | +int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt) | ||
55 | +{ | ||
56 | + int err; | ||
57 | + char opc[BREAK_INSTR_SIZE]; | ||
58 | + | ||
59 | + bpt->type = BP_BREAKPOINT; | ||
60 | + err = probe_kernel_read(bpt->saved_instr, (char *)bpt->bpt_addr, | ||
61 | + BREAK_INSTR_SIZE); | ||
62 | + if (err) | ||
63 | + return err; | ||
64 | + err = probe_kernel_write((char *)bpt->bpt_addr, | ||
65 | + arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE); | ||
66 | +#ifdef CONFIG_DEBUG_RODATA | ||
67 | + if (!err) | ||
68 | + return err; | ||
69 | + /* | ||
70 | + * It is safe to call text_poke() because normal kernel execution | ||
71 | + * is stopped on all cores, so long as the text_mutex is not locked. | ||
72 | + */ | ||
73 | + if (mutex_is_locked(&text_mutex)) | ||
74 | + return -EBUSY; | ||
75 | + text_poke((void *)bpt->bpt_addr, arch_kgdb_ops.gdb_bpt_instr, | ||
76 | + BREAK_INSTR_SIZE); | ||
77 | + err = probe_kernel_read(opc, (char *)bpt->bpt_addr, BREAK_INSTR_SIZE); | ||
78 | + if (err) | ||
79 | + return err; | ||
80 | + if (memcmp(opc, arch_kgdb_ops.gdb_bpt_instr, BREAK_INSTR_SIZE)) | ||
81 | + return -EINVAL; | ||
82 | + bpt->type = BP_POKE_BREAKPOINT; | ||
83 | +#endif /* CONFIG_DEBUG_RODATA */ | ||
84 | + return err; | ||
85 | +} | ||
86 | + | ||
87 | +int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt) | ||
88 | +{ | ||
89 | +#ifdef CONFIG_DEBUG_RODATA | ||
90 | + int err; | ||
91 | + char opc[BREAK_INSTR_SIZE]; | ||
92 | + | ||
93 | + if (bpt->type != BP_POKE_BREAKPOINT) | ||
94 | + goto knl_write; | ||
95 | + /* | ||
96 | + * It is safe to call text_poke() because normal kernel execution | ||
97 | + * is stopped on all cores, so long as the text_mutex is not locked. | ||
98 | + */ | ||
99 | + if (mutex_is_locked(&text_mutex)) | ||
100 | + goto knl_write; | ||
101 | + text_poke((void *)bpt->bpt_addr, bpt->saved_instr, BREAK_INSTR_SIZE); | ||
102 | + err = probe_kernel_read(opc, (char *)bpt->bpt_addr, BREAK_INSTR_SIZE); | ||
103 | + if (err || memcmp(opc, bpt->saved_instr, BREAK_INSTR_SIZE)) | ||
104 | + goto knl_write; | ||
105 | + return err; | ||
106 | +knl_write: | ||
107 | +#endif /* CONFIG_DEBUG_RODATA */ | ||
108 | + return probe_kernel_write((char *)bpt->bpt_addr, | ||
109 | + (char *)bpt->saved_instr, BREAK_INSTR_SIZE); | ||
110 | +} | ||
111 | + | ||
112 | struct kgdb_arch arch_kgdb_ops = { | ||
113 | /* Breakpoint instruction: */ | ||
114 | .gdb_bpt_instr = { 0xcc }, | ||
115 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
116 | index d087456..3aa9a96 100644 | ||
117 | --- a/drivers/misc/kgdbts.c | ||
118 | +++ b/drivers/misc/kgdbts.c | ||
119 | @@ -968,22 +968,6 @@ static void run_singlestep_break_test(void) | ||
120 | kgdbts_break_test(); | ||
121 | } | ||
122 | |||
123 | -static void test_debug_rodata(void) | ||
124 | -{ | ||
125 | -#ifdef CONFIG_DEBUG_RODATA | ||
126 | - /* Until there is an api to write to read-only text segments, use | ||
127 | - * HW breakpoints for the remainder of any tests, else print a | ||
128 | - * failure message if hw breakpoints do not work. | ||
129 | - */ | ||
130 | - if (!(arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT && hwbreaks_ok)) { | ||
131 | - eprintk("kgdbts: HW breakpoints BROKEN, ending tests\n"); | ||
132 | - return; | ||
133 | - } | ||
134 | - force_hwbrks = 1; | ||
135 | - v1printk("kgdbts:Using HW breakpoints for SW breakpoint tests\n"); | ||
136 | -#endif /* CONFIG_DEBUG_RODATA */ | ||
137 | -} | ||
138 | - | ||
139 | static void kgdbts_run_tests(void) | ||
140 | { | ||
141 | char *ptr; | ||
142 | @@ -1016,7 +1000,6 @@ static void kgdbts_run_tests(void) | ||
143 | v1printk("kgdbts:RUN access write breakpoint test\n"); | ||
144 | run_hw_break_test(0); | ||
145 | } | ||
146 | - test_debug_rodata(); | ||
147 | |||
148 | /* required internal KGDB tests */ | ||
149 | v1printk("kgdbts:RUN plant and detach test\n"); | ||
150 | diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h | ||
151 | index e5d689c..c4d2fc1 100644 | ||
152 | --- a/include/linux/kgdb.h | ||
153 | +++ b/include/linux/kgdb.h | ||
154 | @@ -63,7 +63,8 @@ enum kgdb_bptype { | ||
155 | BP_HARDWARE_BREAKPOINT, | ||
156 | BP_WRITE_WATCHPOINT, | ||
157 | BP_READ_WATCHPOINT, | ||
158 | - BP_ACCESS_WATCHPOINT | ||
159 | + BP_ACCESS_WATCHPOINT, | ||
160 | + BP_POKE_BREAKPOINT, | ||
161 | }; | ||
162 | |||
163 | enum kgdb_bpstate { | ||
164 | -- | ||
165 | 1.7.9.5 | ||
166 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0038-CIFS-Fix-VFS-lock-usage-for-oplocked-files.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0038-CIFS-Fix-VFS-lock-usage-for-oplocked-files.patch new file mode 100644 index 00000000..2658ac85 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0038-CIFS-Fix-VFS-lock-usage-for-oplocked-files.patch | |||
@@ -0,0 +1,99 @@ | |||
1 | From bffd29387e64c0dfb9905f059ecd24bfcccbe572 Mon Sep 17 00:00:00 2001 | ||
2 | From: Pavel Shilovsky <piastry@etersoft.ru> | ||
3 | Date: Wed, 28 Mar 2012 21:56:19 +0400 | ||
4 | Subject: [PATCH 38/60] CIFS: Fix VFS lock usage for oplocked files | ||
5 | |||
6 | commit 66189be74ff5f9f3fd6444315b85be210d07cef2 upstream. | ||
7 | |||
8 | We can deadlock if we have a write oplock and two processes | ||
9 | use the same file handle. In this case the first process can't | ||
10 | unlock its lock if the second process blocked on the lock in the | ||
11 | same time. | ||
12 | |||
13 | Fix it by using posix_lock_file rather than posix_lock_file_wait | ||
14 | under cinode->lock_mutex. If we request a blocking lock and | ||
15 | posix_lock_file indicates that there is another lock that prevents | ||
16 | us, wait untill that lock is released and restart our call. | ||
17 | |||
18 | Acked-by: Jeff Layton <jlayton@redhat.com> | ||
19 | Signed-off-by: Pavel Shilovsky <piastry@etersoft.ru> | ||
20 | Signed-off-by: Steve French <sfrench@us.ibm.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | fs/cifs/file.c | 10 +++++++++- | ||
24 | fs/locks.c | 3 ++- | ||
25 | include/linux/fs.h | 5 +++++ | ||
26 | 3 files changed, 16 insertions(+), 2 deletions(-) | ||
27 | |||
28 | diff --git a/fs/cifs/file.c b/fs/cifs/file.c | ||
29 | index 159fcc5..0f7dc22 100644 | ||
30 | --- a/fs/cifs/file.c | ||
31 | +++ b/fs/cifs/file.c | ||
32 | @@ -835,13 +835,21 @@ cifs_posix_lock_set(struct file *file, struct file_lock *flock) | ||
33 | if ((flock->fl_flags & FL_POSIX) == 0) | ||
34 | return rc; | ||
35 | |||
36 | +try_again: | ||
37 | mutex_lock(&cinode->lock_mutex); | ||
38 | if (!cinode->can_cache_brlcks) { | ||
39 | mutex_unlock(&cinode->lock_mutex); | ||
40 | return rc; | ||
41 | } | ||
42 | - rc = posix_lock_file_wait(file, flock); | ||
43 | + | ||
44 | + rc = posix_lock_file(file, flock, NULL); | ||
45 | mutex_unlock(&cinode->lock_mutex); | ||
46 | + if (rc == FILE_LOCK_DEFERRED) { | ||
47 | + rc = wait_event_interruptible(flock->fl_wait, !flock->fl_next); | ||
48 | + if (!rc) | ||
49 | + goto try_again; | ||
50 | + locks_delete_block(flock); | ||
51 | + } | ||
52 | return rc; | ||
53 | } | ||
54 | |||
55 | diff --git a/fs/locks.c b/fs/locks.c | ||
56 | index 637694b..0d68f1f 100644 | ||
57 | --- a/fs/locks.c | ||
58 | +++ b/fs/locks.c | ||
59 | @@ -510,12 +510,13 @@ static void __locks_delete_block(struct file_lock *waiter) | ||
60 | |||
61 | /* | ||
62 | */ | ||
63 | -static void locks_delete_block(struct file_lock *waiter) | ||
64 | +void locks_delete_block(struct file_lock *waiter) | ||
65 | { | ||
66 | lock_flocks(); | ||
67 | __locks_delete_block(waiter); | ||
68 | unlock_flocks(); | ||
69 | } | ||
70 | +EXPORT_SYMBOL(locks_delete_block); | ||
71 | |||
72 | /* Insert waiter into blocker's block list. | ||
73 | * We use a circular list so that processes can be easily woken up in | ||
74 | diff --git a/include/linux/fs.h b/include/linux/fs.h | ||
75 | index 10b2288..11f1951 100644 | ||
76 | --- a/include/linux/fs.h | ||
77 | +++ b/include/linux/fs.h | ||
78 | @@ -1203,6 +1203,7 @@ extern int vfs_setlease(struct file *, long, struct file_lock **); | ||
79 | extern int lease_modify(struct file_lock **, int); | ||
80 | extern int lock_may_read(struct inode *, loff_t start, unsigned long count); | ||
81 | extern int lock_may_write(struct inode *, loff_t start, unsigned long count); | ||
82 | +extern void locks_delete_block(struct file_lock *waiter); | ||
83 | extern void lock_flocks(void); | ||
84 | extern void unlock_flocks(void); | ||
85 | #else /* !CONFIG_FILE_LOCKING */ | ||
86 | @@ -1347,6 +1348,10 @@ static inline int lock_may_write(struct inode *inode, loff_t start, | ||
87 | return 1; | ||
88 | } | ||
89 | |||
90 | +static inline void locks_delete_block(struct file_lock *waiter) | ||
91 | +{ | ||
92 | +} | ||
93 | + | ||
94 | static inline void lock_flocks(void) | ||
95 | { | ||
96 | } | ||
97 | -- | ||
98 | 1.7.9.5 | ||
99 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0039-ARM-tegra-remove-Tegra30-errata-from-MACH_TEGRA_DT.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0039-ARM-tegra-remove-Tegra30-errata-from-MACH_TEGRA_DT.patch new file mode 100644 index 00000000..e43dadaa --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0039-ARM-tegra-remove-Tegra30-errata-from-MACH_TEGRA_DT.patch | |||
@@ -0,0 +1,40 @@ | |||
1 | From 7255ae998bddcdfad51d059ae1c6acfe07221551 Mon Sep 17 00:00:00 2001 | ||
2 | From: Stephen Warren <swarren@nvidia.com> | ||
3 | Date: Thu, 5 Apr 2012 16:50:05 -0600 | ||
4 | Subject: [PATCH 39/60] ARM: tegra: remove Tegra30 errata from MACH_TEGRA_DT | ||
5 | |||
6 | [no upstream commit match, as this is a fix for a mis-applied patch in the | ||
7 | previous 3.2-stable release. - gregkh] | ||
8 | |||
9 | Commit 83e4194 "ARM: tegra: select required CPU and L2 errata options" | ||
10 | contained two chunks; one was errata for Tegra20 (correctly applied) | ||
11 | and the second errata for Tegra30. The latter was accidentally applied | ||
12 | to the wrong config option; Tegra30 support wasn't added until v3.3, | ||
13 | and so the second chunk should have just been dropped. This patch does | ||
14 | so. | ||
15 | |||
16 | Signed-off-by: Stephen Warren <swarren@nvidia.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | arch/arm/mach-tegra/Kconfig | 5 ----- | ||
20 | 1 file changed, 5 deletions(-) | ||
21 | |||
22 | diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig | ||
23 | index dbc59fa..379cdc7 100644 | ||
24 | --- a/arch/arm/mach-tegra/Kconfig | ||
25 | +++ b/arch/arm/mach-tegra/Kconfig | ||
26 | @@ -61,11 +61,6 @@ config MACH_SEABOARD | ||
27 | config MACH_TEGRA_DT | ||
28 | bool "Generic Tegra board (FDT support)" | ||
29 | select USE_OF | ||
30 | - select ARM_ERRATA_743622 | ||
31 | - select ARM_ERRATA_751472 | ||
32 | - select ARM_ERRATA_754322 | ||
33 | - select ARM_ERRATA_764369 | ||
34 | - select PL310_ERRATA_769419 if CACHE_L2X0 | ||
35 | help | ||
36 | Support for generic nVidia Tegra boards using Flattened Device Tree | ||
37 | |||
38 | -- | ||
39 | 1.7.9.5 | ||
40 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0040-mmc-sdhci-dove-Fix-compile-error-by-including-module.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0040-mmc-sdhci-dove-Fix-compile-error-by-including-module.patch new file mode 100644 index 00000000..52f02441 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0040-mmc-sdhci-dove-Fix-compile-error-by-including-module.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From 0055c53d221f32d89397630ae37a7310b5d974a0 Mon Sep 17 00:00:00 2001 | ||
2 | From: =?UTF-8?q?Alf=20H=C3=B8gemark?= <alf@i100.no> | ||
3 | Date: Wed, 4 Apr 2012 12:27:09 -0400 | ||
4 | Subject: [PATCH 40/60] mmc: sdhci-dove: Fix compile error by including | ||
5 | module.h | ||
6 | MIME-Version: 1.0 | ||
7 | Content-Type: text/plain; charset=UTF-8 | ||
8 | Content-Transfer-Encoding: 8bit | ||
9 | |||
10 | commit 8c2fc8e413ecc2c96b696e28d4eb1bc6cee8dc84 upstream. | ||
11 | |||
12 | This patch fixes a compile error in drivers/mmc/host/sdhci-dove.c | ||
13 | by including the linux/module.h file. | ||
14 | |||
15 | Signed-off-by: Alf Høgemark <alf@i100.no> | ||
16 | Signed-off-by: Chris Ball <cjb@laptop.org> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/mmc/host/sdhci-dove.c | 1 + | ||
20 | 1 file changed, 1 insertion(+) | ||
21 | |||
22 | diff --git a/drivers/mmc/host/sdhci-dove.c b/drivers/mmc/host/sdhci-dove.c | ||
23 | index a81312c..31acb70 100644 | ||
24 | --- a/drivers/mmc/host/sdhci-dove.c | ||
25 | +++ b/drivers/mmc/host/sdhci-dove.c | ||
26 | @@ -20,6 +20,7 @@ | ||
27 | */ | ||
28 | |||
29 | #include <linux/io.h> | ||
30 | +#include <linux/module.h> | ||
31 | #include <linux/mmc/host.h> | ||
32 | |||
33 | #include "sdhci-pltfm.h" | ||
34 | -- | ||
35 | 1.7.9.5 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0041-mmc-atmel-mci-correct-data-timeout-computation.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0041-mmc-atmel-mci-correct-data-timeout-computation.patch new file mode 100644 index 00000000..c43c66ae --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0041-mmc-atmel-mci-correct-data-timeout-computation.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From cd7bf853d4130f7b81d066e7760289e3485beb4b Mon Sep 17 00:00:00 2001 | ||
2 | From: Ludovic Desroches <ludovic.desroches@atmel.com> | ||
3 | Date: Wed, 28 Mar 2012 12:28:33 +0200 | ||
4 | Subject: [PATCH 41/60] mmc: atmel-mci: correct data timeout computation | ||
5 | |||
6 | commit 66292ad92c6d3f2f1c137a1c826b331ca8595dfd upstream. | ||
7 | |||
8 | The HSMCI operates at a rate of up to Master Clock divided by two. | ||
9 | Moreover previous calculation can cause overflows and so wrong | ||
10 | timeouts. | ||
11 | |||
12 | Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> | ||
13 | Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> | ||
14 | Signed-off-by: Chris Ball <cjb@laptop.org> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/mmc/host/atmel-mci.c | 9 ++++++++- | ||
18 | 1 file changed, 8 insertions(+), 1 deletion(-) | ||
19 | |||
20 | diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c | ||
21 | index 9896933..0932024 100644 | ||
22 | --- a/drivers/mmc/host/atmel-mci.c | ||
23 | +++ b/drivers/mmc/host/atmel-mci.c | ||
24 | @@ -480,7 +480,14 @@ err: | ||
25 | static inline unsigned int atmci_ns_to_clocks(struct atmel_mci *host, | ||
26 | unsigned int ns) | ||
27 | { | ||
28 | - return (ns * (host->bus_hz / 1000000) + 999) / 1000; | ||
29 | + /* | ||
30 | + * It is easier here to use us instead of ns for the timeout, | ||
31 | + * it prevents from overflows during calculation. | ||
32 | + */ | ||
33 | + unsigned int us = DIV_ROUND_UP(ns, 1000); | ||
34 | + | ||
35 | + /* Maximum clock frequency is host->bus_hz/2 */ | ||
36 | + return us * (DIV_ROUND_UP(host->bus_hz, 2000000)); | ||
37 | } | ||
38 | |||
39 | static void atmci_set_timeout(struct atmel_mci *host, | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0042-tcm_fc-Add-abort-flag-for-gracefully-handling-exchan.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0042-tcm_fc-Add-abort-flag-for-gracefully-handling-exchan.patch new file mode 100644 index 00000000..d04f6804 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0042-tcm_fc-Add-abort-flag-for-gracefully-handling-exchan.patch | |||
@@ -0,0 +1,102 @@ | |||
1 | From 3d49fca1a4b93c2fad7a36f29c6e58e4126cad8e Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Rustad <mark.d.rustad@intel.com> | ||
3 | Date: Tue, 3 Apr 2012 10:24:41 -0700 | ||
4 | Subject: [PATCH 42/60] tcm_fc: Add abort flag for gracefully handling | ||
5 | exchange timeout | ||
6 | |||
7 | commit e1c4038282c7586c3544542b37872c434669d3ac upstream. | ||
8 | |||
9 | Add abort flag and use it to terminate processing when an exchange | ||
10 | is timed out or is reset. The abort flag is used in place of the | ||
11 | transport_generic_free_cmd function call in the reset and timeout | ||
12 | cases, because calling that function in that context would free | ||
13 | memory that was in use. The aborted flag allows the lifetime to | ||
14 | be managed in a more normal way, while truncating the processing. | ||
15 | |||
16 | This change eliminates a source of memory corruption which | ||
17 | manifested in a variety of ugly ways. | ||
18 | |||
19 | (nab: Drop unused struct fc_exch *ep in ft_recv_seq) | ||
20 | |||
21 | Signed-off-by: Mark Rustad <mark.d.rustad@intel.com> | ||
22 | Acked-by: Kiran Patil <Kiran.patil@intel.com> | ||
23 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/target/tcm_fc/tcm_fc.h | 1 + | ||
27 | drivers/target/tcm_fc/tfc_cmd.c | 10 ++++++++-- | ||
28 | drivers/target/tcm_fc/tfc_io.c | 2 ++ | ||
29 | 3 files changed, 11 insertions(+), 2 deletions(-) | ||
30 | |||
31 | diff --git a/drivers/target/tcm_fc/tcm_fc.h b/drivers/target/tcm_fc/tcm_fc.h | ||
32 | index e05c551..be7ed12 100644 | ||
33 | --- a/drivers/target/tcm_fc/tcm_fc.h | ||
34 | +++ b/drivers/target/tcm_fc/tcm_fc.h | ||
35 | @@ -124,6 +124,7 @@ struct ft_cmd { | ||
36 | /* Local sense buffer */ | ||
37 | unsigned char ft_sense_buffer[TRANSPORT_SENSE_BUFFER]; | ||
38 | u32 was_ddp_setup:1; /* Set only if ddp is setup */ | ||
39 | + u32 aborted:1; /* Set if aborted by reset or timeout */ | ||
40 | struct scatterlist *sg; /* Set only if DDP is setup */ | ||
41 | u32 sg_cnt; /* No. of item in scatterlist */ | ||
42 | }; | ||
43 | diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c | ||
44 | index 754b669..d95cfe2 100644 | ||
45 | --- a/drivers/target/tcm_fc/tfc_cmd.c | ||
46 | +++ b/drivers/target/tcm_fc/tfc_cmd.c | ||
47 | @@ -130,6 +130,8 @@ int ft_queue_status(struct se_cmd *se_cmd) | ||
48 | struct fc_exch *ep; | ||
49 | size_t len; | ||
50 | |||
51 | + if (cmd->aborted) | ||
52 | + return 0; | ||
53 | ft_dump_cmd(cmd, __func__); | ||
54 | ep = fc_seq_exch(cmd->seq); | ||
55 | lport = ep->lp; | ||
56 | @@ -196,6 +198,8 @@ int ft_write_pending(struct se_cmd *se_cmd) | ||
57 | |||
58 | ft_dump_cmd(cmd, __func__); | ||
59 | |||
60 | + if (cmd->aborted) | ||
61 | + return 0; | ||
62 | ep = fc_seq_exch(cmd->seq); | ||
63 | lport = ep->lp; | ||
64 | fp = fc_frame_alloc(lport, sizeof(*txrdy)); | ||
65 | @@ -266,10 +270,10 @@ static void ft_recv_seq(struct fc_seq *sp, struct fc_frame *fp, void *arg) | ||
66 | struct ft_cmd *cmd = arg; | ||
67 | struct fc_frame_header *fh; | ||
68 | |||
69 | - if (IS_ERR(fp)) { | ||
70 | + if (unlikely(IS_ERR(fp))) { | ||
71 | /* XXX need to find cmd if queued */ | ||
72 | cmd->seq = NULL; | ||
73 | - transport_generic_free_cmd(&cmd->se_cmd, 0); | ||
74 | + cmd->aborted = true; | ||
75 | return; | ||
76 | } | ||
77 | |||
78 | @@ -447,6 +451,8 @@ int ft_queue_tm_resp(struct se_cmd *se_cmd) | ||
79 | struct se_tmr_req *tmr = se_cmd->se_tmr_req; | ||
80 | enum fcp_resp_rsp_codes code; | ||
81 | |||
82 | + if (cmd->aborted) | ||
83 | + return 0; | ||
84 | switch (tmr->response) { | ||
85 | case TMR_FUNCTION_COMPLETE: | ||
86 | code = FCP_TMF_CMPL; | ||
87 | diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c | ||
88 | index 1369b1c..ada131c 100644 | ||
89 | --- a/drivers/target/tcm_fc/tfc_io.c | ||
90 | +++ b/drivers/target/tcm_fc/tfc_io.c | ||
91 | @@ -84,6 +84,8 @@ int ft_queue_data_in(struct se_cmd *se_cmd) | ||
92 | void *from; | ||
93 | void *to = NULL; | ||
94 | |||
95 | + if (cmd->aborted) | ||
96 | + return 0; | ||
97 | ep = fc_seq_exch(cmd->seq); | ||
98 | lport = ep->lp; | ||
99 | cmd->seq = lport->tt.seq_start_next(cmd->seq); | ||
100 | -- | ||
101 | 1.7.9.5 | ||
102 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0043-tcm_fc-Do-not-free-tpg-structure-during-wq-allocatio.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0043-tcm_fc-Do-not-free-tpg-structure-during-wq-allocatio.patch new file mode 100644 index 00000000..79c921ed --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0043-tcm_fc-Do-not-free-tpg-structure-during-wq-allocatio.patch | |||
@@ -0,0 +1,61 @@ | |||
1 | From dd64e41dfd092de59c1dc5c58ceb26837c16a17c Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Rustad <mark.d.rustad@intel.com> | ||
3 | Date: Tue, 3 Apr 2012 10:24:52 -0700 | ||
4 | Subject: [PATCH 43/60] tcm_fc: Do not free tpg structure during wq allocation | ||
5 | failure | ||
6 | |||
7 | commit 06383f10c49f507220594a455c6491ca6f8c94ab upstream. | ||
8 | |||
9 | Avoid freeing a registered tpg structure if an alloc_workqueue call | ||
10 | fails. This fixes a bug where the failure was leaking memory associated | ||
11 | with se_portal_group setup during the original core_tpg_register() call. | ||
12 | |||
13 | Signed-off-by: Mark Rustad <mark.d.rustad@intel.com> | ||
14 | Acked-by: Kiran Patil <Kiran.patil@intel.com> | ||
15 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/target/tcm_fc/tfc_conf.c | 13 ++++++++----- | ||
19 | 1 file changed, 8 insertions(+), 5 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c | ||
22 | index 9402b73..7962325 100644 | ||
23 | --- a/drivers/target/tcm_fc/tfc_conf.c | ||
24 | +++ b/drivers/target/tcm_fc/tfc_conf.c | ||
25 | @@ -304,6 +304,7 @@ static struct se_portal_group *ft_add_tpg( | ||
26 | { | ||
27 | struct ft_lport_acl *lacl; | ||
28 | struct ft_tpg *tpg; | ||
29 | + struct workqueue_struct *wq; | ||
30 | unsigned long index; | ||
31 | int ret; | ||
32 | |||
33 | @@ -325,18 +326,20 @@ static struct se_portal_group *ft_add_tpg( | ||
34 | tpg->lport_acl = lacl; | ||
35 | INIT_LIST_HEAD(&tpg->lun_list); | ||
36 | |||
37 | - ret = core_tpg_register(&ft_configfs->tf_ops, wwn, &tpg->se_tpg, | ||
38 | - tpg, TRANSPORT_TPG_TYPE_NORMAL); | ||
39 | - if (ret < 0) { | ||
40 | + wq = alloc_workqueue("tcm_fc", 0, 1); | ||
41 | + if (!wq) { | ||
42 | kfree(tpg); | ||
43 | return NULL; | ||
44 | } | ||
45 | |||
46 | - tpg->workqueue = alloc_workqueue("tcm_fc", 0, 1); | ||
47 | - if (!tpg->workqueue) { | ||
48 | + ret = core_tpg_register(&ft_configfs->tf_ops, wwn, &tpg->se_tpg, | ||
49 | + tpg, TRANSPORT_TPG_TYPE_NORMAL); | ||
50 | + if (ret < 0) { | ||
51 | + destroy_workqueue(wq); | ||
52 | kfree(tpg); | ||
53 | return NULL; | ||
54 | } | ||
55 | + tpg->workqueue = wq; | ||
56 | |||
57 | mutex_lock(&ft_lport_lock); | ||
58 | list_add_tail(&tpg->list, &lacl->tpg_list); | ||
59 | -- | ||
60 | 1.7.9.5 | ||
61 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0044-sysctl-fix-write-access-to-dmesg_restrict-kptr_restr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0044-sysctl-fix-write-access-to-dmesg_restrict-kptr_restr.patch new file mode 100644 index 00000000..e9c6efd3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0044-sysctl-fix-write-access-to-dmesg_restrict-kptr_restr.patch | |||
@@ -0,0 +1,72 @@ | |||
1 | From 444559e0fe29e31b1a95a3668c530bd1aed732ce Mon Sep 17 00:00:00 2001 | ||
2 | From: Kees Cook <keescook@chromium.org> | ||
3 | Date: Wed, 4 Apr 2012 11:40:19 -0700 | ||
4 | Subject: [PATCH 44/60] sysctl: fix write access to | ||
5 | dmesg_restrict/kptr_restrict | ||
6 | |||
7 | commit 620f6e8e855d6d447688a5f67a4e176944a084e8 upstream. | ||
8 | |||
9 | Commit bfdc0b4 adds code to restrict access to dmesg_restrict, | ||
10 | however, it incorrectly alters kptr_restrict rather than | ||
11 | dmesg_restrict. | ||
12 | |||
13 | The original patch from Richard Weinberger | ||
14 | (https://lkml.org/lkml/2011/3/14/362) alters dmesg_restrict as | ||
15 | expected, and so the patch seems to have been misapplied. | ||
16 | |||
17 | This adds the CAP_SYS_ADMIN check to both dmesg_restrict and | ||
18 | kptr_restrict, since both are sensitive. | ||
19 | |||
20 | Reported-by: Phillip Lougher <plougher@redhat.com> | ||
21 | Signed-off-by: Kees Cook <keescook@chromium.org> | ||
22 | Acked-by: Serge Hallyn <serge.hallyn@canonical.com> | ||
23 | Acked-by: Richard Weinberger <richard@nod.at> | ||
24 | Signed-off-by: James Morris <james.l.morris@oracle.com> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | kernel/sysctl.c | 8 ++++---- | ||
28 | 1 file changed, 4 insertions(+), 4 deletions(-) | ||
29 | |||
30 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c | ||
31 | index ae27196..ea7ec7f 100644 | ||
32 | --- a/kernel/sysctl.c | ||
33 | +++ b/kernel/sysctl.c | ||
34 | @@ -166,7 +166,7 @@ static int proc_taint(struct ctl_table *table, int write, | ||
35 | #endif | ||
36 | |||
37 | #ifdef CONFIG_PRINTK | ||
38 | -static int proc_dmesg_restrict(struct ctl_table *table, int write, | ||
39 | +static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, | ||
40 | void __user *buffer, size_t *lenp, loff_t *ppos); | ||
41 | #endif | ||
42 | |||
43 | @@ -713,7 +713,7 @@ static struct ctl_table kern_table[] = { | ||
44 | .data = &dmesg_restrict, | ||
45 | .maxlen = sizeof(int), | ||
46 | .mode = 0644, | ||
47 | - .proc_handler = proc_dointvec_minmax, | ||
48 | + .proc_handler = proc_dointvec_minmax_sysadmin, | ||
49 | .extra1 = &zero, | ||
50 | .extra2 = &one, | ||
51 | }, | ||
52 | @@ -722,7 +722,7 @@ static struct ctl_table kern_table[] = { | ||
53 | .data = &kptr_restrict, | ||
54 | .maxlen = sizeof(int), | ||
55 | .mode = 0644, | ||
56 | - .proc_handler = proc_dmesg_restrict, | ||
57 | + .proc_handler = proc_dointvec_minmax_sysadmin, | ||
58 | .extra1 = &zero, | ||
59 | .extra2 = &two, | ||
60 | }, | ||
61 | @@ -2422,7 +2422,7 @@ static int proc_taint(struct ctl_table *table, int write, | ||
62 | } | ||
63 | |||
64 | #ifdef CONFIG_PRINTK | ||
65 | -static int proc_dmesg_restrict(struct ctl_table *table, int write, | ||
66 | +static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, | ||
67 | void __user *buffer, size_t *lenp, loff_t *ppos) | ||
68 | { | ||
69 | if (write && !capable(CAP_SYS_ADMIN)) | ||
70 | -- | ||
71 | 1.7.9.5 | ||
72 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0045-modpost-Fix-modpost-license-checking-of-vmlinux.o.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0045-modpost-Fix-modpost-license-checking-of-vmlinux.o.patch new file mode 100644 index 00000000..8fcd35e8 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0045-modpost-Fix-modpost-license-checking-of-vmlinux.o.patch | |||
@@ -0,0 +1,74 @@ | |||
1 | From ee1916e58deb327a1bbaba6fc344e593fc54764f Mon Sep 17 00:00:00 2001 | ||
2 | From: Frank Rowand <frank.rowand@am.sony.com> | ||
3 | Date: Mon, 9 Apr 2012 17:59:03 -0700 | ||
4 | Subject: [PATCH 45/60] modpost: Fix modpost license checking of vmlinux.o | ||
5 | |||
6 | commit 258f742635360175564e9470eb060ff4d4b984e7 upstream. | ||
7 | |||
8 | Commit f02e8a6596b7 ("module: Sort exported symbols") sorts symbols | ||
9 | placing each of them in its own elf section. This sorting and merging | ||
10 | into the canonical sections are done by the linker. | ||
11 | |||
12 | Unfortunately modpost to generate Module.symvers file parses vmlinux.o | ||
13 | (which is not linked yet) and all modules object files (which aren't | ||
14 | linked yet). These aren't sanitized by the linker yet. That breaks | ||
15 | modpost that can't detect license properly for modules. | ||
16 | |||
17 | This patch makes modpost aware of the new exported symbols structure. | ||
18 | |||
19 | [ This above is a slightly corrected version of the explanation of the | ||
20 | problem, copied from commit 62a2635610db ("modpost: Fix modpost's | ||
21 | license checking V3"). That commit fixed the problem for module | ||
22 | object files, but not for vmlinux.o. This patch fixes modpost for | ||
23 | vmlinux.o. ] | ||
24 | |||
25 | Signed-off-by: Frank Rowand <frank.rowand@am.sony.com> | ||
26 | Signed-off-by: Alessio Igor Bogani <abogani@kernel.org> | ||
27 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
28 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
29 | --- | ||
30 | scripts/mod/modpost.c | 7 +++++-- | ||
31 | scripts/mod/modpost.h | 1 + | ||
32 | 2 files changed, 6 insertions(+), 2 deletions(-) | ||
33 | |||
34 | diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c | ||
35 | index 159b4cc..619228d 100644 | ||
36 | --- a/scripts/mod/modpost.c | ||
37 | +++ b/scripts/mod/modpost.c | ||
38 | @@ -132,8 +132,10 @@ static struct module *new_module(char *modname) | ||
39 | /* strip trailing .o */ | ||
40 | s = strrchr(p, '.'); | ||
41 | if (s != NULL) | ||
42 | - if (strcmp(s, ".o") == 0) | ||
43 | + if (strcmp(s, ".o") == 0) { | ||
44 | *s = '\0'; | ||
45 | + mod->is_dot_o = 1; | ||
46 | + } | ||
47 | |||
48 | /* add to list */ | ||
49 | mod->name = p; | ||
50 | @@ -587,7 +589,8 @@ static void handle_modversions(struct module *mod, struct elf_info *info, | ||
51 | unsigned int crc; | ||
52 | enum export export; | ||
53 | |||
54 | - if (!is_vmlinux(mod->name) && strncmp(symname, "__ksymtab", 9) == 0) | ||
55 | + if ((!is_vmlinux(mod->name) || mod->is_dot_o) && | ||
56 | + strncmp(symname, "__ksymtab", 9) == 0) | ||
57 | export = export_from_secname(info, get_secindex(info, sym)); | ||
58 | else | ||
59 | export = export_from_sec(info, get_secindex(info, sym)); | ||
60 | diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h | ||
61 | index 2031119..51207e4 100644 | ||
62 | --- a/scripts/mod/modpost.h | ||
63 | +++ b/scripts/mod/modpost.h | ||
64 | @@ -113,6 +113,7 @@ struct module { | ||
65 | int has_cleanup; | ||
66 | struct buffer dev_table_buf; | ||
67 | char srcversion[25]; | ||
68 | + int is_dot_o; | ||
69 | }; | ||
70 | |||
71 | struct elf_info { | ||
72 | -- | ||
73 | 1.7.9.5 | ||
74 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0046-x86-PCI-use-host-bridge-_CRS-info-on-MSI-MS-7253.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0046-x86-PCI-use-host-bridge-_CRS-info-on-MSI-MS-7253.patch new file mode 100644 index 00000000..e122d2a3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0046-x86-PCI-use-host-bridge-_CRS-info-on-MSI-MS-7253.patch | |||
@@ -0,0 +1,62 @@ | |||
1 | From b8c4c0ffa982752ee73d7eb5afaf39635e86ee43 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jonathan Nieder <jrnieder@gmail.com> | ||
3 | Date: Tue, 28 Feb 2012 11:51:10 -0700 | ||
4 | Subject: [PATCH 46/60] x86/PCI: use host bridge _CRS info on MSI MS-7253 | ||
5 | |||
6 | commit 8411371709610c826bf65684f886bfdfb5780ca1 upstream. | ||
7 | |||
8 | In the spirit of commit 29cf7a30f8a0 ("x86/PCI: use host bridge _CRS | ||
9 | info on ASUS M2V-MX SE"), this DMI quirk turns on "pci_use_crs" by | ||
10 | default on a board that needs it. | ||
11 | |||
12 | This fixes boot failures and oopses introduced in 3e3da00c01d0 | ||
13 | ("x86/pci: AMD one chain system to use pci read out res"). The quirk | ||
14 | is quite targetted (to a specific board and BIOS version) for two | ||
15 | reasons: | ||
16 | |||
17 | (1) to emphasize that this method of tackling the problem one quirk | ||
18 | at a time is a little insane | ||
19 | |||
20 | (2) to give BIOS vendors an opportunity to use simpler tables and | ||
21 | allow us to return to generic behavior (whatever that happens to | ||
22 | be) with a later BIOS update | ||
23 | |||
24 | In other words, I am not at all happy with having quirks like this. | ||
25 | But it is even worse for the kernel not to work out of the box on | ||
26 | these machines, so... | ||
27 | |||
28 | Reference: https://bugzilla.kernel.org/show_bug.cgi?id=42619 | ||
29 | Reported-by: Svante Signell <svante.signell@telia.com> | ||
30 | Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> | ||
31 | Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> | ||
32 | Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
33 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
34 | --- | ||
35 | arch/x86/pci/acpi.c | 11 +++++++++++ | ||
36 | 1 file changed, 11 insertions(+) | ||
37 | |||
38 | diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c | ||
39 | index f8348ab..dc00ad5 100644 | ||
40 | --- a/arch/x86/pci/acpi.c | ||
41 | +++ b/arch/x86/pci/acpi.c | ||
42 | @@ -54,6 +54,17 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { | ||
43 | DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), | ||
44 | }, | ||
45 | }, | ||
46 | + /* https://bugzilla.kernel.org/show_bug.cgi?id=42619 */ | ||
47 | + { | ||
48 | + .callback = set_use_crs, | ||
49 | + .ident = "MSI MS-7253", | ||
50 | + .matches = { | ||
51 | + DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), | ||
52 | + DMI_MATCH(DMI_BOARD_NAME, "MS-7253"), | ||
53 | + DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"), | ||
54 | + DMI_MATCH(DMI_BIOS_VERSION, "V1.6"), | ||
55 | + }, | ||
56 | + }, | ||
57 | {} | ||
58 | }; | ||
59 | |||
60 | -- | ||
61 | 1.7.9.5 | ||
62 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0047-x86-PCI-do-not-tie-MSI-MS-7253-use_crs-quirk-to-BIOS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0047-x86-PCI-do-not-tie-MSI-MS-7253-use_crs-quirk-to-BIOS.patch new file mode 100644 index 00000000..240d1beb --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0047-x86-PCI-do-not-tie-MSI-MS-7253-use_crs-quirk-to-BIOS.patch | |||
@@ -0,0 +1,50 @@ | |||
1 | From 6283a8eb02e48cf6f56470723c8b2f518dbe6554 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jonathan Nieder <jrnieder@gmail.com> | ||
3 | Date: Tue, 28 Feb 2012 15:31:35 -0600 | ||
4 | Subject: [PATCH 47/60] x86/PCI: do not tie MSI MS-7253 use_crs quirk to BIOS | ||
5 | version | ||
6 | |||
7 | commit a97f4f5e524bcd09a85ef0b8821a14d35e69335f upstream. | ||
8 | |||
9 | Carlos was getting | ||
10 | |||
11 | WARNING: at drivers/pci/pci.c:118 pci_ioremap_bar+0x24/0x52() | ||
12 | |||
13 | when probing his sound card, and sound did not work. After adding | ||
14 | pci=use_crs to the kernel command line, no more trouble. | ||
15 | |||
16 | Ok, we can add a quirk. dmidecode output reveals that this is an MSI | ||
17 | MS-7253, for which we already have a quirk, but the short-sighted | ||
18 | author tied the quirk to a single BIOS version, making it not kick in | ||
19 | on Carlos's machine with BIOS V1.2. If a later BIOS update makes it | ||
20 | no longer necessary to look at the _CRS info it will still be | ||
21 | harmless, so let's stop trying to guess which versions have and don't | ||
22 | have accurate _CRS tables. | ||
23 | |||
24 | Addresses https://bugtrack.alsa-project.org/alsa-bug/view.php?id=5533 | ||
25 | Also see <https://bugzilla.kernel.org/show_bug.cgi?id=42619>. | ||
26 | |||
27 | Reported-by: Carlos Luna <caralu74@gmail.com> | ||
28 | Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> | ||
29 | Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> | ||
30 | Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
31 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
32 | --- | ||
33 | arch/x86/pci/acpi.c | 1 - | ||
34 | 1 file changed, 1 deletion(-) | ||
35 | |||
36 | diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c | ||
37 | index dc00ad5..0ed97d8 100644 | ||
38 | --- a/arch/x86/pci/acpi.c | ||
39 | +++ b/arch/x86/pci/acpi.c | ||
40 | @@ -62,7 +62,6 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { | ||
41 | DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), | ||
42 | DMI_MATCH(DMI_BOARD_NAME, "MS-7253"), | ||
43 | DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"), | ||
44 | - DMI_MATCH(DMI_BIOS_VERSION, "V1.6"), | ||
45 | }, | ||
46 | }, | ||
47 | {} | ||
48 | -- | ||
49 | 1.7.9.5 | ||
50 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0048-TOMOYO-Fix-mount-flags-checking-order.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0048-TOMOYO-Fix-mount-flags-checking-order.patch new file mode 100644 index 00000000..114b0a02 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0048-TOMOYO-Fix-mount-flags-checking-order.patch | |||
@@ -0,0 +1,91 @@ | |||
1 | From 94366efb1ed1a86595b8b1bd4f0d22f581b5a6c2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> | ||
3 | Date: Wed, 29 Feb 2012 21:53:22 +0900 | ||
4 | Subject: [PATCH 48/60] TOMOYO: Fix mount flags checking order. | ||
5 | |||
6 | commit df91e49477a9be15921cb2854e1d12a3bdb5e425 upstream. | ||
7 | |||
8 | Userspace can pass in arbitrary combinations of MS_* flags to mount(). | ||
9 | |||
10 | If both MS_BIND and one of MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE are | ||
11 | passed, device name which should be checked for MS_BIND was not checked because | ||
12 | MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE had higher priority than MS_BIND. | ||
13 | |||
14 | If both one of MS_BIND/MS_MOVE and MS_REMOUNT are passed, device name which | ||
15 | should not be checked for MS_REMOUNT was checked because MS_BIND/MS_MOVE had | ||
16 | higher priority than MS_REMOUNT. | ||
17 | |||
18 | Fix these bugs by changing priority to MS_REMOUNT -> MS_BIND -> | ||
19 | MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE -> MS_MOVE as with do_mount() does. | ||
20 | |||
21 | Also, unconditionally return -EINVAL if more than one of | ||
22 | MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE is passed so that TOMOYO will not | ||
23 | generate inaccurate audit logs, for commit 7a2e8a8f "VFS: Sanity check mount | ||
24 | flags passed to change_mnt_propagation()" clarified that these flags must be | ||
25 | exclusively passed. | ||
26 | |||
27 | Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> | ||
28 | Signed-off-by: James Morris <james.l.morris@oracle.com> | ||
29 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
30 | --- | ||
31 | security/tomoyo/mount.c | 38 ++++++++++++++++++++------------------ | ||
32 | 1 file changed, 20 insertions(+), 18 deletions(-) | ||
33 | |||
34 | diff --git a/security/tomoyo/mount.c b/security/tomoyo/mount.c | ||
35 | index bee09d0..fe00cdf 100644 | ||
36 | --- a/security/tomoyo/mount.c | ||
37 | +++ b/security/tomoyo/mount.c | ||
38 | @@ -199,30 +199,32 @@ int tomoyo_mount_permission(char *dev_name, struct path *path, | ||
39 | if (flags & MS_REMOUNT) { | ||
40 | type = tomoyo_mounts[TOMOYO_MOUNT_REMOUNT]; | ||
41 | flags &= ~MS_REMOUNT; | ||
42 | - } | ||
43 | - if (flags & MS_MOVE) { | ||
44 | - type = tomoyo_mounts[TOMOYO_MOUNT_MOVE]; | ||
45 | - flags &= ~MS_MOVE; | ||
46 | - } | ||
47 | - if (flags & MS_BIND) { | ||
48 | + } else if (flags & MS_BIND) { | ||
49 | type = tomoyo_mounts[TOMOYO_MOUNT_BIND]; | ||
50 | flags &= ~MS_BIND; | ||
51 | - } | ||
52 | - if (flags & MS_UNBINDABLE) { | ||
53 | - type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_UNBINDABLE]; | ||
54 | - flags &= ~MS_UNBINDABLE; | ||
55 | - } | ||
56 | - if (flags & MS_PRIVATE) { | ||
57 | + } else if (flags & MS_SHARED) { | ||
58 | + if (flags & (MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE)) | ||
59 | + return -EINVAL; | ||
60 | + type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_SHARED]; | ||
61 | + flags &= ~MS_SHARED; | ||
62 | + } else if (flags & MS_PRIVATE) { | ||
63 | + if (flags & (MS_SHARED | MS_SLAVE | MS_UNBINDABLE)) | ||
64 | + return -EINVAL; | ||
65 | type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_PRIVATE]; | ||
66 | flags &= ~MS_PRIVATE; | ||
67 | - } | ||
68 | - if (flags & MS_SLAVE) { | ||
69 | + } else if (flags & MS_SLAVE) { | ||
70 | + if (flags & (MS_SHARED | MS_PRIVATE | MS_UNBINDABLE)) | ||
71 | + return -EINVAL; | ||
72 | type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_SLAVE]; | ||
73 | flags &= ~MS_SLAVE; | ||
74 | - } | ||
75 | - if (flags & MS_SHARED) { | ||
76 | - type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_SHARED]; | ||
77 | - flags &= ~MS_SHARED; | ||
78 | + } else if (flags & MS_UNBINDABLE) { | ||
79 | + if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE)) | ||
80 | + return -EINVAL; | ||
81 | + type = tomoyo_mounts[TOMOYO_MOUNT_MAKE_UNBINDABLE]; | ||
82 | + flags &= ~MS_UNBINDABLE; | ||
83 | + } else if (flags & MS_MOVE) { | ||
84 | + type = tomoyo_mounts[TOMOYO_MOUNT_MOVE]; | ||
85 | + flags &= ~MS_MOVE; | ||
86 | } | ||
87 | if (!type) | ||
88 | type = "<NULL>"; | ||
89 | -- | ||
90 | 1.7.9.5 | ||
91 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0049-Revert-x86-ioapic-Add-register-level-checks-to-detec.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0049-Revert-x86-ioapic-Add-register-level-checks-to-detec.patch new file mode 100644 index 00000000..505f91f5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0049-Revert-x86-ioapic-Add-register-level-checks-to-detec.patch | |||
@@ -0,0 +1,100 @@ | |||
1 | From 411c3c5e1a3ce763286c32ec38523f111d836fdc Mon Sep 17 00:00:00 2001 | ||
2 | From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
3 | Date: Tue, 10 Apr 2012 16:04:49 -0700 | ||
4 | Subject: [PATCH 49/60] Revert "x86/ioapic: Add register level checks to | ||
5 | detect bogus io-apic entries" | ||
6 | |||
7 | This reverts commit 273fb194e86b795b08a724c7646d0f694949070b | ||
8 | [73d63d038ee9f769f5e5b46792d227fe20e442c5 upstream] | ||
9 | |||
10 | It causes problems, so needs to be reverted from 3.2-stable for now. | ||
11 | |||
12 | Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||
13 | Cc: Jon Dufresne <jon@jondufresne.org> | ||
14 | Cc: Suresh Siddha <suresh.b.siddha@intel.com> | ||
15 | Cc: <yinghai@kernel.org> | ||
16 | Cc: Josh Boyer <jwboyer@redhat.com> | ||
17 | Cc: Ingo Molnar <mingo@elte.hu> | ||
18 | Cc: Teck Choon Giam <giamteckchoon@gmail.com> | ||
19 | Cc: Ben Guthro <ben@guthro.net> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | arch/x86/kernel/apic/io_apic.c | 40 ++++++++-------------------------------- | ||
23 | 1 file changed, 8 insertions(+), 32 deletions(-) | ||
24 | |||
25 | diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c | ||
26 | index a25e276..6d939d7 100644 | ||
27 | --- a/arch/x86/kernel/apic/io_apic.c | ||
28 | +++ b/arch/x86/kernel/apic/io_apic.c | ||
29 | @@ -3963,36 +3963,18 @@ int mp_find_ioapic_pin(int ioapic, u32 gsi) | ||
30 | static __init int bad_ioapic(unsigned long address) | ||
31 | { | ||
32 | if (nr_ioapics >= MAX_IO_APICS) { | ||
33 | - pr_warn("WARNING: Max # of I/O APICs (%d) exceeded (found %d), skipping\n", | ||
34 | - MAX_IO_APICS, nr_ioapics); | ||
35 | + printk(KERN_WARNING "WARNING: Max # of I/O APICs (%d) exceeded " | ||
36 | + "(found %d), skipping\n", MAX_IO_APICS, nr_ioapics); | ||
37 | return 1; | ||
38 | } | ||
39 | if (!address) { | ||
40 | - pr_warn("WARNING: Bogus (zero) I/O APIC address found in table, skipping!\n"); | ||
41 | + printk(KERN_WARNING "WARNING: Bogus (zero) I/O APIC address" | ||
42 | + " found in table, skipping!\n"); | ||
43 | return 1; | ||
44 | } | ||
45 | return 0; | ||
46 | } | ||
47 | |||
48 | -static __init int bad_ioapic_register(int idx) | ||
49 | -{ | ||
50 | - union IO_APIC_reg_00 reg_00; | ||
51 | - union IO_APIC_reg_01 reg_01; | ||
52 | - union IO_APIC_reg_02 reg_02; | ||
53 | - | ||
54 | - reg_00.raw = io_apic_read(idx, 0); | ||
55 | - reg_01.raw = io_apic_read(idx, 1); | ||
56 | - reg_02.raw = io_apic_read(idx, 2); | ||
57 | - | ||
58 | - if (reg_00.raw == -1 && reg_01.raw == -1 && reg_02.raw == -1) { | ||
59 | - pr_warn("I/O APIC 0x%x registers return all ones, skipping!\n", | ||
60 | - mpc_ioapic_addr(idx)); | ||
61 | - return 1; | ||
62 | - } | ||
63 | - | ||
64 | - return 0; | ||
65 | -} | ||
66 | - | ||
67 | void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) | ||
68 | { | ||
69 | int idx = 0; | ||
70 | @@ -4009,12 +3991,6 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) | ||
71 | ioapics[idx].mp_config.apicaddr = address; | ||
72 | |||
73 | set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); | ||
74 | - | ||
75 | - if (bad_ioapic_register(idx)) { | ||
76 | - clear_fixmap(FIX_IO_APIC_BASE_0 + idx); | ||
77 | - return; | ||
78 | - } | ||
79 | - | ||
80 | ioapics[idx].mp_config.apicid = io_apic_unique_id(id); | ||
81 | ioapics[idx].mp_config.apicver = io_apic_get_version(idx); | ||
82 | |||
83 | @@ -4035,10 +4011,10 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) | ||
84 | if (gsi_cfg->gsi_end >= gsi_top) | ||
85 | gsi_top = gsi_cfg->gsi_end + 1; | ||
86 | |||
87 | - pr_info("IOAPIC[%d]: apic_id %d, version %d, address 0x%x, GSI %d-%d\n", | ||
88 | - idx, mpc_ioapic_id(idx), | ||
89 | - mpc_ioapic_ver(idx), mpc_ioapic_addr(idx), | ||
90 | - gsi_cfg->gsi_base, gsi_cfg->gsi_end); | ||
91 | + printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, " | ||
92 | + "GSI %d-%d\n", idx, mpc_ioapic_id(idx), | ||
93 | + mpc_ioapic_ver(idx), mpc_ioapic_addr(idx), | ||
94 | + gsi_cfg->gsi_base, gsi_cfg->gsi_end); | ||
95 | |||
96 | nr_ioapics++; | ||
97 | } | ||
98 | -- | ||
99 | 1.7.9.5 | ||
100 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0050-acer-wmi-No-wifi-rfkill-on-Sony-machines.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0050-acer-wmi-No-wifi-rfkill-on-Sony-machines.patch new file mode 100644 index 00000000..b5644804 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0050-acer-wmi-No-wifi-rfkill-on-Sony-machines.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From ad14133a305d5de3309f31b52c0e9456eb3310be Mon Sep 17 00:00:00 2001 | ||
2 | From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> | ||
3 | Date: Fri, 23 Mar 2012 12:36:44 +0800 | ||
4 | Subject: [PATCH 50/60] acer-wmi: No wifi rfkill on Sony machines | ||
5 | |||
6 | commit 5719b81988f3c24ff694dc3a37e35b35630a3966 upstream. | ||
7 | |||
8 | The wireless rfkill should charged by sony-laptop but not acer-wmi. | ||
9 | So, add Sony's SNY5001 acpi device to blacklist in acer-wmi. | ||
10 | |||
11 | Tested on Sony Vaio | ||
12 | |||
13 | Cc: Carlos Corbacho <carlos@strangeworlds.co.uk> | ||
14 | Cc: Matthew Garrett <mjg@redhat.com> | ||
15 | Cc: Mattia Dongili <malattia@linux.it> | ||
16 | Cc: Dimitris N <ddarlac@gmail.com> | ||
17 | Tested-by: Dimitris N <ddarlac@gmail.com> | ||
18 | Signed-off-by: Lee, Chun-Yi <jlee@suse.com> | ||
19 | Signed-off-by: Matthew Garrett <mjg@redhat.com> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | drivers/platform/x86/acer-wmi.c | 1 + | ||
23 | 1 file changed, 1 insertion(+) | ||
24 | |||
25 | diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c | ||
26 | index 1e5290b..110e4af 100644 | ||
27 | --- a/drivers/platform/x86/acer-wmi.c | ||
28 | +++ b/drivers/platform/x86/acer-wmi.c | ||
29 | @@ -692,6 +692,7 @@ static const struct acpi_device_id norfkill_ids[] = { | ||
30 | { "VPC2004", 0}, | ||
31 | { "IBM0068", 0}, | ||
32 | { "LEN0068", 0}, | ||
33 | + { "SNY5001", 0}, /* sony-laptop in charge */ | ||
34 | { "", 0}, | ||
35 | }; | ||
36 | |||
37 | -- | ||
38 | 1.7.9.5 | ||
39 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0051-Fix-length-of-buffer-copied-in-__nfs4_get_acl_uncach.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0051-Fix-length-of-buffer-copied-in-__nfs4_get_acl_uncach.patch new file mode 100644 index 00000000..f7551995 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0051-Fix-length-of-buffer-copied-in-__nfs4_get_acl_uncach.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From 9f35dc6cc9f96e7a45b42dd5e4c8e2eee1e84e05 Mon Sep 17 00:00:00 2001 | ||
2 | From: Sachin Prabhu <sprabhu@redhat.com> | ||
3 | Date: Thu, 22 Mar 2012 16:46:28 +0000 | ||
4 | Subject: [PATCH 51/60] Fix length of buffer copied in __nfs4_get_acl_uncached | ||
5 | |||
6 | commit 20e0fa98b751facf9a1101edaefbc19c82616a68 upstream. | ||
7 | |||
8 | _copy_from_pages() used to copy data from the temporary buffer to the | ||
9 | user passed buffer is passed the wrong size parameter when copying | ||
10 | data. res.acl_len contains both the bitmap and acl lenghts while | ||
11 | acl_len contains the acl length after adjusting for the bitmap size. | ||
12 | |||
13 | Signed-off-by: Sachin Prabhu <sprabhu@redhat.com> | ||
14 | Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> | ||
15 | Cc: Josh Boyer <jwboyer@redhat.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | fs/nfs/nfs4proc.c | 2 +- | ||
19 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
20 | |||
21 | diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c | ||
22 | index d945700..757293b 100644 | ||
23 | --- a/fs/nfs/nfs4proc.c | ||
24 | +++ b/fs/nfs/nfs4proc.c | ||
25 | @@ -3618,7 +3618,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu | ||
26 | if (acl_len > buflen) | ||
27 | goto out_free; | ||
28 | _copy_from_pages(buf, pages, res.acl_data_offset, | ||
29 | - res.acl_len); | ||
30 | + acl_len); | ||
31 | } | ||
32 | ret = acl_len; | ||
33 | out_free: | ||
34 | -- | ||
35 | 1.7.9.5 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0052-sched-x86-Fix-overflow-in-cyc2ns_offset.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0052-sched-x86-Fix-overflow-in-cyc2ns_offset.patch new file mode 100644 index 00000000..0300631e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0052-sched-x86-Fix-overflow-in-cyc2ns_offset.patch | |||
@@ -0,0 +1,99 @@ | |||
1 | From 844d37ab7b6069d15d096a879225ac1e71b51974 Mon Sep 17 00:00:00 2001 | ||
2 | From: Salman Qazi <sqazi@google.com> | ||
3 | Date: Fri, 9 Mar 2012 16:41:01 -0800 | ||
4 | Subject: [PATCH 52/60] sched/x86: Fix overflow in cyc2ns_offset | ||
5 | |||
6 | commit 9993bc635d01a6ee7f6b833b4ee65ce7c06350b1 upstream. | ||
7 | |||
8 | When a machine boots up, the TSC generally gets reset. However, | ||
9 | when kexec is used to boot into a kernel, the TSC value would be | ||
10 | carried over from the previous kernel. The computation of | ||
11 | cycns_offset in set_cyc2ns_scale is prone to an overflow, if the | ||
12 | machine has been up more than 208 days prior to the kexec. The | ||
13 | overflow happens when we multiply *scale, even though there is | ||
14 | enough room to store the final answer. | ||
15 | |||
16 | We fix this issue by decomposing tsc_now into the quotient and | ||
17 | remainder of division by CYC2NS_SCALE_FACTOR and then performing | ||
18 | the multiplication separately on the two components. | ||
19 | |||
20 | Refactor code to share the calculation with the previous | ||
21 | fix in __cycles_2_ns(). | ||
22 | |||
23 | Signed-off-by: Salman Qazi <sqazi@google.com> | ||
24 | Acked-by: John Stultz <john.stultz@linaro.org> | ||
25 | Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> | ||
26 | Cc: Paul Turner <pjt@google.com> | ||
27 | Cc: john stultz <johnstul@us.ibm.com> | ||
28 | Link: http://lkml.kernel.org/r/20120310004027.19291.88460.stgit@dungbeetle.mtv.corp.google.com | ||
29 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | ||
30 | Cc: Mike Galbraith <efault@gmx.de> | ||
31 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
32 | --- | ||
33 | arch/x86/include/asm/timer.h | 8 ++------ | ||
34 | arch/x86/kernel/tsc.c | 3 ++- | ||
35 | include/linux/kernel.h | 13 +++++++++++++ | ||
36 | 3 files changed, 17 insertions(+), 7 deletions(-) | ||
37 | |||
38 | diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h | ||
39 | index 431793e..34baa0e 100644 | ||
40 | --- a/arch/x86/include/asm/timer.h | ||
41 | +++ b/arch/x86/include/asm/timer.h | ||
42 | @@ -57,14 +57,10 @@ DECLARE_PER_CPU(unsigned long long, cyc2ns_offset); | ||
43 | |||
44 | static inline unsigned long long __cycles_2_ns(unsigned long long cyc) | ||
45 | { | ||
46 | - unsigned long long quot; | ||
47 | - unsigned long long rem; | ||
48 | int cpu = smp_processor_id(); | ||
49 | unsigned long long ns = per_cpu(cyc2ns_offset, cpu); | ||
50 | - quot = (cyc >> CYC2NS_SCALE_FACTOR); | ||
51 | - rem = cyc & ((1ULL << CYC2NS_SCALE_FACTOR) - 1); | ||
52 | - ns += quot * per_cpu(cyc2ns, cpu) + | ||
53 | - ((rem * per_cpu(cyc2ns, cpu)) >> CYC2NS_SCALE_FACTOR); | ||
54 | + ns += mult_frac(cyc, per_cpu(cyc2ns, cpu), | ||
55 | + (1UL << CYC2NS_SCALE_FACTOR)); | ||
56 | return ns; | ||
57 | } | ||
58 | |||
59 | diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c | ||
60 | index 3fe298a..1ec515b 100644 | ||
61 | --- a/arch/x86/kernel/tsc.c | ||
62 | +++ b/arch/x86/kernel/tsc.c | ||
63 | @@ -622,7 +622,8 @@ static void set_cyc2ns_scale(unsigned long cpu_khz, int cpu) | ||
64 | |||
65 | if (cpu_khz) { | ||
66 | *scale = (NSEC_PER_MSEC << CYC2NS_SCALE_FACTOR)/cpu_khz; | ||
67 | - *offset = ns_now - (tsc_now * *scale >> CYC2NS_SCALE_FACTOR); | ||
68 | + *offset = ns_now - mult_frac(tsc_now, *scale, | ||
69 | + (1UL << CYC2NS_SCALE_FACTOR)); | ||
70 | } | ||
71 | |||
72 | sched_clock_idle_wakeup_event(0); | ||
73 | diff --git a/include/linux/kernel.h b/include/linux/kernel.h | ||
74 | index e8b1597..a70783d 100644 | ||
75 | --- a/include/linux/kernel.h | ||
76 | +++ b/include/linux/kernel.h | ||
77 | @@ -85,6 +85,19 @@ | ||
78 | } \ | ||
79 | ) | ||
80 | |||
81 | +/* | ||
82 | + * Multiplies an integer by a fraction, while avoiding unnecessary | ||
83 | + * overflow or loss of precision. | ||
84 | + */ | ||
85 | +#define mult_frac(x, numer, denom)( \ | ||
86 | +{ \ | ||
87 | + typeof(x) quot = (x) / (denom); \ | ||
88 | + typeof(x) rem = (x) % (denom); \ | ||
89 | + (quot * (numer)) + ((rem * (numer)) / (denom)); \ | ||
90 | +} \ | ||
91 | +) | ||
92 | + | ||
93 | + | ||
94 | #define _RET_IP_ (unsigned long)__builtin_return_address(0) | ||
95 | #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) | ||
96 | |||
97 | -- | ||
98 | 1.7.9.5 | ||
99 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0053-mfd-Clear-twl6030-IRQ-status-register-only-once.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0053-mfd-Clear-twl6030-IRQ-status-register-only-once.patch new file mode 100644 index 00000000..02d849ac --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0053-mfd-Clear-twl6030-IRQ-status-register-only-once.patch | |||
@@ -0,0 +1,58 @@ | |||
1 | From 84eaf07729408e49027beda2fb0861aad6f96bce Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Wed, 22 Feb 2012 20:03:45 -0600 | ||
4 | Subject: [PATCH 53/60] mfd: Clear twl6030 IRQ status register only once | ||
5 | |||
6 | commit 3f8349e6e98ba0455437724589072523865eae5e upstream. | ||
7 | |||
8 | TWL6030 family of PMIC use a shadow interrupt status register | ||
9 | while kernel processes the current interrupt event. | ||
10 | However, any write(0 or 1) to register INT_STS_A, INT_STS_B or | ||
11 | INT_STS_C clears all 3 interrupt status registers. | ||
12 | |||
13 | Since clear of the interrupt is done on 32k clk, depending on I2C | ||
14 | bus speed, we could in-adverently clear the status of a interrupt | ||
15 | status pending on shadow register in the current implementation. | ||
16 | This is due to the fact that multi-byte i2c write operation into | ||
17 | three seperate status register could result in multiple load | ||
18 | and clear of status and result in lost interrupts. | ||
19 | |||
20 | Instead, doing a single byte write to INT_STS_A register with 0x0 | ||
21 | will clear all three interrupt status registers without the related | ||
22 | risk. | ||
23 | |||
24 | Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
25 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
26 | Signed-off-by: Samuel Ortiz <sameo@linux.intel.com> | ||
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
28 | --- | ||
29 | drivers/mfd/twl6030-irq.c | 13 +++++++++++-- | ||
30 | 1 file changed, 11 insertions(+), 2 deletions(-) | ||
31 | |||
32 | diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c | ||
33 | index 3eee45f..83f4988 100644 | ||
34 | --- a/drivers/mfd/twl6030-irq.c | ||
35 | +++ b/drivers/mfd/twl6030-irq.c | ||
36 | @@ -187,8 +187,17 @@ static int twl6030_irq_thread(void *data) | ||
37 | } | ||
38 | local_irq_enable(); | ||
39 | } | ||
40 | - ret = twl_i2c_write(TWL_MODULE_PIH, sts.bytes, | ||
41 | - REG_INT_STS_A, 3); /* clear INT_STS_A */ | ||
42 | + | ||
43 | + /* | ||
44 | + * NOTE: | ||
45 | + * Simulation confirms that documentation is wrong w.r.t the | ||
46 | + * interrupt status clear operation. A single *byte* write to | ||
47 | + * any one of STS_A to STS_C register results in all three | ||
48 | + * STS registers being reset. Since it does not matter which | ||
49 | + * value is written, all three registers are cleared on a | ||
50 | + * single byte write, so we just use 0x0 to clear. | ||
51 | + */ | ||
52 | + ret = twl_i2c_write_u8(TWL_MODULE_PIH, 0x00, REG_INT_STS_A); | ||
53 | if (ret) | ||
54 | pr_warning("twl6030: I2C error in clearing PIH ISR\n"); | ||
55 | |||
56 | -- | ||
57 | 1.7.9.5 | ||
58 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0054-USB-Add-Motorola-Rokr-E6-Id-to-the-USBNet-driver-zau.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0054-USB-Add-Motorola-Rokr-E6-Id-to-the-USBNet-driver-zau.patch new file mode 100644 index 00000000..5a194e96 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0054-USB-Add-Motorola-Rokr-E6-Id-to-the-USBNet-driver-zau.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From d784d12ff4ada66b51ad2f394ab6cd391859897c Mon Sep 17 00:00:00 2001 | ||
2 | From: Guan Xin <guanx.bac@gmail.com> | ||
3 | Date: Mon, 26 Mar 2012 04:11:46 +0000 | ||
4 | Subject: [PATCH 54/60] USB: Add Motorola Rokr E6 Id to the USBNet driver | ||
5 | "zaurus" | ||
6 | |||
7 | commit a2daf263107ba3eb6db33931881731fa51c95045 upstream. | ||
8 | |||
9 | Added Vendor/Device Id of Motorola Rokr E6 (22b8:6027) so it can be | ||
10 | recognized by the "zaurus" USBNet driver. | ||
11 | Applies to Linux 3.2.13 and 2.6.39.4. | ||
12 | Signed-off-by: Guan Xin <guanx.bac@gmail.com> | ||
13 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/net/usb/zaurus.c | 5 +++++ | ||
17 | 1 file changed, 5 insertions(+) | ||
18 | |||
19 | diff --git a/drivers/net/usb/zaurus.c b/drivers/net/usb/zaurus.c | ||
20 | index 246b3bb..c1e6a44 100644 | ||
21 | --- a/drivers/net/usb/zaurus.c | ||
22 | +++ b/drivers/net/usb/zaurus.c | ||
23 | @@ -332,6 +332,11 @@ static const struct usb_device_id products [] = { | ||
24 | .driver_info = ZAURUS_PXA_INFO, | ||
25 | }, | ||
26 | { | ||
27 | + /* Motorola Rokr E6 */ | ||
28 | + USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6027, USB_CLASS_COMM, | ||
29 | + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), | ||
30 | + .driver_info = (unsigned long) &bogus_mdlm_info, | ||
31 | +}, { | ||
32 | /* Motorola MOTOMAGX phones */ | ||
33 | USB_DEVICE_AND_INTERFACE_INFO(0x22b8, 0x6425, USB_CLASS_COMM, | ||
34 | USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0055-ioat-fix-size-of-completion-for-Xen.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0055-ioat-fix-size-of-completion-for-Xen.patch new file mode 100644 index 00000000..8dc9becd --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0055-ioat-fix-size-of-completion-for-Xen.patch | |||
@@ -0,0 +1,209 @@ | |||
1 | From 5c626e88cf0666b3663b56cdd9c43daff62153cd Mon Sep 17 00:00:00 2001 | ||
2 | From: Dan Williams <dan.j.williams@intel.com> | ||
3 | Date: Fri, 23 Mar 2012 13:36:42 -0700 | ||
4 | Subject: [PATCH 55/60] ioat: fix size of 'completion' for Xen | ||
5 | |||
6 | commit 275029353953c2117941ade84f02a2303912fad1 upstream. | ||
7 | |||
8 | Starting with v3.2 Jonathan reports that Xen crashes loading the ioatdma | ||
9 | driver. A debug run shows: | ||
10 | |||
11 | ioatdma 0000:00:16.4: desc[0]: (0x300cc7000->0x300cc7040) cookie: 0 flags: 0x2 ctl: 0x29 (op: 0 int_en: 1 compl: 1) | ||
12 | ... | ||
13 | ioatdma 0000:00:16.4: ioat_get_current_completion: phys_complete: 0xcc7000 | ||
14 | |||
15 | ...which shows that in this environment GFP_KERNEL memory may be backed | ||
16 | by a 64-bit dma address. This breaks the driver's assumption that an | ||
17 | unsigned long should be able to contain the physical address for | ||
18 | descriptor memory. Switch to dma_addr_t which beyond being the right | ||
19 | size, is the true type for the data i.e. an io-virtual address | ||
20 | inidicating the engine's last processed descriptor. | ||
21 | |||
22 | Reported-by: Jonathan Nieder <jrnieder@gmail.com> | ||
23 | Reported-by: William Dauchy <wdauchy@gmail.com> | ||
24 | Tested-by: William Dauchy <wdauchy@gmail.com> | ||
25 | Tested-by: Dave Jiang <dave.jiang@intel.com> | ||
26 | Signed-off-by: Dan Williams <dan.j.williams@intel.com> | ||
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
28 | --- | ||
29 | drivers/dma/ioat/dma.c | 16 ++++++++-------- | ||
30 | drivers/dma/ioat/dma.h | 6 +++--- | ||
31 | drivers/dma/ioat/dma_v2.c | 8 ++++---- | ||
32 | drivers/dma/ioat/dma_v3.c | 8 ++++---- | ||
33 | 4 files changed, 19 insertions(+), 19 deletions(-) | ||
34 | |||
35 | diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c | ||
36 | index a4d6cb0..6595180 100644 | ||
37 | --- a/drivers/dma/ioat/dma.c | ||
38 | +++ b/drivers/dma/ioat/dma.c | ||
39 | @@ -548,9 +548,9 @@ void ioat_dma_unmap(struct ioat_chan_common *chan, enum dma_ctrl_flags flags, | ||
40 | PCI_DMA_TODEVICE, flags, 0); | ||
41 | } | ||
42 | |||
43 | -unsigned long ioat_get_current_completion(struct ioat_chan_common *chan) | ||
44 | +dma_addr_t ioat_get_current_completion(struct ioat_chan_common *chan) | ||
45 | { | ||
46 | - unsigned long phys_complete; | ||
47 | + dma_addr_t phys_complete; | ||
48 | u64 completion; | ||
49 | |||
50 | completion = *chan->completion; | ||
51 | @@ -571,7 +571,7 @@ unsigned long ioat_get_current_completion(struct ioat_chan_common *chan) | ||
52 | } | ||
53 | |||
54 | bool ioat_cleanup_preamble(struct ioat_chan_common *chan, | ||
55 | - unsigned long *phys_complete) | ||
56 | + dma_addr_t *phys_complete) | ||
57 | { | ||
58 | *phys_complete = ioat_get_current_completion(chan); | ||
59 | if (*phys_complete == chan->last_completion) | ||
60 | @@ -582,14 +582,14 @@ bool ioat_cleanup_preamble(struct ioat_chan_common *chan, | ||
61 | return true; | ||
62 | } | ||
63 | |||
64 | -static void __cleanup(struct ioat_dma_chan *ioat, unsigned long phys_complete) | ||
65 | +static void __cleanup(struct ioat_dma_chan *ioat, dma_addr_t phys_complete) | ||
66 | { | ||
67 | struct ioat_chan_common *chan = &ioat->base; | ||
68 | struct list_head *_desc, *n; | ||
69 | struct dma_async_tx_descriptor *tx; | ||
70 | |||
71 | - dev_dbg(to_dev(chan), "%s: phys_complete: %lx\n", | ||
72 | - __func__, phys_complete); | ||
73 | + dev_dbg(to_dev(chan), "%s: phys_complete: %llx\n", | ||
74 | + __func__, (unsigned long long) phys_complete); | ||
75 | list_for_each_safe(_desc, n, &ioat->used_desc) { | ||
76 | struct ioat_desc_sw *desc; | ||
77 | |||
78 | @@ -655,7 +655,7 @@ static void __cleanup(struct ioat_dma_chan *ioat, unsigned long phys_complete) | ||
79 | static void ioat1_cleanup(struct ioat_dma_chan *ioat) | ||
80 | { | ||
81 | struct ioat_chan_common *chan = &ioat->base; | ||
82 | - unsigned long phys_complete; | ||
83 | + dma_addr_t phys_complete; | ||
84 | |||
85 | prefetch(chan->completion); | ||
86 | |||
87 | @@ -701,7 +701,7 @@ static void ioat1_timer_event(unsigned long data) | ||
88 | mod_timer(&chan->timer, jiffies + COMPLETION_TIMEOUT); | ||
89 | spin_unlock_bh(&ioat->desc_lock); | ||
90 | } else if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) { | ||
91 | - unsigned long phys_complete; | ||
92 | + dma_addr_t phys_complete; | ||
93 | |||
94 | spin_lock_bh(&ioat->desc_lock); | ||
95 | /* if we haven't made progress and we have already | ||
96 | diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h | ||
97 | index 5216c8a..8bebddd 100644 | ||
98 | --- a/drivers/dma/ioat/dma.h | ||
99 | +++ b/drivers/dma/ioat/dma.h | ||
100 | @@ -88,7 +88,7 @@ struct ioatdma_device { | ||
101 | struct ioat_chan_common { | ||
102 | struct dma_chan common; | ||
103 | void __iomem *reg_base; | ||
104 | - unsigned long last_completion; | ||
105 | + dma_addr_t last_completion; | ||
106 | spinlock_t cleanup_lock; | ||
107 | dma_cookie_t completed_cookie; | ||
108 | unsigned long state; | ||
109 | @@ -333,7 +333,7 @@ int __devinit ioat_dma_self_test(struct ioatdma_device *device); | ||
110 | void __devexit ioat_dma_remove(struct ioatdma_device *device); | ||
111 | struct dca_provider * __devinit ioat_dca_init(struct pci_dev *pdev, | ||
112 | void __iomem *iobase); | ||
113 | -unsigned long ioat_get_current_completion(struct ioat_chan_common *chan); | ||
114 | +dma_addr_t ioat_get_current_completion(struct ioat_chan_common *chan); | ||
115 | void ioat_init_channel(struct ioatdma_device *device, | ||
116 | struct ioat_chan_common *chan, int idx); | ||
117 | enum dma_status ioat_dma_tx_status(struct dma_chan *c, dma_cookie_t cookie, | ||
118 | @@ -341,7 +341,7 @@ enum dma_status ioat_dma_tx_status(struct dma_chan *c, dma_cookie_t cookie, | ||
119 | void ioat_dma_unmap(struct ioat_chan_common *chan, enum dma_ctrl_flags flags, | ||
120 | size_t len, struct ioat_dma_descriptor *hw); | ||
121 | bool ioat_cleanup_preamble(struct ioat_chan_common *chan, | ||
122 | - unsigned long *phys_complete); | ||
123 | + dma_addr_t *phys_complete); | ||
124 | void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type); | ||
125 | void ioat_kobject_del(struct ioatdma_device *device); | ||
126 | extern const struct sysfs_ops ioat_sysfs_ops; | ||
127 | diff --git a/drivers/dma/ioat/dma_v2.c b/drivers/dma/ioat/dma_v2.c | ||
128 | index 5d65f83..cb8864d 100644 | ||
129 | --- a/drivers/dma/ioat/dma_v2.c | ||
130 | +++ b/drivers/dma/ioat/dma_v2.c | ||
131 | @@ -126,7 +126,7 @@ static void ioat2_start_null_desc(struct ioat2_dma_chan *ioat) | ||
132 | spin_unlock_bh(&ioat->prep_lock); | ||
133 | } | ||
134 | |||
135 | -static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete) | ||
136 | +static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete) | ||
137 | { | ||
138 | struct ioat_chan_common *chan = &ioat->base; | ||
139 | struct dma_async_tx_descriptor *tx; | ||
140 | @@ -178,7 +178,7 @@ static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete) | ||
141 | static void ioat2_cleanup(struct ioat2_dma_chan *ioat) | ||
142 | { | ||
143 | struct ioat_chan_common *chan = &ioat->base; | ||
144 | - unsigned long phys_complete; | ||
145 | + dma_addr_t phys_complete; | ||
146 | |||
147 | spin_lock_bh(&chan->cleanup_lock); | ||
148 | if (ioat_cleanup_preamble(chan, &phys_complete)) | ||
149 | @@ -259,7 +259,7 @@ int ioat2_reset_sync(struct ioat_chan_common *chan, unsigned long tmo) | ||
150 | static void ioat2_restart_channel(struct ioat2_dma_chan *ioat) | ||
151 | { | ||
152 | struct ioat_chan_common *chan = &ioat->base; | ||
153 | - unsigned long phys_complete; | ||
154 | + dma_addr_t phys_complete; | ||
155 | |||
156 | ioat2_quiesce(chan, 0); | ||
157 | if (ioat_cleanup_preamble(chan, &phys_complete)) | ||
158 | @@ -274,7 +274,7 @@ void ioat2_timer_event(unsigned long data) | ||
159 | struct ioat_chan_common *chan = &ioat->base; | ||
160 | |||
161 | if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) { | ||
162 | - unsigned long phys_complete; | ||
163 | + dma_addr_t phys_complete; | ||
164 | u64 status; | ||
165 | |||
166 | status = ioat_chansts(chan); | ||
167 | diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c | ||
168 | index f519c93..2dbf32b 100644 | ||
169 | --- a/drivers/dma/ioat/dma_v3.c | ||
170 | +++ b/drivers/dma/ioat/dma_v3.c | ||
171 | @@ -256,7 +256,7 @@ static bool desc_has_ext(struct ioat_ring_ent *desc) | ||
172 | * The difference from the dma_v2.c __cleanup() is that this routine | ||
173 | * handles extended descriptors and dma-unmapping raid operations. | ||
174 | */ | ||
175 | -static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete) | ||
176 | +static void __cleanup(struct ioat2_dma_chan *ioat, dma_addr_t phys_complete) | ||
177 | { | ||
178 | struct ioat_chan_common *chan = &ioat->base; | ||
179 | struct ioat_ring_ent *desc; | ||
180 | @@ -314,7 +314,7 @@ static void __cleanup(struct ioat2_dma_chan *ioat, unsigned long phys_complete) | ||
181 | static void ioat3_cleanup(struct ioat2_dma_chan *ioat) | ||
182 | { | ||
183 | struct ioat_chan_common *chan = &ioat->base; | ||
184 | - unsigned long phys_complete; | ||
185 | + dma_addr_t phys_complete; | ||
186 | |||
187 | spin_lock_bh(&chan->cleanup_lock); | ||
188 | if (ioat_cleanup_preamble(chan, &phys_complete)) | ||
189 | @@ -333,7 +333,7 @@ static void ioat3_cleanup_event(unsigned long data) | ||
190 | static void ioat3_restart_channel(struct ioat2_dma_chan *ioat) | ||
191 | { | ||
192 | struct ioat_chan_common *chan = &ioat->base; | ||
193 | - unsigned long phys_complete; | ||
194 | + dma_addr_t phys_complete; | ||
195 | |||
196 | ioat2_quiesce(chan, 0); | ||
197 | if (ioat_cleanup_preamble(chan, &phys_complete)) | ||
198 | @@ -348,7 +348,7 @@ static void ioat3_timer_event(unsigned long data) | ||
199 | struct ioat_chan_common *chan = &ioat->base; | ||
200 | |||
201 | if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) { | ||
202 | - unsigned long phys_complete; | ||
203 | + dma_addr_t phys_complete; | ||
204 | u64 status; | ||
205 | |||
206 | status = ioat_chansts(chan); | ||
207 | -- | ||
208 | 1.7.9.5 | ||
209 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0056-ASoC-ak4642-fixup-mute-needs-1-step.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0056-ASoC-ak4642-fixup-mute-needs-1-step.patch new file mode 100644 index 00000000..c534626c --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0056-ASoC-ak4642-fixup-mute-needs-1-step.patch | |||
@@ -0,0 +1,34 @@ | |||
1 | From ef89a7b5f82deaac432a4a797155b199d7d39c67 Mon Sep 17 00:00:00 2001 | ||
2 | From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
3 | Date: Wed, 4 Apr 2012 23:28:01 -0700 | ||
4 | Subject: [PATCH 56/60] ASoC: ak4642: fixup: mute needs +1 step | ||
5 | |||
6 | commit 1f99e44cf059d2ed43c5a0724fa738b83800f725 upstream. | ||
7 | |||
8 | ak4642 out_tlv is +12.0dB to -115.0 dB, and it supports mute. | ||
9 | But current settings didn't care +1 step for mute. | ||
10 | This patch adds it | ||
11 | |||
12 | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
13 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | sound/soc/codecs/ak4642.c | 2 +- | ||
17 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
18 | |||
19 | diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c | ||
20 | index 12c1bde..1c4999d 100644 | ||
21 | --- a/sound/soc/codecs/ak4642.c | ||
22 | +++ b/sound/soc/codecs/ak4642.c | ||
23 | @@ -144,7 +144,7 @@ | ||
24 | * min : 0xFE : -115.0 dB | ||
25 | * mute: 0xFF | ||
26 | */ | ||
27 | -static const DECLARE_TLV_DB_SCALE(out_tlv, -11500, 50, 1); | ||
28 | +static const DECLARE_TLV_DB_SCALE(out_tlv, -11550, 50, 1); | ||
29 | |||
30 | static const struct snd_kcontrol_new ak4642_snd_controls[] = { | ||
31 | |||
32 | -- | ||
33 | 1.7.9.5 | ||
34 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0057-cred-copy_process-should-clear-child-replacement_ses.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0057-cred-copy_process-should-clear-child-replacement_ses.patch new file mode 100644 index 00000000..df101f89 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0057-cred-copy_process-should-clear-child-replacement_ses.patch | |||
@@ -0,0 +1,44 @@ | |||
1 | From 58063126ba5d427e0dae0e9319f5dabb5aeee22f Mon Sep 17 00:00:00 2001 | ||
2 | From: Oleg Nesterov <oleg@redhat.com> | ||
3 | Date: Mon, 9 Apr 2012 21:03:50 +0200 | ||
4 | Subject: [PATCH 57/60] cred: copy_process() should clear | ||
5 | child->replacement_session_keyring | ||
6 | |||
7 | commit 79549c6dfda0603dba9a70a53467ce62d9335c33 upstream. | ||
8 | |||
9 | keyctl_session_to_parent(task) sets ->replacement_session_keyring, | ||
10 | it should be processed and cleared by key_replace_session_keyring(). | ||
11 | |||
12 | However, this task can fork before it notices TIF_NOTIFY_RESUME and | ||
13 | the new child gets the bogus ->replacement_session_keyring copied by | ||
14 | dup_task_struct(). This is obviously wrong and, if nothing else, this | ||
15 | leads to put_cred(already_freed_cred). | ||
16 | |||
17 | change copy_creds() to clear this member. If copy_process() fails | ||
18 | before this point the wrong ->replacement_session_keyring doesn't | ||
19 | matter, exit_creds() won't be called. | ||
20 | |||
21 | Signed-off-by: Oleg Nesterov <oleg@redhat.com> | ||
22 | Acked-by: David Howells <dhowells@redhat.com> | ||
23 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | kernel/cred.c | 2 ++ | ||
27 | 1 file changed, 2 insertions(+) | ||
28 | |||
29 | diff --git a/kernel/cred.c b/kernel/cred.c | ||
30 | index 5791612..48c6fd3 100644 | ||
31 | --- a/kernel/cred.c | ||
32 | +++ b/kernel/cred.c | ||
33 | @@ -385,6 +385,8 @@ int copy_creds(struct task_struct *p, unsigned long clone_flags) | ||
34 | struct cred *new; | ||
35 | int ret; | ||
36 | |||
37 | + p->replacement_session_keyring = NULL; | ||
38 | + | ||
39 | if ( | ||
40 | #ifdef CONFIG_KEYS | ||
41 | !p->cred->thread_keyring && | ||
42 | -- | ||
43 | 1.7.9.5 | ||
44 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0058-iommu-amd-Make-sure-IOMMU-interrupts-are-re-enabled-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0058-iommu-amd-Make-sure-IOMMU-interrupts-are-re-enabled-.patch new file mode 100644 index 00000000..9b5e63a7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0058-iommu-amd-Make-sure-IOMMU-interrupts-are-re-enabled-.patch | |||
@@ -0,0 +1,76 @@ | |||
1 | From 94a56d3bf83bb9f3876415b7e6eea80877e10c16 Mon Sep 17 00:00:00 2001 | ||
2 | From: Joerg Roedel <joerg.roedel@amd.com> | ||
3 | Date: Wed, 11 Apr 2012 18:40:38 +0200 | ||
4 | Subject: [PATCH 58/60] iommu/amd: Make sure IOMMU interrupts are re-enabled | ||
5 | on resume | ||
6 | |||
7 | commit 9ddd592a191b32f2ee6c4b6ed2bd52665c3a49f5 upstream | ||
8 | |||
9 | Unfortunatly the interrupts for the event log and the | ||
10 | peripheral page-faults are only enabled at boot but not | ||
11 | re-enabled at resume. Fix that for 3.2. | ||
12 | |||
13 | Cc: stable@vger.kernel.org | ||
14 | Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> | ||
15 | --- | ||
16 | drivers/iommu/amd_iommu_init.c | 24 +++++++++++++++++------- | ||
17 | 1 file changed, 17 insertions(+), 7 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c | ||
20 | index 5c74179..20d5852 100644 | ||
21 | --- a/drivers/iommu/amd_iommu_init.c | ||
22 | +++ b/drivers/iommu/amd_iommu_init.c | ||
23 | @@ -1033,8 +1033,9 @@ static int iommu_setup_msi(struct amd_iommu *iommu) | ||
24 | { | ||
25 | int r; | ||
26 | |||
27 | - if (pci_enable_msi(iommu->dev)) | ||
28 | - return 1; | ||
29 | + r = pci_enable_msi(iommu->dev); | ||
30 | + if (r) | ||
31 | + return r; | ||
32 | |||
33 | r = request_threaded_irq(iommu->dev->irq, | ||
34 | amd_iommu_int_handler, | ||
35 | @@ -1044,24 +1045,33 @@ static int iommu_setup_msi(struct amd_iommu *iommu) | ||
36 | |||
37 | if (r) { | ||
38 | pci_disable_msi(iommu->dev); | ||
39 | - return 1; | ||
40 | + return r; | ||
41 | } | ||
42 | |||
43 | iommu->int_enabled = true; | ||
44 | - iommu_feature_enable(iommu, CONTROL_EVT_INT_EN); | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static int iommu_init_msi(struct amd_iommu *iommu) | ||
50 | { | ||
51 | + int ret; | ||
52 | + | ||
53 | if (iommu->int_enabled) | ||
54 | - return 0; | ||
55 | + goto enable_faults; | ||
56 | |||
57 | if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI)) | ||
58 | - return iommu_setup_msi(iommu); | ||
59 | + ret = iommu_setup_msi(iommu); | ||
60 | + else | ||
61 | + ret = -ENODEV; | ||
62 | |||
63 | - return 1; | ||
64 | + if (ret) | ||
65 | + return ret; | ||
66 | + | ||
67 | +enable_faults: | ||
68 | + iommu_feature_enable(iommu, CONTROL_EVT_INT_EN); | ||
69 | + | ||
70 | + return 0; | ||
71 | } | ||
72 | |||
73 | /**************************************************************************** | ||
74 | -- | ||
75 | 1.7.9.5 | ||
76 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0059-Bluetooth-Fix-l2cap-conn-failures-for-ssp-devices.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0059-Bluetooth-Fix-l2cap-conn-failures-for-ssp-devices.patch new file mode 100644 index 00000000..673bcc93 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0059-Bluetooth-Fix-l2cap-conn-failures-for-ssp-devices.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From 263961fa56c27b335c9598d7204e004893480253 Mon Sep 17 00:00:00 2001 | ||
2 | From: Peter Hurley <peter@hurleysoftware.com> | ||
3 | Date: Mon, 2 Apr 2012 13:44:56 +0200 | ||
4 | Subject: [PATCH 59/60] Bluetooth: Fix l2cap conn failures for ssp devices | ||
5 | |||
6 | commit 18daf1644e634bae951a6e3d4d19d89170209762 upstream | ||
7 | |||
8 | Commit 330605423c fixed l2cap conn establishment for non-ssp remote | ||
9 | devices by not setting HCI_CONN_ENCRYPT_PEND every time conn security | ||
10 | is tested (which was always returning failure on any subsequent | ||
11 | security checks). | ||
12 | |||
13 | However, this broke l2cap conn establishment for ssp remote devices | ||
14 | when an ACL link was already established at SDP-level security. This | ||
15 | fix ensures that encryption must be pending whenever authentication | ||
16 | is also pending. | ||
17 | |||
18 | Signed-off-by: Peter Hurley <peter@hurleysoftware.com> | ||
19 | Tested-by: Daniel Wagner <daniel.wagner@bmw-carit.de> | ||
20 | Acked-by: Marcel Holtmann <marcel@holtmann.org> | ||
21 | Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> | ||
22 | --- | ||
23 | net/bluetooth/hci_conn.c | 4 ++++ | ||
24 | 1 file changed, 4 insertions(+) | ||
25 | |||
26 | diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c | ||
27 | index c1c597e..98bfbd5 100644 | ||
28 | --- a/net/bluetooth/hci_conn.c | ||
29 | +++ b/net/bluetooth/hci_conn.c | ||
30 | @@ -608,6 +608,10 @@ static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type) | ||
31 | |||
32 | if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) { | ||
33 | struct hci_cp_auth_requested cp; | ||
34 | + | ||
35 | + /* encrypt must be pending if auth is also pending */ | ||
36 | + set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend); | ||
37 | + | ||
38 | cp.handle = cpu_to_le16(conn->handle); | ||
39 | hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED, | ||
40 | sizeof(cp), &cp); | ||
41 | -- | ||
42 | 1.7.9.5 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0060-Linux-3.2.15.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0060-Linux-3.2.15.patch new file mode 100644 index 00000000..2127a27a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.15/0060-Linux-3.2.15.patch | |||
@@ -0,0 +1,24 @@ | |||
1 | From f7e832912de7d193a1185b9f1440111cbd1dbc46 Mon Sep 17 00:00:00 2001 | ||
2 | From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
3 | Date: Fri, 13 Apr 2012 09:11:03 -0700 | ||
4 | Subject: [PATCH 60/60] Linux 3.2.15 | ||
5 | |||
6 | --- | ||
7 | Makefile | 2 +- | ||
8 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
9 | |||
10 | diff --git a/Makefile b/Makefile | ||
11 | index afe4c7d..6195122 100644 | ||
12 | --- a/Makefile | ||
13 | +++ b/Makefile | ||
14 | @@ -1,6 +1,6 @@ | ||
15 | VERSION = 3 | ||
16 | PATCHLEVEL = 2 | ||
17 | -SUBLEVEL = 14 | ||
18 | +SUBLEVEL = 15 | ||
19 | EXTRAVERSION = | ||
20 | NAME = Saber-toothed Squirrel | ||
21 | |||
22 | -- | ||
23 | 1.7.9.5 | ||
24 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0001-drm-i915-mask-transcoder-select-bits-before-setting-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0001-drm-i915-mask-transcoder-select-bits-before-setting-.patch new file mode 100644 index 00000000..4dcea848 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0001-drm-i915-mask-transcoder-select-bits-before-setting-.patch | |||
@@ -0,0 +1,50 @@ | |||
1 | From 0e9a6694305d6e8a9afd0e0f67e9fa430f4a913d Mon Sep 17 00:00:00 2001 | ||
2 | From: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
3 | Date: Thu, 12 Jan 2012 14:51:17 -0800 | ||
4 | Subject: [PATCH 01/69] drm/i915: mask transcoder select bits before setting | ||
5 | them on LVDS | ||
6 | |||
7 | commit 7885d2052bd94395e337709cfba093a41f273ff1 upstream. | ||
8 | |||
9 | The transcoder port may changed from mode set to mode set, so make sure | ||
10 | to mask out the selection bits before setting the right ones or we'll | ||
11 | get black screens when going from transcoder B to A. | ||
12 | |||
13 | Tested-by: Vincent Vanackere <vincent.vanackere@gmail.com> | ||
14 | Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
15 | Reviewed-by: Keith Packard <keithp@keithp.com> | ||
16 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
17 | Cc: Jonathan Nieder <jrnieder@gmail.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/gpu/drm/i915/intel_display.c | 13 ++++++++----- | ||
21 | 1 file changed, 8 insertions(+), 5 deletions(-) | ||
22 | |||
23 | diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c | ||
24 | index 9011f48..390768f 100644 | ||
25 | --- a/drivers/gpu/drm/i915/intel_display.c | ||
26 | +++ b/drivers/gpu/drm/i915/intel_display.c | ||
27 | @@ -5646,12 +5646,15 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc, | ||
28 | if (is_lvds) { | ||
29 | temp = I915_READ(PCH_LVDS); | ||
30 | temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP; | ||
31 | - if (HAS_PCH_CPT(dev)) | ||
32 | + if (HAS_PCH_CPT(dev)) { | ||
33 | + temp &= ~PORT_TRANS_SEL_MASK; | ||
34 | temp |= PORT_TRANS_SEL_CPT(pipe); | ||
35 | - else if (pipe == 1) | ||
36 | - temp |= LVDS_PIPEB_SELECT; | ||
37 | - else | ||
38 | - temp &= ~LVDS_PIPEB_SELECT; | ||
39 | + } else { | ||
40 | + if (pipe == 1) | ||
41 | + temp |= LVDS_PIPEB_SELECT; | ||
42 | + else | ||
43 | + temp &= ~LVDS_PIPEB_SELECT; | ||
44 | + } | ||
45 | |||
46 | /* set the corresponsding LVDS_BORDER bit */ | ||
47 | temp |= dev_priv->lvds_border_bits; | ||
48 | -- | ||
49 | 1.7.9.5 | ||
50 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0002-drm-radeon-kms-fix-DVO-setup-on-some-r4xx-chips.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0002-drm-radeon-kms-fix-DVO-setup-on-some-r4xx-chips.patch new file mode 100644 index 00000000..7ac071f7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0002-drm-radeon-kms-fix-DVO-setup-on-some-r4xx-chips.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From 039999fecc9cd2243a2322a5b2ba153f6bfe6703 Mon Sep 17 00:00:00 2001 | ||
2 | From: Alex Deucher <alexander.deucher@amd.com> | ||
3 | Date: Tue, 3 Apr 2012 17:05:41 -0400 | ||
4 | Subject: [PATCH 02/69] drm/radeon/kms: fix DVO setup on some r4xx chips | ||
5 | |||
6 | commit afceb9319f21b18ee3bc15ee9a5f92e18ef8a8c9 upstream. | ||
7 | |||
8 | Some r4xx chips have the wrong frev in the | ||
9 | DVOEncoderControl table. It should always be 1 | ||
10 | on r4xx. Fixes modesetting on DVO on r4xx chips | ||
11 | with the bad frev. | ||
12 | |||
13 | Reported by twied on #radeon. | ||
14 | |||
15 | Signed-off-by: Alex Deucher <alexander.deucher@amd.com> | ||
16 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/gpu/drm/radeon/atombios_encoders.c | 4 ++++ | ||
20 | 1 file changed, 4 insertions(+) | ||
21 | |||
22 | diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c | ||
23 | index 0f8eb48..5351ee1 100644 | ||
24 | --- a/drivers/gpu/drm/radeon/atombios_encoders.c | ||
25 | +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | ||
26 | @@ -246,6 +246,10 @@ atombios_dvo_setup(struct drm_encoder *encoder, int action) | ||
27 | if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) | ||
28 | return; | ||
29 | |||
30 | + /* some R4xx chips have the wrong frev */ | ||
31 | + if (rdev->family <= CHIP_RV410) | ||
32 | + frev = 1; | ||
33 | + | ||
34 | switch (frev) { | ||
35 | case 1: | ||
36 | switch (crev) { | ||
37 | -- | ||
38 | 1.7.9.5 | ||
39 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0003-drm-i915-ringbuffer-Exclude-last-2-cachlines-of-ring.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0003-drm-i915-ringbuffer-Exclude-last-2-cachlines-of-ring.patch new file mode 100644 index 00000000..db337c42 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0003-drm-i915-ringbuffer-Exclude-last-2-cachlines-of-ring.patch | |||
@@ -0,0 +1,34 @@ | |||
1 | From 6905e24cc8b935ca1db7f0af4ec3fe95ffd30122 Mon Sep 17 00:00:00 2001 | ||
2 | From: Chris Wilson <chris@chris-wilson.co.uk> | ||
3 | Date: Mon, 9 Apr 2012 13:59:46 +0100 | ||
4 | Subject: [PATCH 03/69] drm/i915/ringbuffer: Exclude last 2 cachlines of ring | ||
5 | on 845g | ||
6 | |||
7 | commit 27c1cbd06a7620b354cbb363834f3bb8df4f410d upstream. | ||
8 | |||
9 | The 845g shares the errata with i830 whereby executing a command | ||
10 | within 2 cachelines of the end of the ringbuffer may cause a GPU hang. | ||
11 | |||
12 | Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
13 | Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/gpu/drm/i915/intel_ringbuffer.c | 2 +- | ||
17 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
18 | |||
19 | diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c | ||
20 | index 30a9af9..8673581 100644 | ||
21 | --- a/drivers/gpu/drm/i915/intel_ringbuffer.c | ||
22 | +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | ||
23 | @@ -1052,7 +1052,7 @@ int intel_init_ring_buffer(struct drm_device *dev, | ||
24 | * of the buffer. | ||
25 | */ | ||
26 | ring->effective_size = ring->size; | ||
27 | - if (IS_I830(ring->dev)) | ||
28 | + if (IS_I830(ring->dev) || IS_845G(ring->dev)) | ||
29 | ring->effective_size -= 128; | ||
30 | |||
31 | return 0; | ||
32 | -- | ||
33 | 1.7.9.5 | ||
34 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0004-drm-radeon-only-add-the-mm-i2c-bus-if-the-hw_i2c-mod.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0004-drm-radeon-only-add-the-mm-i2c-bus-if-the-hw_i2c-mod.patch new file mode 100644 index 00000000..323eb1be --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0004-drm-radeon-only-add-the-mm-i2c-bus-if-the-hw_i2c-mod.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | From 3168f6f46758c36d5b33ed5e77329bffed67033f Mon Sep 17 00:00:00 2001 | ||
2 | From: Alex Deucher <alexander.deucher@amd.com> | ||
3 | Date: Tue, 10 Apr 2012 12:14:27 -0400 | ||
4 | Subject: [PATCH 04/69] drm/radeon: only add the mm i2c bus if the hw_i2c | ||
5 | module param is set | ||
6 | |||
7 | commit 46783150a6552f9513f08e62cfcc07125d6e502b upstream. | ||
8 | |||
9 | It seems it can corrupt the monitor EDID in certain cases on certain | ||
10 | boards when running sensors detect. It's rarely used anyway outside | ||
11 | of AIW boards. | ||
12 | |||
13 | http://lists.lm-sensors.org/pipermail/lm-sensors/2012-April/035847.html | ||
14 | http://lists.freedesktop.org/archives/xorg/2011-January/052239.html | ||
15 | |||
16 | Signed-off-by: Alex Deucher <alexander.deucher@amd.com> | ||
17 | Acked-by: Jean Delvare <khali@linux-fr.org> | ||
18 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/gpu/drm/radeon/radeon_i2c.c | 4 ++++ | ||
22 | 1 file changed, 4 insertions(+) | ||
23 | |||
24 | diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c | ||
25 | index 7bb1b07..1441b00 100644 | ||
26 | --- a/drivers/gpu/drm/radeon/radeon_i2c.c | ||
27 | +++ b/drivers/gpu/drm/radeon/radeon_i2c.c | ||
28 | @@ -890,6 +890,10 @@ struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev, | ||
29 | struct radeon_i2c_chan *i2c; | ||
30 | int ret; | ||
31 | |||
32 | + /* don't add the mm_i2c bus unless hw_i2c is enabled */ | ||
33 | + if (rec->mm_i2c && (radeon_hw_i2c == 0)) | ||
34 | + return NULL; | ||
35 | + | ||
36 | i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL); | ||
37 | if (i2c == NULL) | ||
38 | return NULL; | ||
39 | -- | ||
40 | 1.7.9.5 | ||
41 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0005-drm-i915-properly-compute-dp-dithering-for-user-crea.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0005-drm-i915-properly-compute-dp-dithering-for-user-crea.patch new file mode 100644 index 00000000..45e685a4 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0005-drm-i915-properly-compute-dp-dithering-for-user-crea.patch | |||
@@ -0,0 +1,130 @@ | |||
1 | From 95523fb19e6eea48b9c0632b81780268f386b22f Mon Sep 17 00:00:00 2001 | ||
2 | From: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
3 | Date: Tue, 10 Apr 2012 10:42:36 +0200 | ||
4 | Subject: [PATCH 05/69] drm/i915: properly compute dp dithering for | ||
5 | user-created modes | ||
6 | |||
7 | commit c4867936474183332db4c19791a65fdad6474fd5 upstream. | ||
8 | |||
9 | We've only computed whether we need to fall back to 6bpc due to dp | ||
10 | link bandwidth constrains in mode_valid, but not mode_fixup. Under | ||
11 | various circumstances X likes to create new modes which then lack | ||
12 | proper 6bpc flags (if required), resulting in mode_fixup failures and | ||
13 | ultimately black screens. | ||
14 | |||
15 | Chris Wilson pointed out that we still get things wrong for bpp > 24, | ||
16 | but that should be fixed in another patch (and it'll be easier because | ||
17 | this patch consolidates the logic). | ||
18 | |||
19 | The likely culprit for this regression is | ||
20 | |||
21 | commit 3d794f87238f74d80e78a7611c7fbde8a54c85c2 | ||
22 | Author: Keith Packard <keithp@keithp.com> | ||
23 | Date: Wed Jan 25 08:16:25 2012 -0800 | ||
24 | |||
25 | drm/i915: Force explicit bpp selection for intel_dp_link_required | ||
26 | |||
27 | v2: Fix indentation and tune down the too bold claim that this should | ||
28 | fix the world. Both noticed by Chris Wilson. | ||
29 | |||
30 | v3: Try to really git add things. | ||
31 | |||
32 | Reported-and-tested-by: Brice Goglin <Brice.Goglin@ens-lyon.org> | ||
33 | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48170 | ||
34 | Cc: stable@kernel.org | ||
35 | Reviewed-by: Adam Jackson <ajax@redhat.com> | ||
36 | Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
37 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
38 | --- | ||
39 | drivers/gpu/drm/i915/intel_dp.c | 49 ++++++++++++++++++++++++++++----------- | ||
40 | 1 file changed, 35 insertions(+), 14 deletions(-) | ||
41 | |||
42 | diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c | ||
43 | index 94f860c..12eb789 100644 | ||
44 | --- a/drivers/gpu/drm/i915/intel_dp.c | ||
45 | +++ b/drivers/gpu/drm/i915/intel_dp.c | ||
46 | @@ -219,14 +219,38 @@ intel_dp_max_data_rate(int max_link_clock, int max_lanes) | ||
47 | return (max_link_clock * max_lanes * 8) / 10; | ||
48 | } | ||
49 | |||
50 | +static bool | ||
51 | +intel_dp_adjust_dithering(struct intel_dp *intel_dp, | ||
52 | + struct drm_display_mode *mode, | ||
53 | + struct drm_display_mode *adjusted_mode) | ||
54 | +{ | ||
55 | + int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp)); | ||
56 | + int max_lanes = intel_dp_max_lane_count(intel_dp); | ||
57 | + int max_rate, mode_rate; | ||
58 | + | ||
59 | + mode_rate = intel_dp_link_required(mode->clock, 24); | ||
60 | + max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes); | ||
61 | + | ||
62 | + if (mode_rate > max_rate) { | ||
63 | + mode_rate = intel_dp_link_required(mode->clock, 18); | ||
64 | + if (mode_rate > max_rate) | ||
65 | + return false; | ||
66 | + | ||
67 | + if (adjusted_mode) | ||
68 | + adjusted_mode->private_flags | ||
69 | + |= INTEL_MODE_DP_FORCE_6BPC; | ||
70 | + | ||
71 | + return true; | ||
72 | + } | ||
73 | + | ||
74 | + return true; | ||
75 | +} | ||
76 | + | ||
77 | static int | ||
78 | intel_dp_mode_valid(struct drm_connector *connector, | ||
79 | struct drm_display_mode *mode) | ||
80 | { | ||
81 | struct intel_dp *intel_dp = intel_attached_dp(connector); | ||
82 | - int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp)); | ||
83 | - int max_lanes = intel_dp_max_lane_count(intel_dp); | ||
84 | - int max_rate, mode_rate; | ||
85 | |||
86 | if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) { | ||
87 | if (mode->hdisplay > intel_dp->panel_fixed_mode->hdisplay) | ||
88 | @@ -236,16 +260,8 @@ intel_dp_mode_valid(struct drm_connector *connector, | ||
89 | return MODE_PANEL; | ||
90 | } | ||
91 | |||
92 | - mode_rate = intel_dp_link_required(mode->clock, 24); | ||
93 | - max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes); | ||
94 | - | ||
95 | - if (mode_rate > max_rate) { | ||
96 | - mode_rate = intel_dp_link_required(mode->clock, 18); | ||
97 | - if (mode_rate > max_rate) | ||
98 | - return MODE_CLOCK_HIGH; | ||
99 | - else | ||
100 | - mode->private_flags |= INTEL_MODE_DP_FORCE_6BPC; | ||
101 | - } | ||
102 | + if (!intel_dp_adjust_dithering(intel_dp, mode, NULL)) | ||
103 | + return MODE_CLOCK_HIGH; | ||
104 | |||
105 | if (mode->clock < 10000) | ||
106 | return MODE_CLOCK_LOW; | ||
107 | @@ -673,7 +689,7 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, | ||
108 | int lane_count, clock; | ||
109 | int max_lane_count = intel_dp_max_lane_count(intel_dp); | ||
110 | int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0; | ||
111 | - int bpp = mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24; | ||
112 | + int bpp; | ||
113 | static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 }; | ||
114 | |||
115 | if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) { | ||
116 | @@ -687,6 +703,11 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode, | ||
117 | mode->clock = intel_dp->panel_fixed_mode->clock; | ||
118 | } | ||
119 | |||
120 | + if (!intel_dp_adjust_dithering(intel_dp, mode, adjusted_mode)) | ||
121 | + return false; | ||
122 | + | ||
123 | + bpp = adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24; | ||
124 | + | ||
125 | for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) { | ||
126 | for (clock = 0; clock <= max_clock; clock++) { | ||
127 | int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count); | ||
128 | -- | ||
129 | 1.7.9.5 | ||
130 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0006-drm-i915-make-rc6-module-parameter-read-only.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0006-drm-i915-make-rc6-module-parameter-read-only.patch new file mode 100644 index 00000000..79340e1e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0006-drm-i915-make-rc6-module-parameter-read-only.patch | |||
@@ -0,0 +1,32 @@ | |||
1 | From f6810569f5eea5dd63a4be4fdcf052ab08d4f7fa Mon Sep 17 00:00:00 2001 | ||
2 | From: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
3 | Date: Wed, 11 Apr 2012 09:39:02 -0700 | ||
4 | Subject: [PATCH 06/69] drm/i915: make rc6 module parameter read-only | ||
5 | |||
6 | commit f57f9c167af7cb3fd315e6a8ebe194a8aea0832a upstream. | ||
7 | |||
8 | People have been getting confused and thinking this is a runtime control. | ||
9 | |||
10 | Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
11 | Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
12 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
13 | --- | ||
14 | drivers/gpu/drm/i915/i915_drv.c | 2 +- | ||
15 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
16 | |||
17 | diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c | ||
18 | index e52b705..d0f8830 100644 | ||
19 | --- a/drivers/gpu/drm/i915/i915_drv.c | ||
20 | +++ b/drivers/gpu/drm/i915/i915_drv.c | ||
21 | @@ -64,7 +64,7 @@ MODULE_PARM_DESC(semaphores, | ||
22 | "Use semaphores for inter-ring sync (default: -1 (use per-chip defaults))"); | ||
23 | |||
24 | int i915_enable_rc6 __read_mostly = -1; | ||
25 | -module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0600); | ||
26 | +module_param_named(i915_enable_rc6, i915_enable_rc6, int, 0400); | ||
27 | MODULE_PARM_DESC(i915_enable_rc6, | ||
28 | "Enable power-saving render C-state 6 (default: -1 (use per-chip default)"); | ||
29 | |||
30 | -- | ||
31 | 1.7.9.5 | ||
32 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0007-rtlwifi-Add-missing-DMA-buffer-unmapping-for-PCI-dri.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0007-rtlwifi-Add-missing-DMA-buffer-unmapping-for-PCI-dri.patch new file mode 100644 index 00000000..550db2eb --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0007-rtlwifi-Add-missing-DMA-buffer-unmapping-for-PCI-dri.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From a8c85bb6818c1e5d3fec8904cae9a851ed700bb6 Mon Sep 17 00:00:00 2001 | ||
2 | From: Larry Finger <Larry.Finger@lwfinger.net> | ||
3 | Date: Mon, 26 Mar 2012 10:48:20 -0500 | ||
4 | Subject: [PATCH 07/69] rtlwifi: Add missing DMA buffer unmapping for PCI | ||
5 | drivers | ||
6 | |||
7 | commit 673f7786e205c87b5d978c62827b9a66d097bebb upstream. | ||
8 | |||
9 | In https://bugzilla.kernel.org/show_bug.cgi?id=42976, a system with driver | ||
10 | rtl8192se used as an AP suffers from "Out of SW-IOMMU space" errors. These | ||
11 | are caused by the DMA buffers used for beacons never being unmapped. | ||
12 | |||
13 | This bug was also reported at | ||
14 | https://bugs.launchpad.net/ubuntu/+source/linux/+bug/961618 | ||
15 | |||
16 | Reported-and-Tested-by: Da Xue <da@lessconfused.com> | ||
17 | Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> | ||
18 | Signed-off-by: John W. Linville <linville@tuxdriver.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/net/wireless/rtlwifi/pci.c | 7 ++++++- | ||
22 | 1 file changed, 6 insertions(+), 1 deletion(-) | ||
23 | |||
24 | diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c | ||
25 | index 9afcad3..d44d398 100644 | ||
26 | --- a/drivers/net/wireless/rtlwifi/pci.c | ||
27 | +++ b/drivers/net/wireless/rtlwifi/pci.c | ||
28 | @@ -926,8 +926,13 @@ static void _rtl_pci_prepare_bcn_tasklet(struct ieee80211_hw *hw) | ||
29 | memset(&tcb_desc, 0, sizeof(struct rtl_tcb_desc)); | ||
30 | ring = &rtlpci->tx_ring[BEACON_QUEUE]; | ||
31 | pskb = __skb_dequeue(&ring->queue); | ||
32 | - if (pskb) | ||
33 | + if (pskb) { | ||
34 | + struct rtl_tx_desc *entry = &ring->desc[ring->idx]; | ||
35 | + pci_unmap_single(rtlpci->pdev, rtlpriv->cfg->ops->get_desc( | ||
36 | + (u8 *) entry, true, HW_DESC_TXBUFF_ADDR), | ||
37 | + pskb->len, PCI_DMA_TODEVICE); | ||
38 | kfree_skb(pskb); | ||
39 | + } | ||
40 | |||
41 | /*NB: the beacon data buffer must be 32-bit aligned. */ | ||
42 | pskb = ieee80211_beacon_get(hw, mac->vif); | ||
43 | -- | ||
44 | 1.7.9.5 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0008-ARM-7379-1-DT-fix-atags_to_fdt-second-call-site.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0008-ARM-7379-1-DT-fix-atags_to_fdt-second-call-site.patch new file mode 100644 index 00000000..4f0dc10a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0008-ARM-7379-1-DT-fix-atags_to_fdt-second-call-site.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From a1e9b9702554dae713f7344f8d357ac261a3a0d7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Marc Zyngier <Marc.Zyngier@arm.com> | ||
3 | Date: Wed, 11 Apr 2012 14:52:55 +0100 | ||
4 | Subject: [PATCH 08/69] ARM: 7379/1: DT: fix atags_to_fdt() second call site | ||
5 | |||
6 | commit 9c5fd9e85f574d9d0361b2b878f55732290afe5b upstream. | ||
7 | |||
8 | atags_to_fdt() returns 1 when it fails to find a valid FDT signature. | ||
9 | The CONFIG_ARM_ATAG_DTB_COMPAT code is supposed to retry with another | ||
10 | location, but only does so when the initial call doesn't fail. | ||
11 | |||
12 | Fix this by using the correct condition in the assembly code. | ||
13 | |||
14 | Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> | ||
15 | Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> | ||
16 | Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | arch/arm/boot/compressed/head.S | 2 +- | ||
20 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
21 | |||
22 | diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S | ||
23 | index c2effc9..9c18ebd 100644 | ||
24 | --- a/arch/arm/boot/compressed/head.S | ||
25 | +++ b/arch/arm/boot/compressed/head.S | ||
26 | @@ -273,7 +273,7 @@ restart: adr r0, LC0 | ||
27 | add r0, r0, #0x100 | ||
28 | mov r1, r6 | ||
29 | sub r2, sp, r6 | ||
30 | - blne atags_to_fdt | ||
31 | + bleq atags_to_fdt | ||
32 | |||
33 | ldmfd sp!, {r0-r3, ip, lr} | ||
34 | sub sp, sp, #0x10000 | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0009-ARM-7384-1-ThumbEE-Disable-userspace-TEEHBR-access-f.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0009-ARM-7384-1-ThumbEE-Disable-userspace-TEEHBR-access-f.patch new file mode 100644 index 00000000..19d9a23d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0009-ARM-7384-1-ThumbEE-Disable-userspace-TEEHBR-access-f.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From f57d472183a16e61832110d6cdb7a410802c0c34 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jonathan Austin <Jonathan.Austin@arm.com> | ||
3 | Date: Thu, 12 Apr 2012 17:45:25 +0100 | ||
4 | Subject: [PATCH 09/69] ARM: 7384/1: ThumbEE: Disable userspace TEEHBR access | ||
5 | for !CONFIG_ARM_THUMBEE | ||
6 | |||
7 | commit 078c04545ba56da21567728a909a496df5ff730d upstream. | ||
8 | |||
9 | Currently when ThumbEE is not enabled (!CONFIG_ARM_THUMBEE) the ThumbEE | ||
10 | register states are not saved/restored at context switch. The default state | ||
11 | of the ThumbEE Ctrl register (TEECR) allows userspace accesses to the | ||
12 | ThumbEE Base Handler register (TEEHBR). This can cause unexpected behaviour | ||
13 | when people use ThumbEE on !CONFIG_ARM_THUMBEE kernels, as well as allowing | ||
14 | covert communication - eg between userspace tasks running inside chroot | ||
15 | jails. | ||
16 | |||
17 | This patch sets up TEECR in order to prevent user-space access to TEEHBR | ||
18 | when !CONFIG_ARM_THUMBEE. In this case, tasks are sent SIGILL if they try to | ||
19 | access TEEHBR. | ||
20 | |||
21 | Reviewed-by: Will Deacon <will.deacon@arm.com> | ||
22 | Signed-off-by: Jonathan Austin <jonathan.austin@arm.com> | ||
23 | Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | arch/arm/mm/proc-v7.S | 12 ++++++++++++ | ||
27 | 1 file changed, 12 insertions(+) | ||
28 | |||
29 | diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S | ||
30 | index 82ef81d..785365e 100644 | ||
31 | --- a/arch/arm/mm/proc-v7.S | ||
32 | +++ b/arch/arm/mm/proc-v7.S | ||
33 | @@ -382,6 +382,18 @@ __v7_setup: | ||
34 | mcr p15, 0, r5, c10, c2, 0 @ write PRRR | ||
35 | mcr p15, 0, r6, c10, c2, 1 @ write NMRR | ||
36 | #endif | ||
37 | +#ifndef CONFIG_ARM_THUMBEE | ||
38 | + mrc p15, 0, r0, c0, c1, 0 @ read ID_PFR0 for ThumbEE | ||
39 | + and r0, r0, #(0xf << 12) @ ThumbEE enabled field | ||
40 | + teq r0, #(1 << 12) @ check if ThumbEE is present | ||
41 | + bne 1f | ||
42 | + mov r5, #0 | ||
43 | + mcr p14, 6, r5, c1, c0, 0 @ Initialize TEEHBR to 0 | ||
44 | + mrc p14, 6, r0, c0, c0, 0 @ load TEECR | ||
45 | + orr r0, r0, #1 @ set the 1st bit in order to | ||
46 | + mcr p14, 6, r0, c0, c0, 0 @ stop userspace TEEHBR access | ||
47 | +1: | ||
48 | +#endif | ||
49 | adr r5, v7_crval | ||
50 | ldmia r5, {r5, r6} | ||
51 | #ifdef CONFIG_CPU_ENDIAN_BE8 | ||
52 | -- | ||
53 | 1.7.9.5 | ||
54 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0010-md-bitmap-prevent-bitmap_daemon_work-running-while-i.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0010-md-bitmap-prevent-bitmap_daemon_work-running-while-i.patch new file mode 100644 index 00000000..a80aa008 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0010-md-bitmap-prevent-bitmap_daemon_work-running-while-i.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From 814a0921c841d7bb82d27dfccdafea9982420c24 Mon Sep 17 00:00:00 2001 | ||
2 | From: NeilBrown <neilb@suse.de> | ||
3 | Date: Thu, 12 Apr 2012 16:05:06 +1000 | ||
4 | Subject: [PATCH 10/69] md/bitmap: prevent bitmap_daemon_work running while | ||
5 | initialising bitmap | ||
6 | |||
7 | commit afbaa90b80b1ec66e5137cc3824746bfdf559b18 upstream. | ||
8 | |||
9 | If a bitmap is added while the array is active, it is possible | ||
10 | for bitmap_daemon_work to run while the bitmap is being | ||
11 | initialised. | ||
12 | This is particularly a problem if bitmap_daemon_work sees | ||
13 | bitmap->filemap as non-NULL before it has been filled in properly. | ||
14 | So hold bitmap_info.mutex while filling in ->filemap | ||
15 | to prevent problems. | ||
16 | |||
17 | This patch is suitable for any -stable kernel, though it might not | ||
18 | apply cleanly before about 3.1. | ||
19 | |||
20 | Signed-off-by: NeilBrown <neilb@suse.de> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/md/bitmap.c | 2 ++ | ||
24 | 1 file changed, 2 insertions(+) | ||
25 | |||
26 | diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c | ||
27 | index 2a8722b..62a8e68 100644 | ||
28 | --- a/drivers/md/bitmap.c | ||
29 | +++ b/drivers/md/bitmap.c | ||
30 | @@ -1819,7 +1819,9 @@ int bitmap_load(struct mddev *mddev) | ||
31 | * re-add of a missing device */ | ||
32 | start = mddev->recovery_cp; | ||
33 | |||
34 | + mutex_lock(&mddev->bitmap_info.mutex); | ||
35 | err = bitmap_init_from_disk(bitmap, start); | ||
36 | + mutex_unlock(&mddev->bitmap_info.mutex); | ||
37 | |||
38 | if (err) | ||
39 | goto out; | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0011-Bluetooth-uart-ldisc-Fix-memory-leak.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0011-Bluetooth-uart-ldisc-Fix-memory-leak.patch new file mode 100644 index 00000000..a6ef289a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0011-Bluetooth-uart-ldisc-Fix-memory-leak.patch | |||
@@ -0,0 +1,51 @@ | |||
1 | From afeb2c0d484fb63fc8de83308f3ae74c9a607ad0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Johan Hovold <jhovold@gmail.com> | ||
3 | Date: Wed, 11 Apr 2012 11:24:35 +0200 | ||
4 | Subject: [PATCH 11/69] Bluetooth: uart-ldisc: Fix memory leak | ||
5 | |||
6 | This is a partial, self-contained, minimal backport of commit | ||
7 | 797fe796c4335b35d95d5326824513befdb5d1e9 upstream which fixes the memory | ||
8 | leak: | ||
9 | |||
10 | Bluetooth: uart-ldisc: Fix memory leak and remove destruct cb | ||
11 | |||
12 | We currently leak the hci_uart object if HCI_UART_PROTO_SET is never set | ||
13 | because the hci-destruct callback will then never be called. This fix | ||
14 | removes the hci-destruct callback and frees the driver internal private | ||
15 | hci_uart object directly on tty-close. We call hci_unregister_dev() here | ||
16 | so the hci-core will never call our callbacks again (except destruct). | ||
17 | Therefore, we can safely free the driver internal data right away and | ||
18 | set the destruct callback to NULL. | ||
19 | |||
20 | Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> | ||
21 | Acked-by: Marcel Holtmann <marcel@holtmann.org> | ||
22 | Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> | ||
23 | Signed-off-by: Johan Hovold <jhovold@gmail.com> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/bluetooth/hci_ldisc.c | 2 +- | ||
27 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
28 | |||
29 | diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c | ||
30 | index 48ad2a7..36dafef 100644 | ||
31 | --- a/drivers/bluetooth/hci_ldisc.c | ||
32 | +++ b/drivers/bluetooth/hci_ldisc.c | ||
33 | @@ -237,7 +237,6 @@ static void hci_uart_destruct(struct hci_dev *hdev) | ||
34 | return; | ||
35 | |||
36 | BT_DBG("%s", hdev->name); | ||
37 | - kfree(hdev->driver_data); | ||
38 | } | ||
39 | |||
40 | /* ------ LDISC part ------ */ | ||
41 | @@ -316,6 +315,7 @@ static void hci_uart_tty_close(struct tty_struct *tty) | ||
42 | hci_free_dev(hdev); | ||
43 | } | ||
44 | } | ||
45 | + kfree(hu); | ||
46 | } | ||
47 | } | ||
48 | |||
49 | -- | ||
50 | 1.7.9.5 | ||
51 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0012-Bluetooth-hci_ldisc-fix-NULL-pointer-dereference-on-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0012-Bluetooth-hci_ldisc-fix-NULL-pointer-dereference-on-.patch new file mode 100644 index 00000000..fdf52354 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0012-Bluetooth-hci_ldisc-fix-NULL-pointer-dereference-on-.patch | |||
@@ -0,0 +1,107 @@ | |||
1 | From 96e70b85a81d0c38ed66c1861711855a15428870 Mon Sep 17 00:00:00 2001 | ||
2 | From: Johan Hovold <jhovold@gmail.com> | ||
3 | Date: Thu, 15 Mar 2012 14:48:40 +0100 | ||
4 | Subject: [PATCH 12/69] Bluetooth: hci_ldisc: fix NULL-pointer dereference on | ||
5 | tty_close | ||
6 | |||
7 | commit 33b69bf80a3704d45341928e4ff68b6ebd470686 upstream. | ||
8 | |||
9 | Do not close protocol driver until device has been unregistered. | ||
10 | |||
11 | This fixes a race between tty_close and hci_dev_open which can result in | ||
12 | a NULL-pointer dereference. | ||
13 | |||
14 | The line discipline closes the protocol driver while we may still have | ||
15 | hci_dev_open sleeping on the req_lock mutex resulting in a NULL-pointer | ||
16 | dereference when lock is acquired and hci_init_req called. | ||
17 | |||
18 | Bug is 100% reproducible using hciattach and a disconnected serial port: | ||
19 | |||
20 | 0. # hciattach -n ttyO1 any noflow | ||
21 | |||
22 | 1. hci_dev_open called from hci_power_on grabs req lock | ||
23 | 2. hci_init_req executes but device fails to initialise (times out | ||
24 | eventually) | ||
25 | 3. hci_dev_open is called from hci_sock_ioctl and sleeps on req lock | ||
26 | 4. hci_uart_tty_close detaches protocol driver and cancels init req | ||
27 | 5. hci_dev_open (1) releases req lock | ||
28 | 6. hci_dev_open (3) grabs req lock, calls hci_init_req, which triggers oops | ||
29 | when request is prepared in hci_uart_send_frame | ||
30 | |||
31 | [ 137.201263] Unable to handle kernel NULL pointer dereference at virtual address 00000028 | ||
32 | [ 137.209838] pgd = c0004000 | ||
33 | [ 137.212677] [00000028] *pgd=00000000 | ||
34 | [ 137.216430] Internal error: Oops: 17 [#1] | ||
35 | [ 137.220642] Modules linked in: | ||
36 | [ 137.223846] CPU: 0 Tainted: G W (3.3.0-rc6-dirty #406) | ||
37 | [ 137.230529] PC is at __lock_acquire+0x5c/0x1ab0 | ||
38 | [ 137.235290] LR is at lock_acquire+0x9c/0x128 | ||
39 | [ 137.239776] pc : [<c0071490>] lr : [<c00733f8>] psr: 20000093 | ||
40 | [ 137.239776] sp : cf869dd8 ip : c0529554 fp : c051c730 | ||
41 | [ 137.251800] r10: 00000000 r9 : cf8673c0 r8 : 00000080 | ||
42 | [ 137.257293] r7 : 00000028 r6 : 00000002 r5 : 00000000 r4 : c053fd70 | ||
43 | [ 137.264129] r3 : 00000000 r2 : 00000000 r1 : 00000000 r0 : 00000001 | ||
44 | [ 137.270965] Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel | ||
45 | [ 137.278717] Control: 10c5387d Table: 8f0f4019 DAC: 00000015 | ||
46 | [ 137.284729] Process kworker/u:1 (pid: 7, stack limit = 0xcf8682e8) | ||
47 | [ 137.291229] Stack: (0xcf869dd8 to 0xcf86a000) | ||
48 | [ 137.295776] 9dc0: c0529554 00000000 | ||
49 | [ 137.304351] 9de0: cf8673c0 cf868000 d03ea1ef cf868000 000001ef 00000470 00000000 00000002 | ||
50 | [ 137.312927] 9e00: cf8673c0 00000001 c051c730 c00716ec 0000000c 00000440 c0529554 00000001 | ||
51 | [ 137.321533] 9e20: c051c730 cf868000 d03ea1f3 00000000 c053b978 00000000 00000028 cf868000 | ||
52 | [ 137.330078] 9e40: 00000000 00000000 00000002 00000000 00000000 c00733f8 00000002 00000080 | ||
53 | [ 137.338684] 9e60: 00000000 c02a1d50 00000000 00000001 60000013 c0969a1c 60000093 c053b96c | ||
54 | [ 137.347259] 9e80: 00000002 00000018 20000013 c02a1d50 cf0ac000 00000000 00000002 cf868000 | ||
55 | [ 137.355834] 9ea0: 00000089 c0374130 00000002 00000000 c02a1d50 cf0ac000 0000000c cf0fc540 | ||
56 | [ 137.364410] 9ec0: 00000018 c02a1d50 cf0fc540 00000000 cf0fc540 c0282238 c028220c cf178d80 | ||
57 | [ 137.372985] 9ee0: 127525d8 c02821cc 9a1fa451 c032727c 9a1fa451 127525d8 cf0fc540 cf0ac4ec | ||
58 | [ 137.381561] 9f00: cf0ac000 cf0fc540 cf0ac584 c03285f4 c0328580 cf0ac4ec cf85c740 c05510cc | ||
59 | [ 137.390136] 9f20: ce825400 c004c914 00000002 00000000 c004c884 ce8254f5 cf869f48 00000000 | ||
60 | [ 137.398712] 9f40: c0328580 ce825415 c0a7f914 c061af64 00000000 c048cf3c cf8673c0 cf85c740 | ||
61 | [ 137.407287] 9f60: c05510cc c051a66c c05510ec c05510c4 cf85c750 cf868000 00000089 c004d6ac | ||
62 | [ 137.415863] 9f80: 00000000 c0073d14 00000001 cf853ed8 cf85c740 c004d558 00000013 00000000 | ||
63 | [ 137.424438] 9fa0: 00000000 00000000 00000000 c00516b0 00000000 00000000 cf85c740 00000000 | ||
64 | [ 137.433013] 9fc0: 00000001 dead4ead ffffffff ffffffff c0551674 00000000 00000000 c0450aa4 | ||
65 | [ 137.441589] 9fe0: cf869fe0 cf869fe0 cf853ed8 c005162c c0013b30 c0013b30 00ffff00 00ffff00 | ||
66 | [ 137.450164] [<c0071490>] (__lock_acquire+0x5c/0x1ab0) from [<c00733f8>] (lock_acquire+0x9c/0x128) | ||
67 | [ 137.459503] [<c00733f8>] (lock_acquire+0x9c/0x128) from [<c0374130>] (_raw_spin_lock_irqsave+0x44/0x58) | ||
68 | [ 137.469360] [<c0374130>] (_raw_spin_lock_irqsave+0x44/0x58) from [<c02a1d50>] (skb_queue_tail+0x18/0x48) | ||
69 | [ 137.479339] [<c02a1d50>] (skb_queue_tail+0x18/0x48) from [<c0282238>] (h4_enqueue+0x2c/0x34) | ||
70 | [ 137.488189] [<c0282238>] (h4_enqueue+0x2c/0x34) from [<c02821cc>] (hci_uart_send_frame+0x34/0x68) | ||
71 | [ 137.497497] [<c02821cc>] (hci_uart_send_frame+0x34/0x68) from [<c032727c>] (hci_send_frame+0x50/0x88) | ||
72 | [ 137.507171] [<c032727c>] (hci_send_frame+0x50/0x88) from [<c03285f4>] (hci_cmd_work+0x74/0xd4) | ||
73 | [ 137.516204] [<c03285f4>] (hci_cmd_work+0x74/0xd4) from [<c004c914>] (process_one_work+0x1a0/0x4ec) | ||
74 | [ 137.525604] [<c004c914>] (process_one_work+0x1a0/0x4ec) from [<c004d6ac>] (worker_thread+0x154/0x344) | ||
75 | [ 137.535278] [<c004d6ac>] (worker_thread+0x154/0x344) from [<c00516b0>] (kthread+0x84/0x90) | ||
76 | [ 137.543975] [<c00516b0>] (kthread+0x84/0x90) from [<c0013b30>] (kernel_thread_exit+0x0/0x8) | ||
77 | [ 137.552734] Code: e59f4e5c e5941000 e3510000 0a000031 (e5971000) | ||
78 | [ 137.559234] ---[ end trace 1b75b31a2719ed1e ]--- | ||
79 | |||
80 | Signed-off-by: Johan Hovold <jhovold@gmail.com> | ||
81 | Acked-by: Marcel Holtmann <marcel@holtmann.org> | ||
82 | Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> | ||
83 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
84 | --- | ||
85 | drivers/bluetooth/hci_ldisc.c | 2 +- | ||
86 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
87 | |||
88 | diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c | ||
89 | index 36dafef..8f3d6db 100644 | ||
90 | --- a/drivers/bluetooth/hci_ldisc.c | ||
91 | +++ b/drivers/bluetooth/hci_ldisc.c | ||
92 | @@ -309,11 +309,11 @@ static void hci_uart_tty_close(struct tty_struct *tty) | ||
93 | hci_uart_close(hdev); | ||
94 | |||
95 | if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) { | ||
96 | - hu->proto->close(hu); | ||
97 | if (hdev) { | ||
98 | hci_unregister_dev(hdev); | ||
99 | hci_free_dev(hdev); | ||
100 | } | ||
101 | + hu->proto->close(hu); | ||
102 | } | ||
103 | kfree(hu); | ||
104 | } | ||
105 | -- | ||
106 | 1.7.9.5 | ||
107 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0013-ext4-address-scalability-issue-by-removing-extent-ca.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0013-ext4-address-scalability-issue-by-removing-extent-ca.patch new file mode 100644 index 00000000..f084adcd --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0013-ext4-address-scalability-issue-by-removing-extent-ca.patch | |||
@@ -0,0 +1,93 @@ | |||
1 | From f1c04355902ab71e60c67f39ea29822d0eea062f Mon Sep 17 00:00:00 2001 | ||
2 | From: Theodore Ts'o <tytso@mit.edu> | ||
3 | Date: Mon, 16 Apr 2012 12:16:20 -0400 | ||
4 | Subject: [PATCH 13/69] ext4: address scalability issue by removing extent | ||
5 | cache statistics | ||
6 | |||
7 | commit 9cd70b347e9761ea2d2ac3d758c529a48a8193e6 upstream. | ||
8 | |||
9 | Andi Kleen and Tim Chen have reported that under certain circumstances | ||
10 | the extent cache statistics are causing scalability problems due to | ||
11 | cache line bounces. | ||
12 | |||
13 | Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | fs/ext4/ext4.h | 3 --- | ||
17 | fs/ext4/extents.c | 4 ---- | ||
18 | fs/ext4/super.c | 16 ---------------- | ||
19 | 3 files changed, 23 deletions(-) | ||
20 | |||
21 | diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h | ||
22 | index dbae4d9..7b1cd5c 100644 | ||
23 | --- a/fs/ext4/ext4.h | ||
24 | +++ b/fs/ext4/ext4.h | ||
25 | @@ -1185,9 +1185,6 @@ struct ext4_sb_info { | ||
26 | unsigned long s_ext_blocks; | ||
27 | unsigned long s_ext_extents; | ||
28 | #endif | ||
29 | - /* ext4 extent cache stats */ | ||
30 | - unsigned long extent_cache_hits; | ||
31 | - unsigned long extent_cache_misses; | ||
32 | |||
33 | /* for buddy allocator */ | ||
34 | struct ext4_group_info ***s_group_info; | ||
35 | diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c | ||
36 | index 7507036..c2a2012 100644 | ||
37 | --- a/fs/ext4/extents.c | ||
38 | +++ b/fs/ext4/extents.c | ||
39 | @@ -2052,10 +2052,6 @@ static int ext4_ext_check_cache(struct inode *inode, ext4_lblk_t block, | ||
40 | ret = 1; | ||
41 | } | ||
42 | errout: | ||
43 | - if (!ret) | ||
44 | - sbi->extent_cache_misses++; | ||
45 | - else | ||
46 | - sbi->extent_cache_hits++; | ||
47 | trace_ext4_ext_in_cache(inode, block, ret); | ||
48 | spin_unlock(&EXT4_I(inode)->i_block_reservation_lock); | ||
49 | return ret; | ||
50 | diff --git a/fs/ext4/super.c b/fs/ext4/super.c | ||
51 | index 9281dbe..961059b 100644 | ||
52 | --- a/fs/ext4/super.c | ||
53 | +++ b/fs/ext4/super.c | ||
54 | @@ -2504,18 +2504,6 @@ static ssize_t lifetime_write_kbytes_show(struct ext4_attr *a, | ||
55 | EXT4_SB(sb)->s_sectors_written_start) >> 1))); | ||
56 | } | ||
57 | |||
58 | -static ssize_t extent_cache_hits_show(struct ext4_attr *a, | ||
59 | - struct ext4_sb_info *sbi, char *buf) | ||
60 | -{ | ||
61 | - return snprintf(buf, PAGE_SIZE, "%lu\n", sbi->extent_cache_hits); | ||
62 | -} | ||
63 | - | ||
64 | -static ssize_t extent_cache_misses_show(struct ext4_attr *a, | ||
65 | - struct ext4_sb_info *sbi, char *buf) | ||
66 | -{ | ||
67 | - return snprintf(buf, PAGE_SIZE, "%lu\n", sbi->extent_cache_misses); | ||
68 | -} | ||
69 | - | ||
70 | static ssize_t inode_readahead_blks_store(struct ext4_attr *a, | ||
71 | struct ext4_sb_info *sbi, | ||
72 | const char *buf, size_t count) | ||
73 | @@ -2573,8 +2561,6 @@ static struct ext4_attr ext4_attr_##name = __ATTR(name, mode, show, store) | ||
74 | EXT4_RO_ATTR(delayed_allocation_blocks); | ||
75 | EXT4_RO_ATTR(session_write_kbytes); | ||
76 | EXT4_RO_ATTR(lifetime_write_kbytes); | ||
77 | -EXT4_RO_ATTR(extent_cache_hits); | ||
78 | -EXT4_RO_ATTR(extent_cache_misses); | ||
79 | EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show, | ||
80 | inode_readahead_blks_store, s_inode_readahead_blks); | ||
81 | EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal); | ||
82 | @@ -2590,8 +2576,6 @@ static struct attribute *ext4_attrs[] = { | ||
83 | ATTR_LIST(delayed_allocation_blocks), | ||
84 | ATTR_LIST(session_write_kbytes), | ||
85 | ATTR_LIST(lifetime_write_kbytes), | ||
86 | - ATTR_LIST(extent_cache_hits), | ||
87 | - ATTR_LIST(extent_cache_misses), | ||
88 | ATTR_LIST(inode_readahead_blks), | ||
89 | ATTR_LIST(inode_goal), | ||
90 | ATTR_LIST(mb_stats), | ||
91 | -- | ||
92 | 1.7.9.5 | ||
93 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0014-ia64-fix-futex_atomic_cmpxchg_inatomic.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0014-ia64-fix-futex_atomic_cmpxchg_inatomic.patch new file mode 100644 index 00000000..ac9d27d7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0014-ia64-fix-futex_atomic_cmpxchg_inatomic.patch | |||
@@ -0,0 +1,58 @@ | |||
1 | From 31a9ac5149ad2b11b591eb704f3132d0d344e7e0 Mon Sep 17 00:00:00 2001 | ||
2 | From: "Luck, Tony" <tony.luck@intel.com> | ||
3 | Date: Mon, 16 Apr 2012 16:28:01 -0700 | ||
4 | Subject: [PATCH 14/69] ia64: fix futex_atomic_cmpxchg_inatomic() | ||
5 | |||
6 | commit c76f39bddb84f93f70a5520d9253ec0317bec216 upstream. | ||
7 | |||
8 | Michel Lespinasse cleaned up the futex calling conventions in commit | ||
9 | 37a9d912b24f ("futex: Sanitize cmpxchg_futex_value_locked API"). | ||
10 | |||
11 | But the ia64 implementation was subtly broken. Gcc does not know that | ||
12 | register "r8" will be updated by the fault handler if the cmpxchg | ||
13 | instruction takes an exception. So it feels safe in letting the | ||
14 | initialization of r8 slide to after the cmpxchg. Result: we always | ||
15 | return 0 whether the user address faulted or not. | ||
16 | |||
17 | Fix by moving the initialization of r8 into the __asm__ code so gcc | ||
18 | won't move it. | ||
19 | |||
20 | Reported-by: <emeric.maschino@gmail.com> | ||
21 | Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42757 | ||
22 | Tested-by: <emeric.maschino@gmail.com> | ||
23 | Acked-by: Michel Lespinasse <walken@google.com> | ||
24 | Signed-off-by: Tony Luck <tony.luck@intel.com> | ||
25 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | arch/ia64/include/asm/futex.h | 9 +++++---- | ||
29 | 1 file changed, 5 insertions(+), 4 deletions(-) | ||
30 | |||
31 | diff --git a/arch/ia64/include/asm/futex.h b/arch/ia64/include/asm/futex.h | ||
32 | index 8428525..21ab376 100644 | ||
33 | --- a/arch/ia64/include/asm/futex.h | ||
34 | +++ b/arch/ia64/include/asm/futex.h | ||
35 | @@ -107,15 +107,16 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, | ||
36 | return -EFAULT; | ||
37 | |||
38 | { | ||
39 | - register unsigned long r8 __asm ("r8") = 0; | ||
40 | + register unsigned long r8 __asm ("r8"); | ||
41 | unsigned long prev; | ||
42 | __asm__ __volatile__( | ||
43 | " mf;; \n" | ||
44 | - " mov ar.ccv=%3;; \n" | ||
45 | - "[1:] cmpxchg4.acq %0=[%1],%2,ar.ccv \n" | ||
46 | + " mov %0=r0 \n" | ||
47 | + " mov ar.ccv=%4;; \n" | ||
48 | + "[1:] cmpxchg4.acq %1=[%2],%3,ar.ccv \n" | ||
49 | " .xdata4 \"__ex_table\", 1b-., 2f-. \n" | ||
50 | "[2:]" | ||
51 | - : "=r" (prev) | ||
52 | + : "=r" (r8), "=r" (prev) | ||
53 | : "r" (uaddr), "r" (newval), | ||
54 | "rO" ((long) (unsigned) oldval) | ||
55 | : "memory"); | ||
56 | -- | ||
57 | 1.7.9.5 | ||
58 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0015-drivers-rtc-rtc-pl031.c-enable-clock-on-all-ST-varia.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0015-drivers-rtc-rtc-pl031.c-enable-clock-on-all-ST-varia.patch new file mode 100644 index 00000000..7990dfe2 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0015-drivers-rtc-rtc-pl031.c-enable-clock-on-all-ST-varia.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From a5333b50b8a4297f3b9959366fb26ad9b9c55314 Mon Sep 17 00:00:00 2001 | ||
2 | From: Linus Walleij <linus.walleij@linaro.org> | ||
3 | Date: Thu, 12 Apr 2012 12:49:16 -0700 | ||
4 | Subject: [PATCH 15/69] drivers/rtc/rtc-pl031.c: enable clock on all ST | ||
5 | variants | ||
6 | |||
7 | commit 2f3972168353d355854d6381f1f360ce83b723e5 upstream. | ||
8 | |||
9 | The ST variants of the PL031 all require bit 26 in the control register | ||
10 | to be set before they work properly. Discovered this when testing on | ||
11 | the Nomadik board where it would suprisingly just stand still. | ||
12 | |||
13 | Signed-off-by: Linus Walleij <linus.walleij@linaro.org> | ||
14 | Cc: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com> | ||
15 | Cc: Alessandro Rubini <rubini@unipv.it> | ||
16 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
17 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/rtc/rtc-pl031.c | 3 +-- | ||
21 | 1 file changed, 1 insertion(+), 2 deletions(-) | ||
22 | |||
23 | diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c | ||
24 | index ff1b84b..e86edfc 100644 | ||
25 | --- a/drivers/rtc/rtc-pl031.c | ||
26 | +++ b/drivers/rtc/rtc-pl031.c | ||
27 | @@ -339,8 +339,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id) | ||
28 | dev_dbg(&adev->dev, "revision = 0x%01x\n", ldata->hw_revision); | ||
29 | |||
30 | /* Enable the clockwatch on ST Variants */ | ||
31 | - if ((ldata->hw_designer == AMBA_VENDOR_ST) && | ||
32 | - (ldata->hw_revision > 1)) | ||
33 | + if (ldata->hw_designer == AMBA_VENDOR_ST) | ||
34 | writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN, | ||
35 | ldata->base + RTC_CR); | ||
36 | |||
37 | -- | ||
38 | 1.7.9.5 | ||
39 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0016-hugetlb-fix-race-condition-in-hugetlb_fault.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0016-hugetlb-fix-race-condition-in-hugetlb_fault.patch new file mode 100644 index 00000000..5b93b531 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0016-hugetlb-fix-race-condition-in-hugetlb_fault.patch | |||
@@ -0,0 +1,89 @@ | |||
1 | From 7295297274cc9506d1600eb09ab93f203e860f48 Mon Sep 17 00:00:00 2001 | ||
2 | From: Chris Metcalf <cmetcalf@tilera.com> | ||
3 | Date: Thu, 12 Apr 2012 12:49:15 -0700 | ||
4 | Subject: [PATCH 16/69] hugetlb: fix race condition in hugetlb_fault() | ||
5 | |||
6 | commit 66aebce747eaf9bc456bf1f1b217d8db843031d0 upstream. | ||
7 | |||
8 | The race is as follows: | ||
9 | |||
10 | Suppose a multi-threaded task forks a new process (on cpu A), thus | ||
11 | bumping up the ref count on all the pages. While the fork is occurring | ||
12 | (and thus we have marked all the PTEs as read-only), another thread in | ||
13 | the original process (on cpu B) tries to write to a huge page, taking an | ||
14 | access violation from the write-protect and calling hugetlb_cow(). Now, | ||
15 | suppose the fork() fails. It will undo the COW and decrement the ref | ||
16 | count on the pages, so the ref count on the huge page drops back to 1. | ||
17 | Meanwhile hugetlb_cow() also decrements the ref count by one on the | ||
18 | original page, since the original address space doesn't need it any | ||
19 | more, having copied a new page to replace the original page. This | ||
20 | leaves the ref count at zero, and when we call unlock_page(), we panic. | ||
21 | |||
22 | fork on CPU A fault on CPU B | ||
23 | ============= ============== | ||
24 | ... | ||
25 | down_write(&parent->mmap_sem); | ||
26 | down_write_nested(&child->mmap_sem); | ||
27 | ... | ||
28 | while duplicating vmas | ||
29 | if error | ||
30 | break; | ||
31 | ... | ||
32 | up_write(&child->mmap_sem); | ||
33 | up_write(&parent->mmap_sem); ... | ||
34 | down_read(&parent->mmap_sem); | ||
35 | ... | ||
36 | lock_page(page); | ||
37 | handle COW | ||
38 | page_mapcount(old_page) == 2 | ||
39 | alloc and prepare new_page | ||
40 | ... | ||
41 | handle error | ||
42 | page_remove_rmap(page); | ||
43 | put_page(page); | ||
44 | ... | ||
45 | fold new_page into pte | ||
46 | page_remove_rmap(page); | ||
47 | put_page(page); | ||
48 | ... | ||
49 | oops ==> unlock_page(page); | ||
50 | up_read(&parent->mmap_sem); | ||
51 | |||
52 | The solution is to take an extra reference to the page while we are | ||
53 | holding the lock on it. | ||
54 | |||
55 | Signed-off-by: Chris Metcalf <cmetcalf@tilera.com> | ||
56 | Cc: Hillf Danton <dhillf@gmail.com> | ||
57 | Cc: Michal Hocko <mhocko@suse.cz> | ||
58 | Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | ||
59 | Cc: Hugh Dickins <hughd@google.com> | ||
60 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
61 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
62 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
63 | --- | ||
64 | mm/hugetlb.c | 2 ++ | ||
65 | 1 file changed, 2 insertions(+) | ||
66 | |||
67 | diff --git a/mm/hugetlb.c b/mm/hugetlb.c | ||
68 | index 2316840..bd936ed 100644 | ||
69 | --- a/mm/hugetlb.c | ||
70 | +++ b/mm/hugetlb.c | ||
71 | @@ -2686,6 +2686,7 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, | ||
72 | * so no worry about deadlock. | ||
73 | */ | ||
74 | page = pte_page(entry); | ||
75 | + get_page(page); | ||
76 | if (page != pagecache_page) | ||
77 | lock_page(page); | ||
78 | |||
79 | @@ -2717,6 +2718,7 @@ out_page_table_lock: | ||
80 | } | ||
81 | if (page != pagecache_page) | ||
82 | unlock_page(page); | ||
83 | + put_page(page); | ||
84 | |||
85 | out_mutex: | ||
86 | mutex_unlock(&hugetlb_instantiation_mutex); | ||
87 | -- | ||
88 | 1.7.9.5 | ||
89 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0017-staging-iio-hmc5843-Fix-crash-in-probe-function.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0017-staging-iio-hmc5843-Fix-crash-in-probe-function.patch new file mode 100644 index 00000000..0bd53054 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0017-staging-iio-hmc5843-Fix-crash-in-probe-function.patch | |||
@@ -0,0 +1,107 @@ | |||
1 | From 67d0ef228b571d53087923471cdd9de8281b7545 Mon Sep 17 00:00:00 2001 | ||
2 | From: Marek Belisko <marek.belisko@open-nandra.com> | ||
3 | Date: Thu, 12 Apr 2012 21:48:03 +0200 | ||
4 | Subject: [PATCH 17/69] staging: iio: hmc5843: Fix crash in probe function. | ||
5 | |||
6 | commit 62d2feb9803f18c4e3c8a1a2c7e30a54df8a1d72 upstream. | ||
7 | |||
8 | Fix crash after issuing: | ||
9 | echo hmc5843 0x1e > /sys/class/i2c-dev/i2c-2/device/new_device | ||
10 | |||
11 | [ 37.180999] device: '2-001e': device_add | ||
12 | [ 37.188293] bus: 'i2c': add device 2-001e | ||
13 | [ 37.194549] PM: Adding info for i2c:2-001e | ||
14 | [ 37.200958] bus: 'i2c': driver_probe_device: matched device 2-001e with driver hmc5843 | ||
15 | [ 37.210815] bus: 'i2c': really_probe: probing driver hmc5843 with device 2-001e | ||
16 | [ 37.224884] HMC5843 initialized | ||
17 | [ 37.228759] ------------[ cut here ]------------ | ||
18 | [ 37.233612] kernel BUG at mm/slab.c:505! | ||
19 | [ 37.237701] Internal error: Oops - BUG: 0 [#1] PREEMPT | ||
20 | [ 37.243103] Modules linked in: | ||
21 | [ 37.246337] CPU: 0 Not tainted (3.3.1-gta04+ #28) | ||
22 | [ 37.251647] PC is at kfree+0x84/0x144 | ||
23 | [ 37.255493] LR is at kfree+0x20/0x144 | ||
24 | [ 37.259338] pc : [<c00b408c>] lr : [<c00b4028>] psr: 40000093 | ||
25 | [ 37.259368] sp : de249cd8 ip : 0000000c fp : 00000090 | ||
26 | [ 37.271362] r10: 0000000a r9 : de229eac r8 : c0236274 | ||
27 | [ 37.276855] r7 : c09d6490 r6 : a0000013 r5 : de229c00 r4 : de229c10 | ||
28 | [ 37.283691] r3 : c0f00218 r2 : 00000400 r1 : c0eea000 r0 : c00b4028 | ||
29 | [ 37.290527] Flags: nZcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user | ||
30 | [ 37.298095] Control: 10c5387d Table: 9e1d0019 DAC: 00000015 | ||
31 | [ 37.304107] Process sh (pid: 91, stack limit = 0xde2482f0) | ||
32 | [ 37.309844] Stack: (0xde249cd8 to 0xde24a000) | ||
33 | [ 37.314422] 9cc0: de229c10 de229c00 | ||
34 | [ 37.322998] 9ce0: de229c10 ffffffea 00000005 c0236274 de140a80 c00b4798 dec00080 de140a80 | ||
35 | [ 37.331573] 9d00: c032f37c dec00080 000080d0 00000001 de229c00 de229c10 c048d578 00000005 | ||
36 | [ 37.340148] 9d20: de229eac 0000000a 00000090 c032fa40 00000001 00000000 00000001 de229c10 | ||
37 | [ 37.348724] 9d40: de229eac 00000029 c075b558 00000001 00000003 00000004 de229c10 c048d594 | ||
38 | [ 37.357299] 9d60: 00000000 60000013 00000018 205b0007 37332020 3432322e 5d343838 c0060020 | ||
39 | [ 37.365905] 9d80: de251600 00000001 00000000 de251600 00000001 c0065a84 de229c00 de229c48 | ||
40 | [ 37.374481] 9da0: 00000006 0048d62c de229c38 de229c00 de229c00 de1f6c00 de1f6c20 00000001 | ||
41 | [ 37.383056] 9dc0: 00000000 c048d62c 00000000 de229c00 de229c00 de1f6c00 de1f6c20 00000001 | ||
42 | [ 37.391632] 9de0: 00000000 c048d62c 00000000 c0330164 00000000 de1f6c20 c048d62c de1f6c00 | ||
43 | [ 37.400207] 9e00: c0330078 de1f6c04 c078d714 de189b58 00000000 c02ccfd8 de1f6c20 c0795f40 | ||
44 | [ 37.408782] 9e20: c0238330 00000000 00000000 c02381a8 de1b9fc0 de1f6c20 de1f6c20 de249e48 | ||
45 | [ 37.417358] 9e40: c0238330 c0236bb0 decdbed8 de7d0f14 de1f6c20 de1f6c20 de1f6c54 de1f6c20 | ||
46 | [ 37.425933] 9e60: 00000000 c0238030 de1f6c20 c078d7bc de1f6c20 c02377ec de1f6c20 de1f6c28 | ||
47 | [ 37.434509] 9e80: dee64cb0 c0236138 c047c554 de189b58 00000000 c004b45c de1f6c20 de1f6cd8 | ||
48 | [ 37.443084] 9ea0: c0edfa6c de1f6c00 dee64c68 de1f6c04 de1f6c20 dee64cb8 c047c554 de189b58 | ||
49 | [ 37.451690] 9ec0: 00000000 c02cd634 dee64c68 de249ef4 de23b008 dee64cb0 0000000d de23b000 | ||
50 | [ 37.460266] 9ee0: de23b007 c02cd78c 00000002 00000000 00000000 35636d68 00333438 00000000 | ||
51 | [ 37.468841] 9f00: 00000000 00000000 001e0000 00000000 00000000 00000000 00000000 0a10cec0 | ||
52 | [ 37.477416] 9f20: 00000002 de249f80 0000000d dee62990 de189b40 c0234d88 0000000d c010c354 | ||
53 | [ 37.485992] 9f40: 0000000d de210f28 000acc88 de249f80 0000000d de248000 00000000 c00b7bf8 | ||
54 | [ 37.494567] 9f60: de210f28 000acc88 de210f28 000acc88 00000000 00000000 0000000d c00b7ed8 | ||
55 | [ 37.503143] 9f80: 00000000 00000000 0000000d 00000000 0007fa28 0000000d 000acc88 00000004 | ||
56 | [ 37.511718] 9fa0: c000e544 c000e380 0007fa28 0000000d 00000001 000acc88 0000000d 00000000 | ||
57 | [ 37.520294] 9fc0: 0007fa28 0000000d 000acc88 00000004 00000001 00000020 00000002 00000000 | ||
58 | [ 37.528869] 9fe0: 00000000 beab8624 0000ea05 b6eaebac 600d0010 00000001 00000000 00000000 | ||
59 | [ 37.537475] [<c00b408c>] (kfree+0x84/0x144) from [<c0236274>] (device_add+0x530/0x57c) | ||
60 | [ 37.545806] [<c0236274>] (device_add+0x530/0x57c) from [<c032fa40>] (iio_device_register+0x8c8/0x990) | ||
61 | [ 37.555480] [<c032fa40>] (iio_device_register+0x8c8/0x990) from [<c0330164>] (hmc5843_probe+0xec/0x114) | ||
62 | [ 37.565338] [<c0330164>] (hmc5843_probe+0xec/0x114) from [<c02ccfd8>] (i2c_device_probe+0xc4/0xf8) | ||
63 | [ 37.574737] [<c02ccfd8>] (i2c_device_probe+0xc4/0xf8) from [<c02381a8>] (driver_probe_device+0x118/0x218) | ||
64 | [ 37.584777] [<c02381a8>] (driver_probe_device+0x118/0x218) from [<c0236bb0>] (bus_for_each_drv+0x4c/0x84) | ||
65 | [ 37.594818] [<c0236bb0>] (bus_for_each_drv+0x4c/0x84) from [<c0238030>] (device_attach+0x78/0xa4) | ||
66 | [ 37.604125] [<c0238030>] (device_attach+0x78/0xa4) from [<c02377ec>] (bus_probe_device+0x28/0x9c) | ||
67 | [ 37.613433] [<c02377ec>] (bus_probe_device+0x28/0x9c) from [<c0236138>] (device_add+0x3f4/0x57c) | ||
68 | [ 37.622650] [<c0236138>] (device_add+0x3f4/0x57c) from [<c02cd634>] (i2c_new_device+0xf8/0x19c) | ||
69 | [ 37.631805] [<c02cd634>] (i2c_new_device+0xf8/0x19c) from [<c02cd78c>] (i2c_sysfs_new_device+0xb4/0x130) | ||
70 | [ 37.641754] [<c02cd78c>] (i2c_sysfs_new_device+0xb4/0x130) from [<c0234d88>] (dev_attr_store+0x18/0x24) | ||
71 | [ 37.651611] [<c0234d88>] (dev_attr_store+0x18/0x24) from [<c010c354>] (sysfs_write_file+0x10c/0x140) | ||
72 | [ 37.661193] [<c010c354>] (sysfs_write_file+0x10c/0x140) from [<c00b7bf8>] (vfs_write+0xb0/0x178) | ||
73 | [ 37.670410] [<c00b7bf8>] (vfs_write+0xb0/0x178) from [<c00b7ed8>] (sys_write+0x3c/0x68) | ||
74 | [ 37.678833] [<c00b7ed8>] (sys_write+0x3c/0x68) from [<c000e380>] (ret_fast_syscall+0x0/0x3c) | ||
75 | [ 37.687683] Code: 1593301c e5932000 e3120080 1a000000 (e7f001f2) | ||
76 | [ 37.700775] ---[ end trace aaf805debdb69390 ]--- | ||
77 | |||
78 | Client data was assigned to iio_dev structure in probe but in | ||
79 | hmc5843_init_client function casted to private driver data structure which | ||
80 | is wrong. Possibly calling mutex_init(&data->lock); corrupt data | ||
81 | which the lead to above crash. | ||
82 | |||
83 | Signed-off-by: Marek Belisko <marek.belisko@open-nandra.com> | ||
84 | Acked-by: Jonathan Cameron <jic23@kernel.org> | ||
85 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
86 | --- | ||
87 | drivers/staging/iio/magnetometer/hmc5843.c | 4 +++- | ||
88 | 1 file changed, 3 insertions(+), 1 deletion(-) | ||
89 | |||
90 | diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c | ||
91 | index fc9ee97..870db4f 100644 | ||
92 | --- a/drivers/staging/iio/magnetometer/hmc5843.c | ||
93 | +++ b/drivers/staging/iio/magnetometer/hmc5843.c | ||
94 | @@ -521,7 +521,9 @@ static int hmc5843_detect(struct i2c_client *client, | ||
95 | /* Called when we have found a new HMC5843. */ | ||
96 | static void hmc5843_init_client(struct i2c_client *client) | ||
97 | { | ||
98 | - struct hmc5843_data *data = i2c_get_clientdata(client); | ||
99 | + struct iio_dev *indio_dev = i2c_get_clientdata(client); | ||
100 | + struct hmc5843_data *data = iio_priv(indio_dev); | ||
101 | + | ||
102 | hmc5843_set_meas_conf(client, data->meas_conf); | ||
103 | hmc5843_set_rate(client, data->rate); | ||
104 | hmc5843_configure(client, data->operating_mode); | ||
105 | -- | ||
106 | 1.7.9.5 | ||
107 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0018-tty-serial-altera_uart-Check-for-NULL-platform_data-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0018-tty-serial-altera_uart-Check-for-NULL-platform_data-.patch new file mode 100644 index 00000000..e24a472b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0018-tty-serial-altera_uart-Check-for-NULL-platform_data-.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From da80dc7cc4c7ed0823fe75f54cefabc42ac56996 Mon Sep 17 00:00:00 2001 | ||
2 | From: Yuriy Kozlov <ykozlov@ptcusa.com> | ||
3 | Date: Thu, 29 Mar 2012 09:55:27 +0200 | ||
4 | Subject: [PATCH 18/69] tty: serial: altera_uart: Check for NULL platform_data | ||
5 | in probe. | ||
6 | |||
7 | commit acede70d6561f2d042d9dbb153d9a3469479c0ed upstream. | ||
8 | |||
9 | Follow altera_jtag_uart. This fixes a crash if there is a mistake in the DTS. | ||
10 | |||
11 | Signed-off-by: Yuriy Kozlov <ykozlov@ptcusa.com> | ||
12 | Signed-off-by: Tobias Klauser <tklauser@distanz.ch> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/tty/serial/altera_uart.c | 4 ++-- | ||
16 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
17 | |||
18 | diff --git a/drivers/tty/serial/altera_uart.c b/drivers/tty/serial/altera_uart.c | ||
19 | index 1d04c50..5ba0898 100644 | ||
20 | --- a/drivers/tty/serial/altera_uart.c | ||
21 | +++ b/drivers/tty/serial/altera_uart.c | ||
22 | @@ -555,7 +555,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev) | ||
23 | res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
24 | if (res_mem) | ||
25 | port->mapbase = res_mem->start; | ||
26 | - else if (platp->mapbase) | ||
27 | + else if (platp) | ||
28 | port->mapbase = platp->mapbase; | ||
29 | else | ||
30 | return -EINVAL; | ||
31 | @@ -563,7 +563,7 @@ static int __devinit altera_uart_probe(struct platform_device *pdev) | ||
32 | res_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | ||
33 | if (res_irq) | ||
34 | port->irq = res_irq->start; | ||
35 | - else if (platp->irq) | ||
36 | + else if (platp) | ||
37 | port->irq = platp->irq; | ||
38 | |||
39 | /* Check platform data first so we can override device node data */ | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0019-sparc64-Eliminate-obsolete-__handle_softirq-function.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0019-sparc64-Eliminate-obsolete-__handle_softirq-function.patch new file mode 100644 index 00000000..d81ec8e2 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0019-sparc64-Eliminate-obsolete-__handle_softirq-function.patch | |||
@@ -0,0 +1,63 @@ | |||
1 | From d219e7abf51d7e4784a127d79d5806b9c49c672b Mon Sep 17 00:00:00 2001 | ||
2 | From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> | ||
3 | Date: Fri, 13 Apr 2012 03:35:13 +0000 | ||
4 | Subject: [PATCH 19/69] sparc64: Eliminate obsolete __handle_softirq() | ||
5 | function | ||
6 | |||
7 | commit 3d3eeb2ef26112a200785e5fca58ec58dd33bf1e upstream. | ||
8 | |||
9 | The invocation of softirq is now handled by irq_exit(), so there is no | ||
10 | need for sparc64 to invoke it on the trap-return path. In fact, doing so | ||
11 | is a bug because if the trap occurred in the idle loop, this invocation | ||
12 | can result in lockdep-RCU failures. The problem is that RCU ignores idle | ||
13 | CPUs, and the sparc64 trap-return path to the softirq handlers fails to | ||
14 | tell RCU that the CPU must be considered non-idle while those handlers | ||
15 | are executing. This means that RCU is ignoring any RCU read-side critical | ||
16 | sections in those handlers, which in turn means that RCU-protected data | ||
17 | can be yanked out from under those read-side critical sections. | ||
18 | |||
19 | The shiny new lockdep-RCU ability to detect RCU read-side critical sections | ||
20 | that RCU is ignoring located this problem. | ||
21 | |||
22 | The fix is straightforward: Make sparc64 stop manually invoking the | ||
23 | softirq handlers. | ||
24 | |||
25 | Reported-by: Meelis Roos <mroos@linux.ee> | ||
26 | Suggested-by: David Miller <davem@davemloft.net> | ||
27 | Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> | ||
28 | Tested-by: Meelis Roos <mroos@linux.ee> | ||
29 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | arch/sparc/kernel/rtrap_64.S | 7 ------- | ||
33 | 1 file changed, 7 deletions(-) | ||
34 | |||
35 | diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S | ||
36 | index 77f1b95..9171fc2 100644 | ||
37 | --- a/arch/sparc/kernel/rtrap_64.S | ||
38 | +++ b/arch/sparc/kernel/rtrap_64.S | ||
39 | @@ -20,11 +20,6 @@ | ||
40 | |||
41 | .text | ||
42 | .align 32 | ||
43 | -__handle_softirq: | ||
44 | - call do_softirq | ||
45 | - nop | ||
46 | - ba,a,pt %xcc, __handle_softirq_continue | ||
47 | - nop | ||
48 | __handle_preemption: | ||
49 | call schedule | ||
50 | wrpr %g0, RTRAP_PSTATE, %pstate | ||
51 | @@ -89,9 +84,7 @@ rtrap: | ||
52 | cmp %l1, 0 | ||
53 | |||
54 | /* mm/ultra.S:xcall_report_regs KNOWS about this load. */ | ||
55 | - bne,pn %icc, __handle_softirq | ||
56 | ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 | ||
57 | -__handle_softirq_continue: | ||
58 | rtrap_xcall: | ||
59 | sethi %hi(0xf << 20), %l4 | ||
60 | and %l1, %l4, %l4 | ||
61 | -- | ||
62 | 1.7.9.5 | ||
63 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0020-sparc64-Fix-bootup-crash-on-sun4v.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0020-sparc64-Fix-bootup-crash-on-sun4v.patch new file mode 100644 index 00000000..9aa5993e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0020-sparc64-Fix-bootup-crash-on-sun4v.patch | |||
@@ -0,0 +1,33 @@ | |||
1 | From 19e418644c8801bf98b7c058825bd632f2a92f1f Mon Sep 17 00:00:00 2001 | ||
2 | From: "David S. Miller" <davem@davemloft.net> | ||
3 | Date: Fri, 13 Apr 2012 11:56:22 -0700 | ||
4 | Subject: [PATCH 20/69] sparc64: Fix bootup crash on sun4v. | ||
5 | |||
6 | commit 9e0daff30fd7ecf698e5d20b0fa7f851e427cca5 upstream. | ||
7 | |||
8 | The DS driver registers as a subsys_initcall() but this can be too | ||
9 | early, in particular this risks registering before we've had a chance | ||
10 | to allocate and setup module_kset in kernel/params.c which is | ||
11 | performed also as a subsyts_initcall(). | ||
12 | |||
13 | Register DS using device_initcall() insteal. | ||
14 | |||
15 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | arch/sparc/kernel/ds.c | 2 +- | ||
19 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
20 | |||
21 | diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c | ||
22 | index 381edcd..27728e1 100644 | ||
23 | --- a/arch/sparc/kernel/ds.c | ||
24 | +++ b/arch/sparc/kernel/ds.c | ||
25 | @@ -1267,4 +1267,4 @@ static int __init ds_init(void) | ||
26 | return vio_register_driver(&ds_driver); | ||
27 | } | ||
28 | |||
29 | -subsys_initcall(ds_init); | ||
30 | +fs_initcall(ds_init); | ||
31 | -- | ||
32 | 1.7.9.5 | ||
33 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0021-cciss-Initialize-scsi-host-max_sectors-for-tape-driv.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0021-cciss-Initialize-scsi-host-max_sectors-for-tape-driv.patch new file mode 100644 index 00000000..3291bc53 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0021-cciss-Initialize-scsi-host-max_sectors-for-tape-driv.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From c8b1bb9d2383126d121f36795771ca734bc73003 Mon Sep 17 00:00:00 2001 | ||
2 | From: "Stephen M. Cameron" <scameron@beardog.cce.hp.com> | ||
3 | Date: Thu, 22 Mar 2012 21:40:08 +0100 | ||
4 | Subject: [PATCH 21/69] cciss: Initialize scsi host max_sectors for tape drive | ||
5 | support | ||
6 | |||
7 | commit 395d287526bb60411ff37b19ad9dd38b58ba8732 upstream. | ||
8 | |||
9 | The default is too small (1024 blocks), use h->cciss_max_sectors (8192 blocks) | ||
10 | Without this change, if you try to set the block size of a tape drive above | ||
11 | 512*1024, via "mt -f /dev/st0 setblk nnn" where nnn is greater than 524288, | ||
12 | it won't work right. | ||
13 | |||
14 | Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> | ||
15 | Signed-off-by: Jens Axboe <axboe@kernel.dk> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/block/cciss_scsi.c | 1 + | ||
19 | 1 file changed, 1 insertion(+) | ||
20 | |||
21 | diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c | ||
22 | index e820b68..f510a9c 100644 | ||
23 | --- a/drivers/block/cciss_scsi.c | ||
24 | +++ b/drivers/block/cciss_scsi.c | ||
25 | @@ -866,6 +866,7 @@ cciss_scsi_detect(ctlr_info_t *h) | ||
26 | sh->can_queue = cciss_tape_cmds; | ||
27 | sh->sg_tablesize = h->maxsgentries; | ||
28 | sh->max_cmd_len = MAX_COMMAND_SIZE; | ||
29 | + sh->max_sectors = h->cciss_max_sectors; | ||
30 | |||
31 | ((struct cciss_scsi_adapter_data_t *) | ||
32 | h->scsi_ctlr)->scsi_host = sh; | ||
33 | -- | ||
34 | 1.7.9.5 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0022-cciss-Fix-scsi-tape-io-with-more-than-255-scatter-ga.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0022-cciss-Fix-scsi-tape-io-with-more-than-255-scatter-ga.patch new file mode 100644 index 00000000..df9a8fea --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0022-cciss-Fix-scsi-tape-io-with-more-than-255-scatter-ga.patch | |||
@@ -0,0 +1,38 @@ | |||
1 | From 80461d138d8963f19b97fda7126455f12ba70bc8 Mon Sep 17 00:00:00 2001 | ||
2 | From: "Stephen M. Cameron" <scameron@beardog.cce.hp.com> | ||
3 | Date: Thu, 22 Mar 2012 21:40:09 +0100 | ||
4 | Subject: [PATCH 22/69] cciss: Fix scsi tape io with more than 255 scatter | ||
5 | gather elements | ||
6 | |||
7 | commit bc67f63650fad6b3478d9ddfd5406d45a95987c9 upstream. | ||
8 | |||
9 | The total number of scatter gather elements in the CISS command | ||
10 | used by the scsi tape code was being cast to a u8, which can hold | ||
11 | at most 255 scatter gather elements. It should have been cast to | ||
12 | a u16. Without this patch the command gets rejected by the controller | ||
13 | since the total scatter gather count did not add up to the right | ||
14 | value resulting in an i/o error. | ||
15 | |||
16 | Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> | ||
17 | Signed-off-by: Jens Axboe <axboe@kernel.dk> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/block/cciss_scsi.c | 2 +- | ||
21 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
22 | |||
23 | diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c | ||
24 | index f510a9c..acda773 100644 | ||
25 | --- a/drivers/block/cciss_scsi.c | ||
26 | +++ b/drivers/block/cciss_scsi.c | ||
27 | @@ -1411,7 +1411,7 @@ static void cciss_scatter_gather(ctlr_info_t *h, CommandList_struct *c, | ||
28 | /* track how many SG entries we are using */ | ||
29 | if (request_nsgs > h->maxSG) | ||
30 | h->maxSG = request_nsgs; | ||
31 | - c->Header.SGTotal = (__u8) request_nsgs + chained; | ||
32 | + c->Header.SGTotal = (u16) request_nsgs + chained; | ||
33 | if (request_nsgs > h->max_cmd_sgentries) | ||
34 | c->Header.SGList = h->max_cmd_sgentries; | ||
35 | else | ||
36 | -- | ||
37 | 1.7.9.5 | ||
38 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0023-perf-hists-Catch-and-handle-out-of-date-hist-entry-m.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0023-perf-hists-Catch-and-handle-out-of-date-hist-entry-m.patch new file mode 100644 index 00000000..42495dd2 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0023-perf-hists-Catch-and-handle-out-of-date-hist-entry-m.patch | |||
@@ -0,0 +1,59 @@ | |||
1 | From 49bb9ef1ae7951ed1a193e4473cb617d7a89fbdb Mon Sep 17 00:00:00 2001 | ||
2 | From: David Miller <davem@davemloft.net> | ||
3 | Date: Tue, 27 Mar 2012 03:14:18 -0400 | ||
4 | Subject: [PATCH 23/69] perf hists: Catch and handle out-of-date hist entry | ||
5 | maps. | ||
6 | |||
7 | commit 63fa471dd49e9c9ce029d910d1024330d9b1b145 upstream. | ||
8 | |||
9 | When a process exec()'s, all the maps are retired, but we keep the hist | ||
10 | entries around which hold references to those outdated maps. | ||
11 | |||
12 | If the same library gets mapped in for which we have hist entries, a new | ||
13 | map will be created. But when we take a perf entry hit within that map, | ||
14 | we'll find the existing hist entry with the older map. | ||
15 | |||
16 | This causes symbol translations to be done incorrectly. For example, | ||
17 | the perf entry processing will lookup the correct uptodate map entry and | ||
18 | use that to calculate the symbol and DSO relative address. But later | ||
19 | when we update the histogram we'll translate the address using the | ||
20 | outdated map file instead leading to conditions such as out-of-range | ||
21 | offsets in symbol__inc_addr_samples(). | ||
22 | |||
23 | Therefore, update the map of the hist_entry dynamically at lookup/ | ||
24 | creation time. | ||
25 | |||
26 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
27 | Link: http://lkml.kernel.org/r/20120327.031418.1220315351537060808.davem@davemloft.net | ||
28 | Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> | ||
29 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
30 | --- | ||
31 | tools/perf/util/hist.c | 12 ++++++++++++ | ||
32 | 1 file changed, 12 insertions(+) | ||
33 | |||
34 | diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c | ||
35 | index 216e33a..adb372d 100644 | ||
36 | --- a/tools/perf/util/hist.c | ||
37 | +++ b/tools/perf/util/hist.c | ||
38 | @@ -230,6 +230,18 @@ struct hist_entry *__hists__add_entry(struct hists *hists, | ||
39 | if (!cmp) { | ||
40 | he->period += period; | ||
41 | ++he->nr_events; | ||
42 | + | ||
43 | + /* If the map of an existing hist_entry has | ||
44 | + * become out-of-date due to an exec() or | ||
45 | + * similar, update it. Otherwise we will | ||
46 | + * mis-adjust symbol addresses when computing | ||
47 | + * the history counter to increment. | ||
48 | + */ | ||
49 | + if (he->ms.map != entry->ms.map) { | ||
50 | + he->ms.map = entry->ms.map; | ||
51 | + if (he->ms.map) | ||
52 | + he->ms.map->referenced = true; | ||
53 | + } | ||
54 | goto out; | ||
55 | } | ||
56 | |||
57 | -- | ||
58 | 1.7.9.5 | ||
59 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0024-video-uvesafb-Fix-oops-that-uvesafb-try-to-execute-N.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0024-video-uvesafb-Fix-oops-that-uvesafb-try-to-execute-N.patch new file mode 100644 index 00000000..bfe3ac54 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0024-video-uvesafb-Fix-oops-that-uvesafb-try-to-execute-N.patch | |||
@@ -0,0 +1,118 @@ | |||
1 | From c89ee4a69b7ed875adac55c2929903acc5001d3b Mon Sep 17 00:00:00 2001 | ||
2 | From: Wang YanQing <udknight@gmail.com> | ||
3 | Date: Sun, 1 Apr 2012 08:54:02 +0800 | ||
4 | Subject: [PATCH 24/69] video:uvesafb: Fix oops that uvesafb try to execute | ||
5 | NX-protected page | ||
6 | |||
7 | commit b78f29ca0516266431688c5eb42d39ce42ec039a upstream. | ||
8 | |||
9 | This patch fix the oops below that catched in my machine | ||
10 | |||
11 | [ 81.560602] uvesafb: NVIDIA Corporation, GT216 Board - 0696a290, Chip Rev , OEM: NVIDIA, VBE v3.0 | ||
12 | [ 81.609384] uvesafb: protected mode interface info at c000:d350 | ||
13 | [ 81.609388] uvesafb: pmi: set display start = c00cd3b3, set palette = c00cd40e | ||
14 | [ 81.609390] uvesafb: pmi: ports = 3b4 3b5 3ba 3c0 3c1 3c4 3c5 3c6 3c7 3c8 3c9 3cc 3ce 3cf 3d0 3d1 3d2 3d3 3d4 3d5 3da | ||
15 | [ 81.614558] uvesafb: VBIOS/hardware doesn't support DDC transfers | ||
16 | [ 81.614562] uvesafb: no monitor limits have been set, default refresh rate will be used | ||
17 | [ 81.614994] uvesafb: scrolling: ypan using protected mode interface, yres_virtual=4915 | ||
18 | [ 81.744147] kernel tried to execute NX-protected page - exploit attempt? (uid: 0) | ||
19 | [ 81.744153] BUG: unable to handle kernel paging request at c00cd3b3 | ||
20 | [ 81.744159] IP: [<c00cd3b3>] 0xc00cd3b2 | ||
21 | [ 81.744167] *pdpt = 00000000016d6001 *pde = 0000000001c7b067 *pte = 80000000000cd163 | ||
22 | [ 81.744171] Oops: 0011 [#1] SMP | ||
23 | [ 81.744174] Modules linked in: uvesafb(+) cfbcopyarea cfbimgblt cfbfillrect | ||
24 | [ 81.744178] | ||
25 | [ 81.744181] Pid: 3497, comm: modprobe Not tainted 3.3.0-rc4NX+ #71 Acer Aspire 4741 /Aspire 4741 | ||
26 | [ 81.744185] EIP: 0060:[<c00cd3b3>] EFLAGS: 00010246 CPU: 0 | ||
27 | [ 81.744187] EIP is at 0xc00cd3b3 | ||
28 | [ 81.744189] EAX: 00004f07 EBX: 00000000 ECX: 00000000 EDX: 00000000 | ||
29 | [ 81.744191] ESI: f763f000 EDI: f763f6e8 EBP: f57f3a0c ESP: f57f3a00 | ||
30 | [ 81.744192] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 | ||
31 | [ 81.744195] Process modprobe (pid: 3497, ti=f57f2000 task=f748c600 task.ti=f57f2000) | ||
32 | [ 81.744196] Stack: | ||
33 | [ 81.744197] f82512c5 f759341c 00000000 f57f3a30 c124a9bc 00000001 00000001 000001e0 | ||
34 | [ 81.744202] f8251280 f763f000 f7593400 00000000 f57f3a40 c12598dd f5c0c000 00000000 | ||
35 | [ 81.744206] f57f3b10 c1255efe c125a21a 00000006 f763f09c 00000000 c1c6cb60 f7593400 | ||
36 | [ 81.744210] Call Trace: | ||
37 | [ 81.744215] [<f82512c5>] ? uvesafb_pan_display+0x45/0x60 [uvesafb] | ||
38 | [ 81.744222] [<c124a9bc>] fb_pan_display+0x10c/0x160 | ||
39 | [ 81.744226] [<f8251280>] ? uvesafb_vbe_find_mode+0x180/0x180 [uvesafb] | ||
40 | [ 81.744230] [<c12598dd>] bit_update_start+0x1d/0x50 | ||
41 | [ 81.744232] [<c1255efe>] fbcon_switch+0x39e/0x550 | ||
42 | [ 81.744235] [<c125a21a>] ? bit_cursor+0x4ea/0x560 | ||
43 | [ 81.744240] [<c129b6cb>] redraw_screen+0x12b/0x220 | ||
44 | [ 81.744245] [<c128843b>] ? tty_do_resize+0x3b/0xc0 | ||
45 | [ 81.744247] [<c129ef42>] vc_do_resize+0x3d2/0x3e0 | ||
46 | [ 81.744250] [<c129efb4>] vc_resize+0x14/0x20 | ||
47 | [ 81.744253] [<c12586bd>] fbcon_init+0x29d/0x500 | ||
48 | [ 81.744255] [<c12984c4>] ? set_inverse_trans_unicode+0xe4/0x110 | ||
49 | [ 81.744258] [<c129b378>] visual_init+0xb8/0x150 | ||
50 | [ 81.744261] [<c129c16c>] bind_con_driver+0x16c/0x360 | ||
51 | [ 81.744264] [<c129b47e>] ? register_con_driver+0x6e/0x190 | ||
52 | [ 81.744267] [<c129c3a1>] take_over_console+0x41/0x50 | ||
53 | [ 81.744269] [<c1257b7a>] fbcon_takeover+0x6a/0xd0 | ||
54 | [ 81.744272] [<c12594b8>] fbcon_event_notify+0x758/0x790 | ||
55 | [ 81.744277] [<c10929e2>] notifier_call_chain+0x42/0xb0 | ||
56 | [ 81.744280] [<c1092d30>] __blocking_notifier_call_chain+0x60/0x90 | ||
57 | [ 81.744283] [<c1092d7a>] blocking_notifier_call_chain+0x1a/0x20 | ||
58 | [ 81.744285] [<c124a5a1>] fb_notifier_call_chain+0x11/0x20 | ||
59 | [ 81.744288] [<c124b759>] register_framebuffer+0x1d9/0x2b0 | ||
60 | [ 81.744293] [<c1061c73>] ? ioremap_wc+0x33/0x40 | ||
61 | [ 81.744298] [<f82537c6>] uvesafb_probe+0xaba/0xc40 [uvesafb] | ||
62 | [ 81.744302] [<c12bb81f>] platform_drv_probe+0xf/0x20 | ||
63 | [ 81.744306] [<c12ba558>] driver_probe_device+0x68/0x170 | ||
64 | [ 81.744309] [<c12ba731>] __device_attach+0x41/0x50 | ||
65 | [ 81.744313] [<c12b9088>] bus_for_each_drv+0x48/0x70 | ||
66 | [ 81.744316] [<c12ba7f3>] device_attach+0x83/0xa0 | ||
67 | [ 81.744319] [<c12ba6f0>] ? __driver_attach+0x90/0x90 | ||
68 | [ 81.744321] [<c12b991f>] bus_probe_device+0x6f/0x90 | ||
69 | [ 81.744324] [<c12b8a45>] device_add+0x5e5/0x680 | ||
70 | [ 81.744329] [<c122a1a3>] ? kvasprintf+0x43/0x60 | ||
71 | [ 81.744332] [<c121e6e4>] ? kobject_set_name_vargs+0x64/0x70 | ||
72 | [ 81.744335] [<c121e6e4>] ? kobject_set_name_vargs+0x64/0x70 | ||
73 | [ 81.744339] [<c12bbe9f>] platform_device_add+0xff/0x1b0 | ||
74 | [ 81.744343] [<f8252906>] uvesafb_init+0x50/0x9b [uvesafb] | ||
75 | [ 81.744346] [<c100111f>] do_one_initcall+0x2f/0x170 | ||
76 | [ 81.744350] [<f82528b6>] ? uvesafb_is_valid_mode+0x66/0x66 [uvesafb] | ||
77 | [ 81.744355] [<c10c6994>] sys_init_module+0xf4/0x1410 | ||
78 | [ 81.744359] [<c1157fc0>] ? vfsmount_lock_local_unlock_cpu+0x30/0x30 | ||
79 | [ 81.744363] [<c144cb10>] sysenter_do_call+0x12/0x36 | ||
80 | [ 81.744365] Code: f5 00 00 00 32 f6 66 8b da 66 d1 e3 66 ba d4 03 8a e3 b0 1c 66 ef b0 1e 66 ef 8a e7 b0 1d 66 ef b0 1f 66 ef e8 fa 00 00 00 61 c3 <60> e8 c8 00 00 00 66 8b f3 66 8b da 66 ba d4 03 b0 0c 8a e5 66 | ||
81 | [ 81.744388] EIP: [<c00cd3b3>] 0xc00cd3b3 SS:ESP 0068:f57f3a00 | ||
82 | [ 81.744391] CR2: 00000000c00cd3b3 | ||
83 | [ 81.744393] ---[ end trace 18b2c87c925b54d6 ]--- | ||
84 | |||
85 | Signed-off-by: Wang YanQing <udknight@gmail.com> | ||
86 | Cc: Michal Januszewski <spock@gentoo.org> | ||
87 | Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> | ||
88 | Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | ||
89 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
90 | --- | ||
91 | drivers/video/uvesafb.c | 11 +++++++++-- | ||
92 | 1 file changed, 9 insertions(+), 2 deletions(-) | ||
93 | |||
94 | diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c | ||
95 | index 7f8472c..8813588 100644 | ||
96 | --- a/drivers/video/uvesafb.c | ||
97 | +++ b/drivers/video/uvesafb.c | ||
98 | @@ -815,8 +815,15 @@ static int __devinit uvesafb_vbe_init(struct fb_info *info) | ||
99 | par->pmi_setpal = pmi_setpal; | ||
100 | par->ypan = ypan; | ||
101 | |||
102 | - if (par->pmi_setpal || par->ypan) | ||
103 | - uvesafb_vbe_getpmi(task, par); | ||
104 | + if (par->pmi_setpal || par->ypan) { | ||
105 | + if (__supported_pte_mask & _PAGE_NX) { | ||
106 | + par->pmi_setpal = par->ypan = 0; | ||
107 | + printk(KERN_WARNING "uvesafb: NX protection is actively." | ||
108 | + "We have better not to use the PMI.\n"); | ||
109 | + } else { | ||
110 | + uvesafb_vbe_getpmi(task, par); | ||
111 | + } | ||
112 | + } | ||
113 | #else | ||
114 | /* The protected mode interface is not available on non-x86. */ | ||
115 | par->pmi_setpal = par->ypan = 0; | ||
116 | -- | ||
117 | 1.7.9.5 | ||
118 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0025-nohz-Fix-stale-jiffies-update-in-tick_nohz_restart.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0025-nohz-Fix-stale-jiffies-update-in-tick_nohz_restart.patch new file mode 100644 index 00000000..1d5dcca6 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0025-nohz-Fix-stale-jiffies-update-in-tick_nohz_restart.patch | |||
@@ -0,0 +1,53 @@ | |||
1 | From dd19a09c7530975d86328c8eaf082626dd1d4fe1 Mon Sep 17 00:00:00 2001 | ||
2 | From: Neal Cardwell <ncardwell@google.com> | ||
3 | Date: Tue, 27 Mar 2012 15:09:37 -0400 | ||
4 | Subject: [PATCH 25/69] nohz: Fix stale jiffies update in tick_nohz_restart() | ||
5 | |||
6 | commit 6f103929f8979d2638e58d7f7fda0beefcb8ee7e upstream. | ||
7 | |||
8 | Fix tick_nohz_restart() to not use a stale ktime_t "now" value when | ||
9 | calling tick_do_update_jiffies64(now). | ||
10 | |||
11 | If we reach this point in the loop it means that we crossed a tick | ||
12 | boundary since we grabbed the "now" timestamp, so at this point "now" | ||
13 | refers to a time in the old jiffy, so using the old value for "now" is | ||
14 | incorrect, and is likely to give us a stale jiffies value. | ||
15 | |||
16 | In particular, the first time through the loop the | ||
17 | tick_do_update_jiffies64(now) call is always a no-op, since the | ||
18 | caller, tick_nohz_restart_sched_tick(), will have already called | ||
19 | tick_do_update_jiffies64(now) with that "now" value. | ||
20 | |||
21 | Note that tick_nohz_stop_sched_tick() already uses the correct | ||
22 | approach: when we notice we cross a jiffy boundary, grab a new | ||
23 | timestamp with ktime_get(), and *then* update jiffies. | ||
24 | |||
25 | Signed-off-by: Neal Cardwell <ncardwell@google.com> | ||
26 | Cc: Ben Segall <bsegall@google.com> | ||
27 | Cc: Ingo Molnar <mingo@elte.hu> | ||
28 | Link: http://lkml.kernel.org/r/1332875377-23014-1-git-send-email-ncardwell@google.com | ||
29 | Signed-off-by: Thomas Gleixner <tglx@linutronix.de> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | kernel/time/tick-sched.c | 4 ++-- | ||
33 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
34 | |||
35 | diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c | ||
36 | index 4042064..c923640 100644 | ||
37 | --- a/kernel/time/tick-sched.c | ||
38 | +++ b/kernel/time/tick-sched.c | ||
39 | @@ -508,9 +508,9 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now) | ||
40 | hrtimer_get_expires(&ts->sched_timer), 0)) | ||
41 | break; | ||
42 | } | ||
43 | - /* Update jiffies and reread time */ | ||
44 | - tick_do_update_jiffies64(now); | ||
45 | + /* Reread time and update jiffies */ | ||
46 | now = ktime_get(); | ||
47 | + tick_do_update_jiffies64(now); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | -- | ||
52 | 1.7.9.5 | ||
53 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0026-pch_uart-Fix-MSI-setting-issue.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0026-pch_uart-Fix-MSI-setting-issue.patch new file mode 100644 index 00000000..3792b6fd --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0026-pch_uart-Fix-MSI-setting-issue.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From 701cb5c2dbbe57b09a0585ea3a983540a29106c6 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Mon, 2 Apr 2012 14:36:22 +0900 | ||
4 | Subject: [PATCH 26/69] pch_uart: Fix MSI setting issue | ||
5 | |||
6 | commit 867c902e07d5677e2a5b54c0435e589513abde48 upstream. | ||
7 | |||
8 | The following patch (MSI setting) is not enough. | ||
9 | |||
10 | commit e463595fd9c752fa4bf06b47df93ef9ade3c7cf0 | ||
11 | Author: Alexander Stein <alexander.stein@systec-electronic.com> | ||
12 | Date: Mon Jul 4 08:58:31 2011 +0200 | ||
13 | |||
14 | pch_uart: Add MSI support | ||
15 | |||
16 | Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | ||
18 | |||
19 | To enable MSI mode, PCI bus-mastering must be enabled. | ||
20 | This patch enables the setting. | ||
21 | |||
22 | cc: Alexander Stein <alexander.stein@systec-electronic.com> | ||
23 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/tty/serial/pch_uart.c | 1 + | ||
27 | 1 file changed, 1 insertion(+) | ||
28 | |||
29 | diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c | ||
30 | index d6aba8c..da776a0 100644 | ||
31 | --- a/drivers/tty/serial/pch_uart.c | ||
32 | +++ b/drivers/tty/serial/pch_uart.c | ||
33 | @@ -1438,6 +1438,7 @@ static struct eg20t_port *pch_uart_init_port(struct pci_dev *pdev, | ||
34 | } | ||
35 | |||
36 | pci_enable_msi(pdev); | ||
37 | + pci_set_master(pdev); | ||
38 | |||
39 | iobase = pci_resource_start(pdev, 0); | ||
40 | mapbase = pci_resource_start(pdev, 1); | ||
41 | -- | ||
42 | 1.7.9.5 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0027-USB-serial-fix-race-between-probe-and-open.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0027-USB-serial-fix-race-between-probe-and-open.patch new file mode 100644 index 00000000..53ef3987 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0027-USB-serial-fix-race-between-probe-and-open.patch | |||
@@ -0,0 +1,97 @@ | |||
1 | From fe3ac85bc01bebcbfd24255f567c18d0d609661b Mon Sep 17 00:00:00 2001 | ||
2 | From: Johan Hovold <jhovold@gmail.com> | ||
3 | Date: Tue, 20 Mar 2012 16:59:33 +0100 | ||
4 | Subject: [PATCH 27/69] USB: serial: fix race between probe and open | ||
5 | |||
6 | commit a65a6f14dc24a90bde3f5d0073ba2364476200bf upstream. | ||
7 | |||
8 | Fix race between probe and open by making sure that the disconnected | ||
9 | flag is not cleared until all ports have been registered. | ||
10 | |||
11 | A call to tty_open while probe is running may get a reference to the | ||
12 | serial structure in serial_install before its ports have been | ||
13 | registered. This may lead to usb_serial_core calling driver open before | ||
14 | port is fully initialised. | ||
15 | |||
16 | With ftdi_sio this result in the following NULL-pointer dereference as | ||
17 | the private data has not been initialised at open: | ||
18 | |||
19 | [ 199.698286] IP: [<f811a089>] ftdi_open+0x59/0xe0 [ftdi_sio] | ||
20 | [ 199.698297] *pde = 00000000 | ||
21 | [ 199.698303] Oops: 0000 [#1] PREEMPT SMP | ||
22 | [ 199.698313] Modules linked in: ftdi_sio usbserial | ||
23 | [ 199.698323] | ||
24 | [ 199.698327] Pid: 1146, comm: ftdi_open Not tainted 3.2.11 #70 Dell Inc. Vostro 1520/0T816J | ||
25 | [ 199.698339] EIP: 0060:[<f811a089>] EFLAGS: 00010286 CPU: 0 | ||
26 | [ 199.698344] EIP is at ftdi_open+0x59/0xe0 [ftdi_sio] | ||
27 | [ 199.698348] EAX: 0000003e EBX: f5067000 ECX: 00000000 EDX: 80000600 | ||
28 | [ 199.698352] ESI: f48d8800 EDI: 00000001 EBP: f515dd54 ESP: f515dcfc | ||
29 | [ 199.698356] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 | ||
30 | [ 199.698361] Process ftdi_open (pid: 1146, ti=f515c000 task=f481e040 task.ti=f515c000) | ||
31 | [ 199.698364] Stack: | ||
32 | [ 199.698368] f811a9fe f811a9e0 f811b3ef 00000000 00000000 00001388 00000000 f4a86800 | ||
33 | [ 199.698387] 00000002 00000000 f806e68e 00000000 f532765c f481e040 00000246 22222222 | ||
34 | [ 199.698479] 22222222 22222222 22222222 f5067004 f5327600 f5327638 f515dd74 f806e6ab | ||
35 | [ 199.698496] Call Trace: | ||
36 | [ 199.698504] [<f806e68e>] ? serial_activate+0x2e/0x70 [usbserial] | ||
37 | [ 199.698511] [<f806e6ab>] serial_activate+0x4b/0x70 [usbserial] | ||
38 | [ 199.698521] [<c126380c>] tty_port_open+0x7c/0xd0 | ||
39 | [ 199.698527] [<f806e660>] ? serial_set_termios+0xa0/0xa0 [usbserial] | ||
40 | [ 199.698534] [<f806e76f>] serial_open+0x2f/0x70 [usbserial] | ||
41 | [ 199.698540] [<c125d07c>] tty_open+0x20c/0x510 | ||
42 | [ 199.698546] [<c10e9eb7>] chrdev_open+0xe7/0x230 | ||
43 | [ 199.698553] [<c10e48f2>] __dentry_open+0x1f2/0x390 | ||
44 | [ 199.698559] [<c144bfec>] ? _raw_spin_unlock+0x2c/0x50 | ||
45 | [ 199.698565] [<c10e4b76>] nameidata_to_filp+0x66/0x80 | ||
46 | [ 199.698570] [<c10e9dd0>] ? cdev_put+0x20/0x20 | ||
47 | [ 199.698576] [<c10f3e08>] do_last+0x198/0x730 | ||
48 | [ 199.698581] [<c10f4440>] path_openat+0xa0/0x350 | ||
49 | [ 199.698587] [<c10f47d5>] do_filp_open+0x35/0x80 | ||
50 | [ 199.698593] [<c144bfec>] ? _raw_spin_unlock+0x2c/0x50 | ||
51 | [ 199.698599] [<c10ff110>] ? alloc_fd+0xc0/0x100 | ||
52 | [ 199.698605] [<c10f0b72>] ? getname_flags+0x72/0x120 | ||
53 | [ 199.698611] [<c10e4450>] do_sys_open+0xf0/0x1c0 | ||
54 | [ 199.698617] [<c11fcc08>] ? trace_hardirqs_on_thunk+0xc/0x10 | ||
55 | [ 199.698623] [<c10e458e>] sys_open+0x2e/0x40 | ||
56 | [ 199.698628] [<c144c990>] sysenter_do_call+0x12/0x36 | ||
57 | [ 199.698632] Code: 85 89 00 00 00 8b 16 8b 4d c0 c1 e2 08 c7 44 24 14 88 13 00 00 81 ca 00 00 00 80 c7 44 24 10 00 00 00 00 c7 44 24 0c 00 00 00 00 <0f> b7 41 78 31 c9 89 44 24 08 c7 44 24 04 00 00 00 00 c7 04 24 | ||
58 | [ 199.698884] EIP: [<f811a089>] ftdi_open+0x59/0xe0 [ftdi_sio] SS:ESP 0068:f515dcfc | ||
59 | [ 199.698893] CR2: 0000000000000078 | ||
60 | [ 199.698925] ---[ end trace 77c43ec023940cff ]--- | ||
61 | |||
62 | Reported-and-tested-by: Ken Huang <csuhgw@gmail.com> | ||
63 | Signed-off-by: Johan Hovold <jhovold@gmail.com> | ||
64 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
65 | --- | ||
66 | drivers/usb/serial/usb-serial.c | 8 ++++++++ | ||
67 | 1 file changed, 8 insertions(+) | ||
68 | |||
69 | diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c | ||
70 | index cc274fd..38d7ebd 100644 | ||
71 | --- a/drivers/usb/serial/usb-serial.c | ||
72 | +++ b/drivers/usb/serial/usb-serial.c | ||
73 | @@ -1059,6 +1059,12 @@ int usb_serial_probe(struct usb_interface *interface, | ||
74 | serial->attached = 1; | ||
75 | } | ||
76 | |||
77 | + /* Avoid race with tty_open and serial_install by setting the | ||
78 | + * disconnected flag and not clearing it until all ports have been | ||
79 | + * registered. | ||
80 | + */ | ||
81 | + serial->disconnected = 1; | ||
82 | + | ||
83 | if (get_free_serial(serial, num_ports, &minor) == NULL) { | ||
84 | dev_err(&interface->dev, "No more free serial devices\n"); | ||
85 | goto probe_error; | ||
86 | @@ -1083,6 +1089,8 @@ int usb_serial_probe(struct usb_interface *interface, | ||
87 | } | ||
88 | } | ||
89 | |||
90 | + serial->disconnected = 0; | ||
91 | + | ||
92 | usb_serial_console_init(debug, minor); | ||
93 | |||
94 | exit: | ||
95 | -- | ||
96 | 1.7.9.5 | ||
97 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0028-USB-pl2303-fix-DTR-RTS-being-raised-on-baud-rate-cha.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0028-USB-pl2303-fix-DTR-RTS-being-raised-on-baud-rate-cha.patch new file mode 100644 index 00000000..48e31f13 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0028-USB-pl2303-fix-DTR-RTS-being-raised-on-baud-rate-cha.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From fa3bc47f28470076336a7f3cfedcf67837224a71 Mon Sep 17 00:00:00 2001 | ||
2 | From: Johan Hovold <jhovold@gmail.com> | ||
3 | Date: Fri, 23 Mar 2012 15:23:18 +0100 | ||
4 | Subject: [PATCH 28/69] USB: pl2303: fix DTR/RTS being raised on baud rate | ||
5 | change | ||
6 | MIME-Version: 1.0 | ||
7 | Content-Type: text/plain; charset=UTF-8 | ||
8 | Content-Transfer-Encoding: 8bit | ||
9 | |||
10 | commit ce5c9851855bab190c9a142761d54ba583ab094c upstream. | ||
11 | |||
12 | DTR/RTS should only be raised when changing baudrate from B0 and not on | ||
13 | any baud rate change (> B0). | ||
14 | |||
15 | Reported-by: Søren Holm <sgh@sgh.dk> | ||
16 | Signed-off-by: Johan Hovold <jhovold@gmail.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/usb/serial/pl2303.c | 2 +- | ||
20 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
21 | |||
22 | diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c | ||
23 | index fc2d66f..5532ea5 100644 | ||
24 | --- a/drivers/usb/serial/pl2303.c | ||
25 | +++ b/drivers/usb/serial/pl2303.c | ||
26 | @@ -421,7 +421,7 @@ static void pl2303_set_termios(struct tty_struct *tty, | ||
27 | control = priv->line_control; | ||
28 | if ((cflag & CBAUD) == B0) | ||
29 | priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS); | ||
30 | - else | ||
31 | + else if ((old_termios->c_cflag & CBAUD) == B0) | ||
32 | priv->line_control |= (CONTROL_DTR | CONTROL_RTS); | ||
33 | if (control != priv->line_control) { | ||
34 | control = priv->line_control; | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0029-USB-option-re-add-NOVATELWIRELESS_PRODUCT_HSPA_HIGHS.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0029-USB-option-re-add-NOVATELWIRELESS_PRODUCT_HSPA_HIGHS.patch new file mode 100644 index 00000000..17b3947a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0029-USB-option-re-add-NOVATELWIRELESS_PRODUCT_HSPA_HIGHS.patch | |||
@@ -0,0 +1,32 @@ | |||
1 | From 1b71d0901a340fb7f1acfa39053b5baa7d22b8e5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Santiago Garcia Mantinan <manty@debian.org> | ||
3 | Date: Mon, 19 Mar 2012 18:17:00 +0100 | ||
4 | Subject: [PATCH 29/69] USB: option: re-add | ||
5 | NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED to option_id | ||
6 | array | ||
7 | |||
8 | commit 9ac2feb22b5b821d81463bef92698ef7682a3145 upstream. | ||
9 | |||
10 | Re-add NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED to option_id array | ||
11 | |||
12 | Signed-off-by: Santiago Garcia Mantinan <manty@debian.org> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/usb/serial/option.c | 1 + | ||
16 | 1 file changed, 1 insertion(+) | ||
17 | |||
18 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
19 | index 54898c9..cbe3451 100644 | ||
20 | --- a/drivers/usb/serial/option.c | ||
21 | +++ b/drivers/usb/serial/option.c | ||
22 | @@ -708,6 +708,7 @@ static const struct usb_device_id option_ids[] = { | ||
23 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, | ||
24 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, | ||
25 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, | ||
26 | + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, | ||
27 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED3) }, | ||
28 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED4) }, | ||
29 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED5) }, | ||
30 | -- | ||
31 | 1.7.9.5 | ||
32 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0030-USB-ftdi_sio-fix-status-line-change-handling-for-TIO.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0030-USB-ftdi_sio-fix-status-line-change-handling-for-TIO.patch new file mode 100644 index 00000000..96810680 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0030-USB-ftdi_sio-fix-status-line-change-handling-for-TIO.patch | |||
@@ -0,0 +1,79 @@ | |||
1 | From f3a53ff9baee1e730f4332eccf3d5feb3245e7a9 Mon Sep 17 00:00:00 2001 | ||
2 | From: Simon Arlott <simon@fire.lp0.eu> | ||
3 | Date: Mon, 26 Mar 2012 21:19:40 +0100 | ||
4 | Subject: [PATCH 30/69] USB: ftdi_sio: fix status line change handling for | ||
5 | TIOCMIWAIT and TIOCGICOUNT | ||
6 | |||
7 | commit fca5430d48d53eaf103498c33fd0d1984b9f448b upstream. | ||
8 | |||
9 | Handling of TIOCMIWAIT was changed by commit 1d749f9afa657f6ee9336b2bc1fcd750a647d157 | ||
10 | USB: ftdi_sio.c: Use ftdi async_icount structure for TIOCMIWAIT, as in other drivers | ||
11 | |||
12 | FTDI_STATUS_B0_MASK does not indicate the changed modem status lines, | ||
13 | it indicates the value of the current modem status lines. An xor is | ||
14 | still required to determine which lines have changed. | ||
15 | |||
16 | The count was only being incremented if the line was high. The only | ||
17 | reason TIOCMIWAIT still worked was because the status packet is | ||
18 | repeated every 1ms, so the count was always changing. The wakeup | ||
19 | itself still ran based on the status lines changing. | ||
20 | |||
21 | This change fixes handling of updates to the modem status lines and | ||
22 | allows multiple processes to use TIOCMIWAIT concurrently. | ||
23 | |||
24 | Tested with two processes waiting on different status lines being | ||
25 | toggled independently. | ||
26 | |||
27 | Signed-off-by: Simon Arlott <simon@fire.lp0.eu> | ||
28 | Cc: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de> | ||
29 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
30 | --- | ||
31 | drivers/usb/serial/ftdi_sio.c | 24 +++++++++++++----------- | ||
32 | 1 file changed, 13 insertions(+), 11 deletions(-) | ||
33 | |||
34 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
35 | index f2c9ef7..cfc8e59 100644 | ||
36 | --- a/drivers/usb/serial/ftdi_sio.c | ||
37 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
38 | @@ -75,7 +75,7 @@ struct ftdi_private { | ||
39 | unsigned long last_dtr_rts; /* saved modem control outputs */ | ||
40 | struct async_icount icount; | ||
41 | wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ | ||
42 | - char prev_status, diff_status; /* Used for TIOCMIWAIT */ | ||
43 | + char prev_status; /* Used for TIOCMIWAIT */ | ||
44 | char transmit_empty; /* If transmitter is empty or not */ | ||
45 | struct usb_serial_port *port; | ||
46 | __u16 interface; /* FT2232C, FT2232H or FT4232H port interface | ||
47 | @@ -1979,17 +1979,19 @@ static int ftdi_process_packet(struct tty_struct *tty, | ||
48 | N.B. packet may be processed more than once, but differences | ||
49 | are only processed once. */ | ||
50 | status = packet[0] & FTDI_STATUS_B0_MASK; | ||
51 | - if (status & FTDI_RS0_CTS) | ||
52 | - priv->icount.cts++; | ||
53 | - if (status & FTDI_RS0_DSR) | ||
54 | - priv->icount.dsr++; | ||
55 | - if (status & FTDI_RS0_RI) | ||
56 | - priv->icount.rng++; | ||
57 | - if (status & FTDI_RS0_RLSD) | ||
58 | - priv->icount.dcd++; | ||
59 | if (status != priv->prev_status) { | ||
60 | - priv->diff_status |= status ^ priv->prev_status; | ||
61 | - wake_up_interruptible(&priv->delta_msr_wait); | ||
62 | + char diff_status = status ^ priv->prev_status; | ||
63 | + | ||
64 | + if (diff_status & FTDI_RS0_CTS) | ||
65 | + priv->icount.cts++; | ||
66 | + if (diff_status & FTDI_RS0_DSR) | ||
67 | + priv->icount.dsr++; | ||
68 | + if (diff_status & FTDI_RS0_RI) | ||
69 | + priv->icount.rng++; | ||
70 | + if (diff_status & FTDI_RS0_RLSD) | ||
71 | + priv->icount.dcd++; | ||
72 | + | ||
73 | + wake_up_interruptible_all(&priv->delta_msr_wait); | ||
74 | priv->prev_status = status; | ||
75 | } | ||
76 | |||
77 | -- | ||
78 | 1.7.9.5 | ||
79 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0031-USB-ftdi_sio-fix-race-condition-in-TIOCMIWAIT-and-ab.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0031-USB-ftdi_sio-fix-race-condition-in-TIOCMIWAIT-and-ab.patch new file mode 100644 index 00000000..189b5980 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0031-USB-ftdi_sio-fix-race-condition-in-TIOCMIWAIT-and-ab.patch | |||
@@ -0,0 +1,111 @@ | |||
1 | From 9290ee7d767163efb842c578e20c74164dddb350 Mon Sep 17 00:00:00 2001 | ||
2 | From: Simon Arlott <simon@fire.lp0.eu> | ||
3 | Date: Mon, 26 Mar 2012 23:27:59 +0100 | ||
4 | Subject: [PATCH 31/69] USB: ftdi_sio: fix race condition in TIOCMIWAIT, and | ||
5 | abort of TIOCMIWAIT when the device is removed | ||
6 | MIME-Version: 1.0 | ||
7 | Content-Type: text/plain; charset=UTF-8 | ||
8 | Content-Transfer-Encoding: 8bit | ||
9 | |||
10 | commit 876ae50d94b02f3f523aa451b45ec5fb9c25d221 upstream. | ||
11 | |||
12 | There are two issues here, one is that the device is generating | ||
13 | spurious very fast modem status line changes somewhere: | ||
14 | |||
15 | CTS becomes high then low 18µs later: | ||
16 | [121226.924373] ftdi_process_packet: prev rng=0 dsr=10 dcd=0 cts=6 | ||
17 | [121226.924378] ftdi_process_packet: status=10 prev=00 diff=10 | ||
18 | [121226.924382] ftdi_process_packet: now rng=0 dsr=10 dcd=0 cts=7 | ||
19 | (wake_up_interruptible is called) | ||
20 | [121226.924391] ftdi_process_packet: prev rng=0 dsr=10 dcd=0 cts=7 | ||
21 | [121226.924394] ftdi_process_packet: status=00 prev=10 diff=10 | ||
22 | [121226.924397] ftdi_process_packet: now rng=0 dsr=10 dcd=0 cts=8 | ||
23 | (wake_up_interruptible is called) | ||
24 | |||
25 | This wakes up the task in TIOCMIWAIT: | ||
26 | [121226.924405] ftdi_ioctl: 19451 rng=0->0 dsr=10->10 dcd=0->0 cts=6->8 | ||
27 | (wait from 20:51:46 returns and observes both changes) | ||
28 | |||
29 | Which then calls TIOCMIWAIT again: | ||
30 | 20:51:46.400239 ioctl(3, TIOCMIWAIT, 0x20) = 0 | ||
31 | 22:11:09.441818 ioctl(3, TIOCMGET, [TIOCM_DTR|TIOCM_RTS]) = 0 | ||
32 | 22:11:09.442812 ioctl(3, TIOCMIWAIT, 0x20) = -1 EIO (Input/output error) | ||
33 | (the second wake_up_interruptible takes effect and an I/O error occurs) | ||
34 | |||
35 | The other issue is that TIOCMIWAIT will wait forever (unless the task is | ||
36 | interrupted) if the device is removed. | ||
37 | |||
38 | This change removes the -EIO return that occurs if the counts don't | ||
39 | appear to have changed. Multiple counts may have been processed as | ||
40 | one or the waiting task may have started waiting after recording the | ||
41 | current count. | ||
42 | |||
43 | It adds a bool to indicate that the device has been removed so that | ||
44 | TIOCMIWAIT doesn't wait forever, and wakes up any tasks so that they can | ||
45 | return -EIO. | ||
46 | |||
47 | Signed-off-by: Simon Arlott <simon@fire.lp0.eu> | ||
48 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
49 | --- | ||
50 | drivers/usb/serial/ftdi_sio.c | 12 +++++++----- | ||
51 | 1 file changed, 7 insertions(+), 5 deletions(-) | ||
52 | |||
53 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
54 | index cfc8e59..c4cf3f3 100644 | ||
55 | --- a/drivers/usb/serial/ftdi_sio.c | ||
56 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
57 | @@ -76,6 +76,7 @@ struct ftdi_private { | ||
58 | struct async_icount icount; | ||
59 | wait_queue_head_t delta_msr_wait; /* Used for TIOCMIWAIT */ | ||
60 | char prev_status; /* Used for TIOCMIWAIT */ | ||
61 | + bool dev_gone; /* Used to abort TIOCMIWAIT */ | ||
62 | char transmit_empty; /* If transmitter is empty or not */ | ||
63 | struct usb_serial_port *port; | ||
64 | __u16 interface; /* FT2232C, FT2232H or FT4232H port interface | ||
65 | @@ -1679,6 +1680,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port) | ||
66 | init_waitqueue_head(&priv->delta_msr_wait); | ||
67 | |||
68 | priv->flags = ASYNC_LOW_LATENCY; | ||
69 | + priv->dev_gone = false; | ||
70 | |||
71 | if (quirk && quirk->port_probe) | ||
72 | quirk->port_probe(priv); | ||
73 | @@ -1836,6 +1838,9 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port) | ||
74 | |||
75 | dbg("%s", __func__); | ||
76 | |||
77 | + priv->dev_gone = true; | ||
78 | + wake_up_interruptible_all(&priv->delta_msr_wait); | ||
79 | + | ||
80 | remove_sysfs_attrs(port); | ||
81 | |||
82 | kref_put(&priv->kref, ftdi_sio_priv_release); | ||
83 | @@ -2390,15 +2395,12 @@ static int ftdi_ioctl(struct tty_struct *tty, | ||
84 | */ | ||
85 | case TIOCMIWAIT: | ||
86 | cprev = priv->icount; | ||
87 | - while (1) { | ||
88 | + while (!priv->dev_gone) { | ||
89 | interruptible_sleep_on(&priv->delta_msr_wait); | ||
90 | /* see if a signal did it */ | ||
91 | if (signal_pending(current)) | ||
92 | return -ERESTARTSYS; | ||
93 | cnow = priv->icount; | ||
94 | - if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && | ||
95 | - cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) | ||
96 | - return -EIO; /* no change => error */ | ||
97 | if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) || | ||
98 | ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) || | ||
99 | ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) || | ||
100 | @@ -2407,7 +2409,7 @@ static int ftdi_ioctl(struct tty_struct *tty, | ||
101 | } | ||
102 | cprev = cnow; | ||
103 | } | ||
104 | - /* not reached */ | ||
105 | + return -EIO; | ||
106 | break; | ||
107 | case TIOCSERGETLSR: | ||
108 | return get_lsr_info(port, (struct serial_struct __user *)arg); | ||
109 | -- | ||
110 | 1.7.9.5 | ||
111 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0032-USB-sierra-add-support-for-Sierra-Wireless-MC7710.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0032-USB-sierra-add-support-for-Sierra-Wireless-MC7710.patch new file mode 100644 index 00000000..b13cff3d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0032-USB-sierra-add-support-for-Sierra-Wireless-MC7710.patch | |||
@@ -0,0 +1,30 @@ | |||
1 | From fa17e1b79bef42fa178918e05b7a38d69caa13d7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Anton Samokhvalov <pg83@yandex.ru> | ||
3 | Date: Wed, 4 Apr 2012 22:26:01 +0400 | ||
4 | Subject: [PATCH 32/69] USB: sierra: add support for Sierra Wireless MC7710 | ||
5 | |||
6 | commit c5d703dcc776cb542b41665f2b7e2ba054efb4a7 upstream. | ||
7 | |||
8 | Just add new device id. 3G works fine, LTE not tested. | ||
9 | |||
10 | Signed-off-by: Anton Samokhvalov <pg83@yandex.ru> | ||
11 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
12 | --- | ||
13 | drivers/usb/serial/sierra.c | 1 + | ||
14 | 1 file changed, 1 insertion(+) | ||
15 | |||
16 | diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c | ||
17 | index b18179b..7c3ec9e 100644 | ||
18 | --- a/drivers/usb/serial/sierra.c | ||
19 | +++ b/drivers/usb/serial/sierra.c | ||
20 | @@ -289,6 +289,7 @@ static const struct usb_device_id id_table[] = { | ||
21 | { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881 U */ | ||
22 | { USB_DEVICE(0x1199, 0x6859) }, /* Sierra Wireless AirCard 885 E */ | ||
23 | { USB_DEVICE(0x1199, 0x685A) }, /* Sierra Wireless AirCard 885 E */ | ||
24 | + { USB_DEVICE(0x1199, 0x68A2) }, /* Sierra Wireless MC7710 */ | ||
25 | /* Sierra Wireless C885 */ | ||
26 | { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6880, 0xFF, 0xFF, 0xFF)}, | ||
27 | /* Sierra Wireless C888, Air Card 501, USB 303, USB 304 */ | ||
28 | -- | ||
29 | 1.7.9.5 | ||
30 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0033-USB-don-t-clear-urb-dev-in-scatter-gather-library.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0033-USB-don-t-clear-urb-dev-in-scatter-gather-library.patch new file mode 100644 index 00000000..9ff10f9a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0033-USB-don-t-clear-urb-dev-in-scatter-gather-library.patch | |||
@@ -0,0 +1,85 @@ | |||
1 | From cd107339d3370b39dcaafd354a0c658b207dcaf0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Alan Stern <stern@rowland.harvard.edu> | ||
3 | Date: Thu, 22 Mar 2012 11:00:21 -0400 | ||
4 | Subject: [PATCH 33/69] USB: don't clear urb->dev in scatter-gather library | ||
5 | |||
6 | commit bcf398537630bf20b4dbe59ba855b69f404c93cf upstream. | ||
7 | |||
8 | This patch (as1517b) fixes an error in the USB scatter-gather library. | ||
9 | The library code uses urb->dev to determine whether or nor an URB is | ||
10 | currently active; the completion handler sets urb->dev to NULL. | ||
11 | However the core unlinking routines need to use urb->dev. Since | ||
12 | unlinking always racing with completion, the completion handler must | ||
13 | not clear urb->dev -- it can lead to invalid memory accesses when a | ||
14 | transfer has to be cancelled. | ||
15 | |||
16 | This patch fixes the problem by getting rid of the lines that clear | ||
17 | urb->dev after urb has been submitted. As a result we may end up | ||
18 | trying to unlink an URB that failed in submission or that has already | ||
19 | completed, so an extra check is added after each unlink to avoid | ||
20 | printing an error message when this happens. The checks are updated | ||
21 | in both sg_complete() and sg_cancel(), and the second is updated to | ||
22 | match the first (currently it prints out unnecessary warning messages | ||
23 | if a device is unplugged while a transfer is in progress). | ||
24 | |||
25 | Signed-off-by: Alan Stern <stern@rowland.harvard.edu> | ||
26 | Reported-and-tested-by: Illia Zaitsev <I.Zaitsev@adbglobal.com> | ||
27 | CC: Ming Lei <tom.leiming@gmail.com> | ||
28 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
29 | --- | ||
30 | drivers/usb/core/message.c | 11 ++++++----- | ||
31 | 1 file changed, 6 insertions(+), 5 deletions(-) | ||
32 | |||
33 | diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c | ||
34 | index b3bdfed..aed3e07 100644 | ||
35 | --- a/drivers/usb/core/message.c | ||
36 | +++ b/drivers/usb/core/message.c | ||
37 | @@ -308,7 +308,8 @@ static void sg_complete(struct urb *urb) | ||
38 | retval = usb_unlink_urb(io->urbs [i]); | ||
39 | if (retval != -EINPROGRESS && | ||
40 | retval != -ENODEV && | ||
41 | - retval != -EBUSY) | ||
42 | + retval != -EBUSY && | ||
43 | + retval != -EIDRM) | ||
44 | dev_err(&io->dev->dev, | ||
45 | "%s, unlink --> %d\n", | ||
46 | __func__, retval); | ||
47 | @@ -317,7 +318,6 @@ static void sg_complete(struct urb *urb) | ||
48 | } | ||
49 | spin_lock(&io->lock); | ||
50 | } | ||
51 | - urb->dev = NULL; | ||
52 | |||
53 | /* on the last completion, signal usb_sg_wait() */ | ||
54 | io->bytes += urb->actual_length; | ||
55 | @@ -524,7 +524,6 @@ void usb_sg_wait(struct usb_sg_request *io) | ||
56 | case -ENXIO: /* hc didn't queue this one */ | ||
57 | case -EAGAIN: | ||
58 | case -ENOMEM: | ||
59 | - io->urbs[i]->dev = NULL; | ||
60 | retval = 0; | ||
61 | yield(); | ||
62 | break; | ||
63 | @@ -542,7 +541,6 @@ void usb_sg_wait(struct usb_sg_request *io) | ||
64 | |||
65 | /* fail any uncompleted urbs */ | ||
66 | default: | ||
67 | - io->urbs[i]->dev = NULL; | ||
68 | io->urbs[i]->status = retval; | ||
69 | dev_dbg(&io->dev->dev, "%s, submit --> %d\n", | ||
70 | __func__, retval); | ||
71 | @@ -593,7 +591,10 @@ void usb_sg_cancel(struct usb_sg_request *io) | ||
72 | if (!io->urbs [i]->dev) | ||
73 | continue; | ||
74 | retval = usb_unlink_urb(io->urbs [i]); | ||
75 | - if (retval != -EINPROGRESS && retval != -EBUSY) | ||
76 | + if (retval != -EINPROGRESS | ||
77 | + && retval != -ENODEV | ||
78 | + && retval != -EBUSY | ||
79 | + && retval != -EIDRM) | ||
80 | dev_warn(&io->dev->dev, "%s, unlink --> %d\n", | ||
81 | __func__, retval); | ||
82 | } | ||
83 | -- | ||
84 | 1.7.9.5 | ||
85 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-USB-don-t-ignore-suspend-errors-for-root-hubs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-USB-don-t-ignore-suspend-errors-for-root-hubs.patch new file mode 100644 index 00000000..019927df --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0034-USB-don-t-ignore-suspend-errors-for-root-hubs.patch | |||
@@ -0,0 +1,54 @@ | |||
1 | From 2bfec5e16aa5c74b8c5934059f3e32595ef95214 Mon Sep 17 00:00:00 2001 | ||
2 | From: Alan Stern <stern@rowland.harvard.edu> | ||
3 | Date: Wed, 28 Mar 2012 15:56:17 -0400 | ||
4 | Subject: [PATCH 34/69] USB: don't ignore suspend errors for root hubs | ||
5 | |||
6 | commit cd4376e23a59a2adf3084cb5f4a523e6d5fd4e49 upstream. | ||
7 | |||
8 | This patch (as1532) fixes a mistake in the USB suspend code. When the | ||
9 | system is going to sleep, we should ignore errors in powering down USB | ||
10 | devices, because they don't really matter. The devices will go to low | ||
11 | power anyway when the entire USB bus gets suspended (except for | ||
12 | SuperSpeed devices; maybe they will need special treatment later). | ||
13 | |||
14 | However we should not ignore errors in suspending root hubs, | ||
15 | especially if the error indicates that the suspend raced with a wakeup | ||
16 | request. Doing so might leave the bus powered on while the system was | ||
17 | supposed to be asleep, or it might cause the suspend of the root hub's | ||
18 | parent controller device to fail, or it might cause a wakeup request | ||
19 | to be ignored. | ||
20 | |||
21 | The patch fixes the problem by ignoring errors only when the device in | ||
22 | question is not a root hub. | ||
23 | |||
24 | Signed-off-by: Alan Stern <stern@rowland.harvard.edu> | ||
25 | Reported-by: Chen Peter <B29397@freescale.com> | ||
26 | Tested-by: Chen Peter <peter.chen@freescale.com> | ||
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
28 | --- | ||
29 | drivers/usb/core/driver.c | 9 +++++++-- | ||
30 | 1 file changed, 7 insertions(+), 2 deletions(-) | ||
31 | |||
32 | diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c | ||
33 | index 45887a0..c77f0d6 100644 | ||
34 | --- a/drivers/usb/core/driver.c | ||
35 | +++ b/drivers/usb/core/driver.c | ||
36 | @@ -1198,8 +1198,13 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg) | ||
37 | if (status == 0) { | ||
38 | status = usb_suspend_device(udev, msg); | ||
39 | |||
40 | - /* Again, ignore errors during system sleep transitions */ | ||
41 | - if (!PMSG_IS_AUTO(msg)) | ||
42 | + /* | ||
43 | + * Ignore errors from non-root-hub devices during | ||
44 | + * system sleep transitions. For the most part, | ||
45 | + * these devices should go to low power anyway when | ||
46 | + * the entire bus is suspended. | ||
47 | + */ | ||
48 | + if (udev->parent && !PMSG_IS_AUTO(msg)) | ||
49 | status = 0; | ||
50 | } | ||
51 | |||
52 | -- | ||
53 | 1.7.9.5 | ||
54 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0035-xhci-don-t-re-enable-IE-constantly.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0035-xhci-don-t-re-enable-IE-constantly.patch new file mode 100644 index 00000000..0643790a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0035-xhci-don-t-re-enable-IE-constantly.patch | |||
@@ -0,0 +1,58 @@ | |||
1 | From 36e9ddc88d64edf5a78006753b3ec306384008d7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Felipe Balbi <balbi@ti.com> | ||
3 | Date: Thu, 15 Mar 2012 16:37:08 +0200 | ||
4 | Subject: [PATCH 35/69] xhci: don't re-enable IE constantly | ||
5 | |||
6 | commit 4e833c0b87a30798e67f06120cecebef6ee9644c upstream. | ||
7 | |||
8 | While we're at that, define IMAN bitfield to aid readability. | ||
9 | |||
10 | The interrupt enable bit should be set once on driver init, and we | ||
11 | shouldn't need to continually re-enable it. Commit c21599a3 introduced | ||
12 | a read of the irq_pending register, and that allows us to preserve the | ||
13 | state of the IE bit. Before that commit, we were blindly writing 0x3 to | ||
14 | the register. | ||
15 | |||
16 | This patch should be backported to kernels as old as 2.6.36, or ones | ||
17 | that contain the commit c21599a36165dbc78b380846b254017a548b9de5 "USB: | ||
18 | xhci: Reduce reads and writes of interrupter registers". | ||
19 | |||
20 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
21 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | drivers/usb/host/xhci-ring.c | 2 +- | ||
25 | drivers/usb/host/xhci.h | 4 ++++ | ||
26 | 2 files changed, 5 insertions(+), 1 deletion(-) | ||
27 | |||
28 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | ||
29 | index ae92dc4..43b3447 100644 | ||
30 | --- a/drivers/usb/host/xhci-ring.c | ||
31 | +++ b/drivers/usb/host/xhci-ring.c | ||
32 | @@ -2343,7 +2343,7 @@ hw_died: | ||
33 | u32 irq_pending; | ||
34 | /* Acknowledge the PCI interrupt */ | ||
35 | irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending); | ||
36 | - irq_pending |= 0x3; | ||
37 | + irq_pending |= IMAN_IP; | ||
38 | xhci_writel(xhci, irq_pending, &xhci->ir_set->irq_pending); | ||
39 | } | ||
40 | |||
41 | diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h | ||
42 | index 09eda3a..4850c4d 100644 | ||
43 | --- a/drivers/usb/host/xhci.h | ||
44 | +++ b/drivers/usb/host/xhci.h | ||
45 | @@ -205,6 +205,10 @@ struct xhci_op_regs { | ||
46 | #define CMD_PM_INDEX (1 << 11) | ||
47 | /* bits 12:31 are reserved (and should be preserved on writes). */ | ||
48 | |||
49 | +/* IMAN - Interrupt Management Register */ | ||
50 | +#define IMAN_IP (1 << 1) | ||
51 | +#define IMAN_IE (1 << 0) | ||
52 | + | ||
53 | /* USBSTS - USB status - status bitmasks */ | ||
54 | /* HC not running - set to 1 when run/stop bit is cleared. */ | ||
55 | #define STS_HALT XHCI_STS_HALT | ||
56 | -- | ||
57 | 1.7.9.5 | ||
58 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0036-xhci-Don-t-write-zeroed-pointers-to-xHC-registers.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0036-xhci-Don-t-write-zeroed-pointers-to-xHC-registers.patch new file mode 100644 index 00000000..9eb5447c --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0036-xhci-Don-t-write-zeroed-pointers-to-xHC-registers.patch | |||
@@ -0,0 +1,78 @@ | |||
1 | From f8d0987af5d135d8eb54e7b525e985328f0e8bd5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
3 | Date: Fri, 16 Mar 2012 13:09:39 -0700 | ||
4 | Subject: [PATCH 36/69] xhci: Don't write zeroed pointers to xHC registers. | ||
5 | |||
6 | commit 159e1fcc9a60fc7daba23ee8fcdb99799de3fe84 upstream. | ||
7 | |||
8 | When xhci_mem_cleanup() is called, we can't be sure if the xHC is | ||
9 | actually halted. We can ask the xHC to halt by writing to the RUN bit | ||
10 | in the command register, but that might timeout due to a HW hang. | ||
11 | |||
12 | If the host controller is still running, we should not write zeroed | ||
13 | values to the event ring dequeue pointers or base tables, the DCBAA | ||
14 | pointers, or the command ring pointers. Eric Fu reports his VIA VL800 | ||
15 | host accesses the event ring pointers after a failed register restore on | ||
16 | resume from suspend. The hypothesis is that the host never actually | ||
17 | halted before the register write to change the event ring pointer to | ||
18 | zero. | ||
19 | |||
20 | Remove all writes of zeroed values to pointer registers in | ||
21 | xhci_mem_cleanup(). Instead, make all callers of the function reset the | ||
22 | host controller first, which will reset those registers to zero. | ||
23 | xhci_mem_init() is the only caller that doesn't first halt and reset the | ||
24 | host controller before calling xhci_mem_cleanup(). | ||
25 | |||
26 | This should be backported to kernels as old as 2.6.32. | ||
27 | |||
28 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
29 | Tested-by: Elric Fu <elricfu1@gmail.com> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | drivers/usb/host/xhci-mem.c | 9 ++------- | ||
33 | 1 file changed, 2 insertions(+), 7 deletions(-) | ||
34 | |||
35 | diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c | ||
36 | index c69cf54..01c3800 100644 | ||
37 | --- a/drivers/usb/host/xhci-mem.c | ||
38 | +++ b/drivers/usb/host/xhci-mem.c | ||
39 | @@ -1704,11 +1704,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) | ||
40 | int i; | ||
41 | |||
42 | /* Free the Event Ring Segment Table and the actual Event Ring */ | ||
43 | - if (xhci->ir_set) { | ||
44 | - xhci_writel(xhci, 0, &xhci->ir_set->erst_size); | ||
45 | - xhci_write_64(xhci, 0, &xhci->ir_set->erst_base); | ||
46 | - xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue); | ||
47 | - } | ||
48 | size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries); | ||
49 | if (xhci->erst.entries) | ||
50 | dma_free_coherent(&pdev->dev, size, | ||
51 | @@ -1720,7 +1715,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) | ||
52 | xhci->event_ring = NULL; | ||
53 | xhci_dbg(xhci, "Freed event ring\n"); | ||
54 | |||
55 | - xhci_write_64(xhci, 0, &xhci->op_regs->cmd_ring); | ||
56 | if (xhci->cmd_ring) | ||
57 | xhci_ring_free(xhci, xhci->cmd_ring); | ||
58 | xhci->cmd_ring = NULL; | ||
59 | @@ -1749,7 +1743,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) | ||
60 | xhci->medium_streams_pool = NULL; | ||
61 | xhci_dbg(xhci, "Freed medium stream array pool\n"); | ||
62 | |||
63 | - xhci_write_64(xhci, 0, &xhci->op_regs->dcbaa_ptr); | ||
64 | if (xhci->dcbaa) | ||
65 | dma_free_coherent(&pdev->dev, sizeof(*xhci->dcbaa), | ||
66 | xhci->dcbaa, xhci->dcbaa->dma); | ||
67 | @@ -2358,6 +2351,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) | ||
68 | |||
69 | fail: | ||
70 | xhci_warn(xhci, "Couldn't initialize memory\n"); | ||
71 | + xhci_halt(xhci); | ||
72 | + xhci_reset(xhci); | ||
73 | xhci_mem_cleanup(xhci); | ||
74 | return -ENOMEM; | ||
75 | } | ||
76 | -- | ||
77 | 1.7.9.5 | ||
78 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0037-xhci-Restore-event-ring-dequeue-pointer-on-resume.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0037-xhci-Restore-event-ring-dequeue-pointer-on-resume.patch new file mode 100644 index 00000000..cadc9293 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0037-xhci-Restore-event-ring-dequeue-pointer-on-resume.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From 375a67105a521c7ae75a529509218c4bda02c612 Mon Sep 17 00:00:00 2001 | ||
2 | From: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
3 | Date: Fri, 16 Mar 2012 13:27:39 -0700 | ||
4 | Subject: [PATCH 37/69] xhci: Restore event ring dequeue pointer on resume. | ||
5 | |||
6 | commit fb3d85bc7193f23c9a564502df95564c49a32c91 upstream. | ||
7 | |||
8 | The xhci_save_registers() function saved the event ring dequeue pointer | ||
9 | in the s3 register structure, but xhci_restore_registers() never | ||
10 | restored it. No other code in the xHCI successful resume path would | ||
11 | ever restore it either. Fix that. | ||
12 | |||
13 | This should be backported to kernels as old as 2.6.37, that contain the | ||
14 | commit 5535b1d5f8885695c6ded783c692e3c0d0eda8ca "USB: xHCI: PCI power | ||
15 | management implementation". | ||
16 | |||
17 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
18 | Tested-by: Elric Fu <elricfu1@gmail.com> | ||
19 | Cc: Andiry Xu <andiry.xu@amd.com> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | drivers/usb/host/xhci.c | 1 + | ||
23 | 1 file changed, 1 insertion(+) | ||
24 | |||
25 | diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c | ||
26 | index 034f554..4d44713 100644 | ||
27 | --- a/drivers/usb/host/xhci.c | ||
28 | +++ b/drivers/usb/host/xhci.c | ||
29 | @@ -681,6 +681,7 @@ static void xhci_restore_registers(struct xhci_hcd *xhci) | ||
30 | xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control); | ||
31 | xhci_writel(xhci, xhci->s3.erst_size, &xhci->ir_set->erst_size); | ||
32 | xhci_write_64(xhci, xhci->s3.erst_base, &xhci->ir_set->erst_base); | ||
33 | + xhci_write_64(xhci, xhci->s3.erst_dequeue, &xhci->ir_set->erst_dequeue); | ||
34 | } | ||
35 | |||
36 | static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci) | ||
37 | -- | ||
38 | 1.7.9.5 | ||
39 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0038-USB-fix-bug-of-device-descriptor-got-from-superspeed.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0038-USB-fix-bug-of-device-descriptor-got-from-superspeed.patch new file mode 100644 index 00000000..a48a25d5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0038-USB-fix-bug-of-device-descriptor-got-from-superspeed.patch | |||
@@ -0,0 +1,73 @@ | |||
1 | From 75b1fa981bf0fcddcc4a6c8916d6995a273dcfad Mon Sep 17 00:00:00 2001 | ||
2 | From: Elric Fu <elricfu1@gmail.com> | ||
3 | Date: Mon, 26 Mar 2012 21:16:02 +0800 | ||
4 | Subject: [PATCH 38/69] USB: fix bug of device descriptor got from superspeed | ||
5 | device | ||
6 | |||
7 | commit d8aec3dbdfd02627e198e7956ab4aaeba2a349fa upstream. | ||
8 | |||
9 | When the Seagate Goflex USB3.0 device is attached to VIA xHCI | ||
10 | host, sometimes the device will downgrade mode to high speed. | ||
11 | By the USB analyzer, I found the device finished the link | ||
12 | training process and worked at superspeed mode. But the device | ||
13 | descriptor got from the device shows the device works at 2.1. | ||
14 | It is very strange and seems like the device controller of | ||
15 | Seagate Goflex has a little confusion. | ||
16 | |||
17 | The first 8 bytes of device descriptor should be: | ||
18 | 12 01 00 03 00 00 00 09 | ||
19 | |||
20 | But the first 8 bytes of wrong device descriptor are: | ||
21 | 12 01 10 02 00 00 00 40 | ||
22 | |||
23 | The wrong device descriptor caused the initialization of mass | ||
24 | storage failed. After a while, the device would be recognized | ||
25 | as a high speed device and works fine. | ||
26 | |||
27 | This patch will warm reset the device to fix the issue after | ||
28 | finding the bcdUSB field of device descriptor isn't 0x0300 | ||
29 | but the speed mode of device is superspeed. | ||
30 | |||
31 | This patch should be backported to kernels as old as 3.2, or ones that | ||
32 | contain the commit 75d7cf72ab9fa01dc70877aa5c68e8ef477229dc "usbcore: | ||
33 | refine warm reset logic". | ||
34 | |||
35 | Signed-off-by: Elric Fu <elricfu1@gmail.com> | ||
36 | Acked-by: Andiry Xu <Andiry.Xu@amd.com> | ||
37 | Acked-by: Sergei Shtylyov <sshtylyov@mvista.com> | ||
38 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
39 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
40 | --- | ||
41 | drivers/usb/core/hub.c | 16 ++++++++++++++++ | ||
42 | 1 file changed, 16 insertions(+) | ||
43 | |||
44 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c | ||
45 | index f982eeb..18373ec 100644 | ||
46 | --- a/drivers/usb/core/hub.c | ||
47 | +++ b/drivers/usb/core/hub.c | ||
48 | @@ -3072,6 +3072,22 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1, | ||
49 | if (retval) | ||
50 | goto fail; | ||
51 | |||
52 | + /* | ||
53 | + * Some superspeed devices have finished the link training process | ||
54 | + * and attached to a superspeed hub port, but the device descriptor | ||
55 | + * got from those devices show they aren't superspeed devices. Warm | ||
56 | + * reset the port attached by the devices can fix them. | ||
57 | + */ | ||
58 | + if ((udev->speed == USB_SPEED_SUPER) && | ||
59 | + (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) { | ||
60 | + dev_err(&udev->dev, "got a wrong device descriptor, " | ||
61 | + "warm reset device\n"); | ||
62 | + hub_port_reset(hub, port1, udev, | ||
63 | + HUB_BH_RESET_TIME, true); | ||
64 | + retval = -EINVAL; | ||
65 | + goto fail; | ||
66 | + } | ||
67 | + | ||
68 | if (udev->descriptor.bMaxPacketSize0 == 0xff || | ||
69 | udev->speed == USB_SPEED_SUPER) | ||
70 | i = 512; | ||
71 | -- | ||
72 | 1.7.9.5 | ||
73 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0039-xHCI-add-XHCI_RESET_ON_RESUME-quirk-for-VIA-xHCI-hos.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0039-xHCI-add-XHCI_RESET_ON_RESUME-quirk-for-VIA-xHCI-hos.patch new file mode 100644 index 00000000..9229f08a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0039-xHCI-add-XHCI_RESET_ON_RESUME-quirk-for-VIA-xHCI-hos.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From f9cce3fb45a90fffc8d2bb59a65ebdbfc881d5a8 Mon Sep 17 00:00:00 2001 | ||
2 | From: Elric Fu <elricfu1@gmail.com> | ||
3 | Date: Thu, 29 Mar 2012 15:47:50 +0800 | ||
4 | Subject: [PATCH 39/69] xHCI: add XHCI_RESET_ON_RESUME quirk for VIA xHCI host | ||
5 | |||
6 | commit 457a4f61f9bfc3ae76e5b49f30f25d86bb696f67 upstream. | ||
7 | |||
8 | The suspend operation of VIA xHCI host have some issues and | ||
9 | hibernate operation works fine, so The XHCI_RESET_ON_RESUME | ||
10 | quirk is added for it. | ||
11 | |||
12 | This patch should base on "xHCI: Don't write zeroed pointer | ||
13 | to xHC registers" that is released by Sarah. Otherwise, the | ||
14 | host system error will ocurr in the hibernate operation | ||
15 | process. | ||
16 | |||
17 | This should be backported to stable kernels as old as 2.6.37, | ||
18 | that contain the commit c877b3b2ad5cb9d4fe523c5496185cc328ff3ae9 | ||
19 | "xhci: Add reset on resume quirk for asrock p67 host". | ||
20 | |||
21 | Signed-off-by: Elric Fu <elricfu1@gmail.com> | ||
22 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
23 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
24 | --- | ||
25 | drivers/usb/host/xhci-pci.c | 2 ++ | ||
26 | 1 file changed, 2 insertions(+) | ||
27 | |||
28 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c | ||
29 | index ef98b38..211296a 100644 | ||
30 | --- a/drivers/usb/host/xhci-pci.c | ||
31 | +++ b/drivers/usb/host/xhci-pci.c | ||
32 | @@ -95,6 +95,8 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | ||
33 | xhci->quirks |= XHCI_RESET_ON_RESUME; | ||
34 | xhci_dbg(xhci, "QUIRK: Resetting on resume\n"); | ||
35 | } | ||
36 | + if (pdev->vendor == PCI_VENDOR_ID_VIA) | ||
37 | + xhci->quirks |= XHCI_RESET_ON_RESUME; | ||
38 | } | ||
39 | |||
40 | /* called during probe() after chip reset completes */ | ||
41 | -- | ||
42 | 1.7.9.5 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0040-xHCI-Correct-the-define-XHCI_LEGACY_DISABLE_SMI.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0040-xHCI-Correct-the-define-XHCI_LEGACY_DISABLE_SMI.patch new file mode 100644 index 00000000..5a3f5bc0 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0040-xHCI-Correct-the-define-XHCI_LEGACY_DISABLE_SMI.patch | |||
@@ -0,0 +1,61 @@ | |||
1 | From 84ff902a342b34de5c637eccde339aa7bd644c2b Mon Sep 17 00:00:00 2001 | ||
2 | From: Alex He <alex.he@amd.com> | ||
3 | Date: Fri, 30 Mar 2012 10:21:38 +0800 | ||
4 | Subject: [PATCH 40/69] xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI | ||
5 | |||
6 | commit 95018a53f7653e791bba1f54c8d75d9cb700d1bd upstream. | ||
7 | |||
8 | Re-define XHCI_LEGACY_DISABLE_SMI and used it in right way. All SMI enable | ||
9 | bits will be cleared to zero and flag bits 29:31 are also cleared to zero. | ||
10 | Other bits should be presvered as Table 146. | ||
11 | |||
12 | This patch should be backported to kernels as old as 2.6.31. | ||
13 | |||
14 | Signed-off-by: Alex He <alex.he@amd.com> | ||
15 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/usb/host/pci-quirks.c | 10 +++++++--- | ||
19 | drivers/usb/host/xhci-ext-caps.h | 5 +++-- | ||
20 | 2 files changed, 10 insertions(+), 5 deletions(-) | ||
21 | |||
22 | diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c | ||
23 | index 7732d69..2afff88 100644 | ||
24 | --- a/drivers/usb/host/pci-quirks.c | ||
25 | +++ b/drivers/usb/host/pci-quirks.c | ||
26 | @@ -825,9 +825,13 @@ static void __devinit quirk_usb_handoff_xhci(struct pci_dev *pdev) | ||
27 | } | ||
28 | } | ||
29 | |||
30 | - /* Disable any BIOS SMIs */ | ||
31 | - writel(XHCI_LEGACY_DISABLE_SMI, | ||
32 | - base + ext_cap_offset + XHCI_LEGACY_CONTROL_OFFSET); | ||
33 | + val = readl(base + ext_cap_offset + XHCI_LEGACY_CONTROL_OFFSET); | ||
34 | + /* Mask off (turn off) any enabled SMIs */ | ||
35 | + val &= XHCI_LEGACY_DISABLE_SMI; | ||
36 | + /* Mask all SMI events bits, RW1C */ | ||
37 | + val |= XHCI_LEGACY_SMI_EVENTS; | ||
38 | + /* Disable any BIOS SMIs and clear all SMI events*/ | ||
39 | + writel(val, base + ext_cap_offset + XHCI_LEGACY_CONTROL_OFFSET); | ||
40 | |||
41 | if (usb_is_intel_switchable_xhci(pdev)) | ||
42 | usb_enable_xhci_ports(pdev); | ||
43 | diff --git a/drivers/usb/host/xhci-ext-caps.h b/drivers/usb/host/xhci-ext-caps.h | ||
44 | index c7f3312..377f424 100644 | ||
45 | --- a/drivers/usb/host/xhci-ext-caps.h | ||
46 | +++ b/drivers/usb/host/xhci-ext-caps.h | ||
47 | @@ -62,8 +62,9 @@ | ||
48 | /* USB Legacy Support Control and Status Register - section 7.1.2 */ | ||
49 | /* Add this offset, plus the value of xECP in HCCPARAMS to the base address */ | ||
50 | #define XHCI_LEGACY_CONTROL_OFFSET (0x04) | ||
51 | -/* bits 1:2, 5:12, and 17:19 need to be preserved; bits 21:28 should be zero */ | ||
52 | -#define XHCI_LEGACY_DISABLE_SMI ((0x3 << 1) + (0xff << 5) + (0x7 << 17)) | ||
53 | +/* bits 1:3, 5:12, and 17:19 need to be preserved; bits 21:28 should be zero */ | ||
54 | +#define XHCI_LEGACY_DISABLE_SMI ((0x7 << 1) + (0xff << 5) + (0x7 << 17)) | ||
55 | +#define XHCI_LEGACY_SMI_EVENTS (0x7 << 29) | ||
56 | |||
57 | /* USB 2.0 xHCI 0.96 L1C capability - section 7.2.2.1.3.2 */ | ||
58 | #define XHCI_L1C (1 << 16) | ||
59 | -- | ||
60 | 1.7.9.5 | ||
61 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0041-fix-tlb-flushing-for-page-table-pages.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0041-fix-tlb-flushing-for-page-table-pages.patch new file mode 100644 index 00000000..350e9d76 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0041-fix-tlb-flushing-for-page-table-pages.patch | |||
@@ -0,0 +1,240 @@ | |||
1 | From 0110a55b4db1e1f84f4980aef2528e2cfe6875af Mon Sep 17 00:00:00 2001 | ||
2 | From: Martin Schwidefsky <schwidefsky@de.ibm.com> | ||
3 | Date: Wed, 11 Apr 2012 14:28:07 +0200 | ||
4 | Subject: [PATCH 41/69] fix tlb flushing for page table pages | ||
5 | |||
6 | commit cd94154cc6a28dd9dc271042c1a59c08d26da886 upstream. | ||
7 | |||
8 | Git commit 36409f6353fc2d7b6516e631415f938eadd92ffa "use generic RCU | ||
9 | page-table freeing code" introduced a tlb flushing bug. Partially revert | ||
10 | the above git commit and go back to s390 specific page table flush code. | ||
11 | |||
12 | For s390 the TLB can contain three types of entries, "normal" TLB | ||
13 | page-table entries, TLB combined region-and-segment-table (CRST) entries | ||
14 | and real-space entries. Linux does not use real-space entries which | ||
15 | leaves normal TLB entries and CRST entries. The CRST entries are | ||
16 | intermediate steps in the page-table translation called translation paths. | ||
17 | For example a 4K page access in a three-level page table setup will | ||
18 | create two CRST TLB entries and one page-table TLB entry. The advantage | ||
19 | of that approach is that a page access next to the previous one can reuse | ||
20 | the CRST entries and needs just a single read from memory to create the | ||
21 | page-table TLB entry. The disadvantage is that the TLB flushing rules are | ||
22 | more complicated, before any page-table may be freed the TLB needs to be | ||
23 | flushed. | ||
24 | |||
25 | In short: the generic RCU page-table freeing code is incorrect for the | ||
26 | CRST entries, in particular the check for mm_users < 2 is troublesome. | ||
27 | |||
28 | This is applicable to 3.0+ kernels. | ||
29 | |||
30 | Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> | ||
31 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
32 | --- | ||
33 | arch/s390/Kconfig | 1 - | ||
34 | arch/s390/include/asm/pgalloc.h | 3 -- | ||
35 | arch/s390/include/asm/tlb.h | 22 +------------- | ||
36 | arch/s390/mm/pgtable.c | 63 +++++++++++++++++++++++++++++++++++++-- | ||
37 | 4 files changed, 61 insertions(+), 28 deletions(-) | ||
38 | |||
39 | diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig | ||
40 | index f929db9..a3c40e8 100644 | ||
41 | --- a/arch/s390/Kconfig | ||
42 | +++ b/arch/s390/Kconfig | ||
43 | @@ -90,7 +90,6 @@ config S390 | ||
44 | select HAVE_GET_USER_PAGES_FAST | ||
45 | select HAVE_ARCH_MUTEX_CPU_RELAX | ||
46 | select HAVE_ARCH_JUMP_LABEL if !MARCH_G5 | ||
47 | - select HAVE_RCU_TABLE_FREE if SMP | ||
48 | select ARCH_SAVE_PAGE_KEYS if HIBERNATION | ||
49 | select ARCH_INLINE_SPIN_TRYLOCK | ||
50 | select ARCH_INLINE_SPIN_TRYLOCK_BH | ||
51 | diff --git a/arch/s390/include/asm/pgalloc.h b/arch/s390/include/asm/pgalloc.h | ||
52 | index 8eef9b5..78e3041 100644 | ||
53 | --- a/arch/s390/include/asm/pgalloc.h | ||
54 | +++ b/arch/s390/include/asm/pgalloc.h | ||
55 | @@ -22,10 +22,7 @@ void crst_table_free(struct mm_struct *, unsigned long *); | ||
56 | |||
57 | unsigned long *page_table_alloc(struct mm_struct *, unsigned long); | ||
58 | void page_table_free(struct mm_struct *, unsigned long *); | ||
59 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
60 | void page_table_free_rcu(struct mmu_gather *, unsigned long *); | ||
61 | -void __tlb_remove_table(void *_table); | ||
62 | -#endif | ||
63 | |||
64 | static inline void clear_table(unsigned long *s, unsigned long val, size_t n) | ||
65 | { | ||
66 | diff --git a/arch/s390/include/asm/tlb.h b/arch/s390/include/asm/tlb.h | ||
67 | index c687a2c..775a5ee 100644 | ||
68 | --- a/arch/s390/include/asm/tlb.h | ||
69 | +++ b/arch/s390/include/asm/tlb.h | ||
70 | @@ -30,14 +30,10 @@ | ||
71 | |||
72 | struct mmu_gather { | ||
73 | struct mm_struct *mm; | ||
74 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
75 | struct mmu_table_batch *batch; | ||
76 | -#endif | ||
77 | unsigned int fullmm; | ||
78 | - unsigned int need_flush; | ||
79 | }; | ||
80 | |||
81 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
82 | struct mmu_table_batch { | ||
83 | struct rcu_head rcu; | ||
84 | unsigned int nr; | ||
85 | @@ -49,7 +45,6 @@ struct mmu_table_batch { | ||
86 | |||
87 | extern void tlb_table_flush(struct mmu_gather *tlb); | ||
88 | extern void tlb_remove_table(struct mmu_gather *tlb, void *table); | ||
89 | -#endif | ||
90 | |||
91 | static inline void tlb_gather_mmu(struct mmu_gather *tlb, | ||
92 | struct mm_struct *mm, | ||
93 | @@ -57,29 +52,20 @@ static inline void tlb_gather_mmu(struct mmu_gather *tlb, | ||
94 | { | ||
95 | tlb->mm = mm; | ||
96 | tlb->fullmm = full_mm_flush; | ||
97 | - tlb->need_flush = 0; | ||
98 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
99 | tlb->batch = NULL; | ||
100 | -#endif | ||
101 | if (tlb->fullmm) | ||
102 | __tlb_flush_mm(mm); | ||
103 | } | ||
104 | |||
105 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | ||
106 | { | ||
107 | - if (!tlb->need_flush) | ||
108 | - return; | ||
109 | - tlb->need_flush = 0; | ||
110 | - __tlb_flush_mm(tlb->mm); | ||
111 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
112 | tlb_table_flush(tlb); | ||
113 | -#endif | ||
114 | } | ||
115 | |||
116 | static inline void tlb_finish_mmu(struct mmu_gather *tlb, | ||
117 | unsigned long start, unsigned long end) | ||
118 | { | ||
119 | - tlb_flush_mmu(tlb); | ||
120 | + tlb_table_flush(tlb); | ||
121 | } | ||
122 | |||
123 | /* | ||
124 | @@ -105,10 +91,8 @@ static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) | ||
125 | static inline void pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte, | ||
126 | unsigned long address) | ||
127 | { | ||
128 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
129 | if (!tlb->fullmm) | ||
130 | return page_table_free_rcu(tlb, (unsigned long *) pte); | ||
131 | -#endif | ||
132 | page_table_free(tlb->mm, (unsigned long *) pte); | ||
133 | } | ||
134 | |||
135 | @@ -125,10 +109,8 @@ static inline void pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd, | ||
136 | #ifdef __s390x__ | ||
137 | if (tlb->mm->context.asce_limit <= (1UL << 31)) | ||
138 | return; | ||
139 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
140 | if (!tlb->fullmm) | ||
141 | return tlb_remove_table(tlb, pmd); | ||
142 | -#endif | ||
143 | crst_table_free(tlb->mm, (unsigned long *) pmd); | ||
144 | #endif | ||
145 | } | ||
146 | @@ -146,10 +128,8 @@ static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud, | ||
147 | #ifdef __s390x__ | ||
148 | if (tlb->mm->context.asce_limit <= (1UL << 42)) | ||
149 | return; | ||
150 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
151 | if (!tlb->fullmm) | ||
152 | return tlb_remove_table(tlb, pud); | ||
153 | -#endif | ||
154 | crst_table_free(tlb->mm, (unsigned long *) pud); | ||
155 | #endif | ||
156 | } | ||
157 | diff --git a/arch/s390/mm/pgtable.c b/arch/s390/mm/pgtable.c | ||
158 | index 301c84d..f8ceac4 100644 | ||
159 | --- a/arch/s390/mm/pgtable.c | ||
160 | +++ b/arch/s390/mm/pgtable.c | ||
161 | @@ -687,8 +687,6 @@ void page_table_free(struct mm_struct *mm, unsigned long *table) | ||
162 | } | ||
163 | } | ||
164 | |||
165 | -#ifdef CONFIG_HAVE_RCU_TABLE_FREE | ||
166 | - | ||
167 | static void __page_table_free_rcu(void *table, unsigned bit) | ||
168 | { | ||
169 | struct page *page; | ||
170 | @@ -742,7 +740,66 @@ void __tlb_remove_table(void *_table) | ||
171 | free_pages((unsigned long) table, ALLOC_ORDER); | ||
172 | } | ||
173 | |||
174 | -#endif | ||
175 | +static void tlb_remove_table_smp_sync(void *arg) | ||
176 | +{ | ||
177 | + /* Simply deliver the interrupt */ | ||
178 | +} | ||
179 | + | ||
180 | +static void tlb_remove_table_one(void *table) | ||
181 | +{ | ||
182 | + /* | ||
183 | + * This isn't an RCU grace period and hence the page-tables cannot be | ||
184 | + * assumed to be actually RCU-freed. | ||
185 | + * | ||
186 | + * It is however sufficient for software page-table walkers that rely | ||
187 | + * on IRQ disabling. See the comment near struct mmu_table_batch. | ||
188 | + */ | ||
189 | + smp_call_function(tlb_remove_table_smp_sync, NULL, 1); | ||
190 | + __tlb_remove_table(table); | ||
191 | +} | ||
192 | + | ||
193 | +static void tlb_remove_table_rcu(struct rcu_head *head) | ||
194 | +{ | ||
195 | + struct mmu_table_batch *batch; | ||
196 | + int i; | ||
197 | + | ||
198 | + batch = container_of(head, struct mmu_table_batch, rcu); | ||
199 | + | ||
200 | + for (i = 0; i < batch->nr; i++) | ||
201 | + __tlb_remove_table(batch->tables[i]); | ||
202 | + | ||
203 | + free_page((unsigned long)batch); | ||
204 | +} | ||
205 | + | ||
206 | +void tlb_table_flush(struct mmu_gather *tlb) | ||
207 | +{ | ||
208 | + struct mmu_table_batch **batch = &tlb->batch; | ||
209 | + | ||
210 | + if (*batch) { | ||
211 | + __tlb_flush_mm(tlb->mm); | ||
212 | + call_rcu_sched(&(*batch)->rcu, tlb_remove_table_rcu); | ||
213 | + *batch = NULL; | ||
214 | + } | ||
215 | +} | ||
216 | + | ||
217 | +void tlb_remove_table(struct mmu_gather *tlb, void *table) | ||
218 | +{ | ||
219 | + struct mmu_table_batch **batch = &tlb->batch; | ||
220 | + | ||
221 | + if (*batch == NULL) { | ||
222 | + *batch = (struct mmu_table_batch *) | ||
223 | + __get_free_page(GFP_NOWAIT | __GFP_NOWARN); | ||
224 | + if (*batch == NULL) { | ||
225 | + __tlb_flush_mm(tlb->mm); | ||
226 | + tlb_remove_table_one(table); | ||
227 | + return; | ||
228 | + } | ||
229 | + (*batch)->nr = 0; | ||
230 | + } | ||
231 | + (*batch)->tables[(*batch)->nr++] = table; | ||
232 | + if ((*batch)->nr == MAX_TABLE_BATCH) | ||
233 | + tlb_table_flush(tlb); | ||
234 | +} | ||
235 | |||
236 | /* | ||
237 | * switch on pgstes for its userspace process (for kvm) | ||
238 | -- | ||
239 | 1.7.9.5 | ||
240 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0042-serial-PL011-clear-pending-interrupts.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0042-serial-PL011-clear-pending-interrupts.patch new file mode 100644 index 00000000..ecece35d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0042-serial-PL011-clear-pending-interrupts.patch | |||
@@ -0,0 +1,82 @@ | |||
1 | From 6408483ea69660e6ad8a2a8852edb9cd539cd51d Mon Sep 17 00:00:00 2001 | ||
2 | From: Linus Walleij <linus.walleij@linaro.org> | ||
3 | Date: Tue, 13 Mar 2012 13:27:23 +0100 | ||
4 | Subject: [PATCH 42/69] serial: PL011: clear pending interrupts | ||
5 | |||
6 | commit 9b96fbacda34079dea0638ee1e92c56286f6114a upstream. | ||
7 | |||
8 | Chanho Min reported that when the boot loader transfers | ||
9 | control to the kernel, there may be pending interrupts | ||
10 | causing the UART to lock up in an eternal loop trying to | ||
11 | pick tokens from the FIFO (since the RX interrupt flag | ||
12 | indicates there are tokens) while in practice there are | ||
13 | no tokens - in fact there is only a pending IRQ flag. | ||
14 | |||
15 | This patch address the issue with a combination of two | ||
16 | patches suggested by Russell King that clears and mask | ||
17 | all interrupts at probe() and clears any pending error | ||
18 | and RX interrupts at port startup time. | ||
19 | |||
20 | We suspect the spurious interrupts are a side-effect of | ||
21 | switching the UART from FIFO to non-FIFO mode. | ||
22 | |||
23 | Cc: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com> | ||
24 | Reported-by: Chanho Min <chanho0207@gmail.com> | ||
25 | Suggested-by: Russell King <linux@arm.linux.org.uk> | ||
26 | Signed-off-by: Linus Walleij <linus.walleij@linaro.org> | ||
27 | Reviewed-by: Jong-Sung Kim <neidhard.kim@lge.com> | ||
28 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
29 | --- | ||
30 | drivers/tty/serial/amba-pl011.c | 15 +++++++++++---- | ||
31 | 1 file changed, 11 insertions(+), 4 deletions(-) | ||
32 | |||
33 | diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c | ||
34 | index 8e00926..dddc3f2 100644 | ||
35 | --- a/drivers/tty/serial/amba-pl011.c | ||
36 | +++ b/drivers/tty/serial/amba-pl011.c | ||
37 | @@ -1380,6 +1380,10 @@ static int pl011_startup(struct uart_port *port) | ||
38 | |||
39 | uap->port.uartclk = clk_get_rate(uap->clk); | ||
40 | |||
41 | + /* Clear pending error and receive interrupts */ | ||
42 | + writew(UART011_OEIS | UART011_BEIS | UART011_PEIS | UART011_FEIS | | ||
43 | + UART011_RTIS | UART011_RXIS, uap->port.membase + UART011_ICR); | ||
44 | + | ||
45 | /* | ||
46 | * Allocate the IRQ | ||
47 | */ | ||
48 | @@ -1414,10 +1418,6 @@ static int pl011_startup(struct uart_port *port) | ||
49 | cr = UART01x_CR_UARTEN | UART011_CR_RXE | UART011_CR_TXE; | ||
50 | writew(cr, uap->port.membase + UART011_CR); | ||
51 | |||
52 | - /* Clear pending error interrupts */ | ||
53 | - writew(UART011_OEIS | UART011_BEIS | UART011_PEIS | UART011_FEIS, | ||
54 | - uap->port.membase + UART011_ICR); | ||
55 | - | ||
56 | /* | ||
57 | * initialise the old status of the modem signals | ||
58 | */ | ||
59 | @@ -1432,6 +1432,9 @@ static int pl011_startup(struct uart_port *port) | ||
60 | * as well. | ||
61 | */ | ||
62 | spin_lock_irq(&uap->port.lock); | ||
63 | + /* Clear out any spuriously appearing RX interrupts */ | ||
64 | + writew(UART011_RTIS | UART011_RXIS, | ||
65 | + uap->port.membase + UART011_ICR); | ||
66 | uap->im = UART011_RTIM; | ||
67 | if (!pl011_dma_rx_running(uap)) | ||
68 | uap->im |= UART011_RXIM; | ||
69 | @@ -1916,6 +1919,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) | ||
70 | goto unmap; | ||
71 | } | ||
72 | |||
73 | + /* Ensure interrupts from this UART are masked and cleared */ | ||
74 | + writew(0, uap->port.membase + UART011_IMSC); | ||
75 | + writew(0xffff, uap->port.membase + UART011_ICR); | ||
76 | + | ||
77 | uap->vendor = vendor; | ||
78 | uap->lcrh_rx = vendor->lcrh_rx; | ||
79 | uap->lcrh_tx = vendor->lcrh_tx; | ||
80 | -- | ||
81 | 1.7.9.5 | ||
82 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0043-serial-PL011-move-interrupt-clearing.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0043-serial-PL011-move-interrupt-clearing.patch new file mode 100644 index 00000000..bc47af07 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0043-serial-PL011-move-interrupt-clearing.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | From 02822f5ea52d9c9c4d197187b1a2553fe70f106c Mon Sep 17 00:00:00 2001 | ||
2 | From: Linus Walleij <linus.walleij@linaro.org> | ||
3 | Date: Wed, 21 Mar 2012 20:15:18 +0100 | ||
4 | Subject: [PATCH 43/69] serial: PL011: move interrupt clearing | ||
5 | |||
6 | commit c3d8b76f61586714cdc5f219ba45592a54caaa55 upstream. | ||
7 | |||
8 | Commit 360f748b204275229f8398cb2f9f53955db1503b | ||
9 | "serial: PL011: clear pending interrupts" | ||
10 | attempts to clear interrupts by writing to a | ||
11 | yet-unassigned memory address. This fixes the issue. | ||
12 | |||
13 | The breaking patch is marked for stable so should be | ||
14 | carried along with the other patch. | ||
15 | |||
16 | Cc: Shreshtha Kumar Sahu <shreshthakumar.sahu@stericsson.com> | ||
17 | Cc: Russell King <linux@arm.linux.org.uk> | ||
18 | Cc: Nicolas Pitre <nico@fluxnic.net> | ||
19 | Reported-by: Viresh Kumar <viresh.kumar@st.com> | ||
20 | Signed-off-by: Linus Walleij <linus.walleij@linaro.org> | ||
21 | Tested-by: Grant Likely <grant.likely@secretlab.ca> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | drivers/tty/serial/amba-pl011.c | 8 ++++---- | ||
25 | 1 file changed, 4 insertions(+), 4 deletions(-) | ||
26 | |||
27 | diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c | ||
28 | index dddc3f2..6da8cf8 100644 | ||
29 | --- a/drivers/tty/serial/amba-pl011.c | ||
30 | +++ b/drivers/tty/serial/amba-pl011.c | ||
31 | @@ -1919,10 +1919,6 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) | ||
32 | goto unmap; | ||
33 | } | ||
34 | |||
35 | - /* Ensure interrupts from this UART are masked and cleared */ | ||
36 | - writew(0, uap->port.membase + UART011_IMSC); | ||
37 | - writew(0xffff, uap->port.membase + UART011_ICR); | ||
38 | - | ||
39 | uap->vendor = vendor; | ||
40 | uap->lcrh_rx = vendor->lcrh_rx; | ||
41 | uap->lcrh_tx = vendor->lcrh_tx; | ||
42 | @@ -1939,6 +1935,10 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) | ||
43 | uap->port.line = i; | ||
44 | pl011_dma_probe(uap); | ||
45 | |||
46 | + /* Ensure interrupts from this UART are masked and cleared */ | ||
47 | + writew(0, uap->port.membase + UART011_IMSC); | ||
48 | + writew(0xffff, uap->port.membase + UART011_ICR); | ||
49 | + | ||
50 | snprintf(uap->type, sizeof(uap->type), "PL011 rev%u", amba_rev(dev)); | ||
51 | |||
52 | amba_ports[i] = uap; | ||
53 | -- | ||
54 | 1.7.9.5 | ||
55 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0044-fcaps-clear-the-same-personality-flags-as-suid-when-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0044-fcaps-clear-the-same-personality-flags-as-suid-when-.patch new file mode 100644 index 00000000..b2e4de61 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0044-fcaps-clear-the-same-personality-flags-as-suid-when-.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | From 0acc120610478e7f4b80e0d1379bd927c90eaff4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Eric Paris <eparis@redhat.com> | ||
3 | Date: Tue, 17 Apr 2012 16:26:54 -0400 | ||
4 | Subject: [PATCH 44/69] fcaps: clear the same personality flags as suid when | ||
5 | fcaps are used | ||
6 | |||
7 | commit d52fc5dde171f030170a6cb78034d166b13c9445 upstream. | ||
8 | |||
9 | If a process increases permissions using fcaps all of the dangerous | ||
10 | personality flags which are cleared for suid apps should also be cleared. | ||
11 | Thus programs given priviledge with fcaps will continue to have address space | ||
12 | randomization enabled even if the parent tried to disable it to make it | ||
13 | easier to attack. | ||
14 | |||
15 | Signed-off-by: Eric Paris <eparis@redhat.com> | ||
16 | Reviewed-by: Serge Hallyn <serge.hallyn@canonical.com> | ||
17 | Signed-off-by: James Morris <james.l.morris@oracle.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | security/commoncap.c | 5 +++++ | ||
21 | 1 file changed, 5 insertions(+) | ||
22 | |||
23 | diff --git a/security/commoncap.c b/security/commoncap.c | ||
24 | index ee4f848..0aee106 100644 | ||
25 | --- a/security/commoncap.c | ||
26 | +++ b/security/commoncap.c | ||
27 | @@ -514,6 +514,11 @@ int cap_bprm_set_creds(struct linux_binprm *bprm) | ||
28 | } | ||
29 | skip: | ||
30 | |||
31 | + /* if we have fs caps, clear dangerous personality flags */ | ||
32 | + if (!cap_issubset(new->cap_permitted, old->cap_permitted)) | ||
33 | + bprm->per_clear |= PER_CLEAR_ON_SETID; | ||
34 | + | ||
35 | + | ||
36 | /* Don't let someone trace a set[ug]id/setpcap binary with the revised | ||
37 | * credentials unless they have the appropriate permit | ||
38 | */ | ||
39 | -- | ||
40 | 1.7.9.5 | ||
41 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0045-ath9k-fix-max-noise-floor-threshold.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0045-ath9k-fix-max-noise-floor-threshold.patch new file mode 100644 index 00000000..618a68a1 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0045-ath9k-fix-max-noise-floor-threshold.patch | |||
@@ -0,0 +1,56 @@ | |||
1 | From ffdc1eb0a3c60111912b7bfe80c3a9358edd6b42 Mon Sep 17 00:00:00 2001 | ||
2 | From: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> | ||
3 | Date: Thu, 15 Mar 2012 06:08:04 +0530 | ||
4 | Subject: [PATCH 45/69] ath9k: fix max noise floor threshold | ||
5 | |||
6 | commit 2ee0a07028d2cde6e131b73f029dae2b93c50f3a upstream. | ||
7 | |||
8 | Currently the maximum noise floor limit is set as too high (-60dB). The | ||
9 | assumption of having a higher threshold limit is that it would help | ||
10 | de-sensitize the receiver (reduce phy errors) from continuous | ||
11 | interference. But when we have a bursty interference where there are | ||
12 | collisions and then free air time and if the receiver is desensitized too | ||
13 | much, it will miss the normal packets too. Lets make use of chips | ||
14 | specific min, nom and max limits always. This patch helps to improve the | ||
15 | connection stability in congested networks. | ||
16 | |||
17 | Cc: Paul Stewart <pstew@google.com> | ||
18 | Tested-by: Gary Morain <gmorain@google.com> | ||
19 | Signed-off-by: Madhan Jaganathan <madhanj@qca.qualcomm.com> | ||
20 | Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> | ||
21 | Signed-off-by: John W. Linville <linville@tuxdriver.com> | ||
22 | [bwh: Backported to 3.0/3.2: adjust context] | ||
23 | Signed-off-by: Ben Hutchings <ben@decadent.org.uk> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/net/wireless/ath/ath9k/calib.c | 5 ++--- | ||
27 | 1 file changed, 2 insertions(+), 3 deletions(-) | ||
28 | |||
29 | diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c | ||
30 | index 8ddef3e..d771de5 100644 | ||
31 | --- a/drivers/net/wireless/ath/ath9k/calib.c | ||
32 | +++ b/drivers/net/wireless/ath/ath9k/calib.c | ||
33 | @@ -20,7 +20,6 @@ | ||
34 | |||
35 | /* Common calibration code */ | ||
36 | |||
37 | -#define ATH9K_NF_TOO_HIGH -60 | ||
38 | |||
39 | static int16_t ath9k_hw_get_nf_hist_mid(int16_t *nfCalBuffer) | ||
40 | { | ||
41 | @@ -348,10 +347,10 @@ static void ath9k_hw_nf_sanitize(struct ath_hw *ah, s16 *nf) | ||
42 | "NF calibrated [%s] [chain %d] is %d\n", | ||
43 | (i >= 3 ? "ext" : "ctl"), i % 3, nf[i]); | ||
44 | |||
45 | - if (nf[i] > ATH9K_NF_TOO_HIGH) { | ||
46 | + if (nf[i] > limit->max) { | ||
47 | ath_dbg(common, ATH_DBG_CALIBRATE, | ||
48 | "NF[%d] (%d) > MAX (%d), correcting to MAX\n", | ||
49 | - i, nf[i], ATH9K_NF_TOO_HIGH); | ||
50 | + i, nf[i], limit->max); | ||
51 | nf[i] = limit->max; | ||
52 | } else if (nf[i] < limit->min) { | ||
53 | ath_dbg(common, ATH_DBG_CALIBRATE, | ||
54 | -- | ||
55 | 1.7.9.5 | ||
56 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0046-xhci-Fix-register-save-restore-order.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0046-xhci-Fix-register-save-restore-order.patch new file mode 100644 index 00000000..2fe2c5e0 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0046-xhci-Fix-register-save-restore-order.patch | |||
@@ -0,0 +1,62 @@ | |||
1 | From d4e6ce02459552a127973c9c204509136b940671 Mon Sep 17 00:00:00 2001 | ||
2 | From: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
3 | Date: Fri, 16 Mar 2012 13:19:35 -0700 | ||
4 | Subject: [PATCH 46/69] xhci: Fix register save/restore order. | ||
5 | |||
6 | commit c7713e736526d8c9f6f87716fb90562a8ffaff2c upstream. | ||
7 | |||
8 | The xHCI 1.0 spec errata released on June 13, 2011, changes the ordering | ||
9 | that the xHCI registers are saved and restored in. It moves the | ||
10 | interrupt pending (IMAN) and interrupt control (IMOD) registers to be | ||
11 | saved and restored last. I believe that's because the host controller | ||
12 | may attempt to fetch the event ring table when interrupts are | ||
13 | re-enabled. Therefore we need to restore the event ring registers | ||
14 | before we re-enable interrupts. | ||
15 | |||
16 | This should be backported to kernels as old as 2.6.37, that contain the | ||
17 | commit 5535b1d5f8885695c6ded783c692e3c0d0eda8ca "USB: xHCI: PCI power | ||
18 | management implementation" | ||
19 | |||
20 | Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> | ||
21 | Tested-by: Elric Fu <elricfu1@gmail.com> | ||
22 | Cc: Andiry Xu <andiry.xu@amd.com> | ||
23 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
24 | --- | ||
25 | drivers/usb/host/xhci.c | 8 ++++---- | ||
26 | 1 file changed, 4 insertions(+), 4 deletions(-) | ||
27 | |||
28 | diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c | ||
29 | index 4d44713..4c00606 100644 | ||
30 | --- a/drivers/usb/host/xhci.c | ||
31 | +++ b/drivers/usb/host/xhci.c | ||
32 | @@ -664,11 +664,11 @@ static void xhci_save_registers(struct xhci_hcd *xhci) | ||
33 | xhci->s3.dev_nt = xhci_readl(xhci, &xhci->op_regs->dev_notification); | ||
34 | xhci->s3.dcbaa_ptr = xhci_read_64(xhci, &xhci->op_regs->dcbaa_ptr); | ||
35 | xhci->s3.config_reg = xhci_readl(xhci, &xhci->op_regs->config_reg); | ||
36 | - xhci->s3.irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending); | ||
37 | - xhci->s3.irq_control = xhci_readl(xhci, &xhci->ir_set->irq_control); | ||
38 | xhci->s3.erst_size = xhci_readl(xhci, &xhci->ir_set->erst_size); | ||
39 | xhci->s3.erst_base = xhci_read_64(xhci, &xhci->ir_set->erst_base); | ||
40 | xhci->s3.erst_dequeue = xhci_read_64(xhci, &xhci->ir_set->erst_dequeue); | ||
41 | + xhci->s3.irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending); | ||
42 | + xhci->s3.irq_control = xhci_readl(xhci, &xhci->ir_set->irq_control); | ||
43 | } | ||
44 | |||
45 | static void xhci_restore_registers(struct xhci_hcd *xhci) | ||
46 | @@ -677,11 +677,11 @@ static void xhci_restore_registers(struct xhci_hcd *xhci) | ||
47 | xhci_writel(xhci, xhci->s3.dev_nt, &xhci->op_regs->dev_notification); | ||
48 | xhci_write_64(xhci, xhci->s3.dcbaa_ptr, &xhci->op_regs->dcbaa_ptr); | ||
49 | xhci_writel(xhci, xhci->s3.config_reg, &xhci->op_regs->config_reg); | ||
50 | - xhci_writel(xhci, xhci->s3.irq_pending, &xhci->ir_set->irq_pending); | ||
51 | - xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control); | ||
52 | xhci_writel(xhci, xhci->s3.erst_size, &xhci->ir_set->erst_size); | ||
53 | xhci_write_64(xhci, xhci->s3.erst_base, &xhci->ir_set->erst_base); | ||
54 | xhci_write_64(xhci, xhci->s3.erst_dequeue, &xhci->ir_set->erst_dequeue); | ||
55 | + xhci_writel(xhci, xhci->s3.irq_pending, &xhci->ir_set->irq_pending); | ||
56 | + xhci_writel(xhci, xhci->s3.irq_control, &xhci->ir_set->irq_control); | ||
57 | } | ||
58 | |||
59 | static void xhci_set_cmd_ring_deq(struct xhci_hcd *xhci) | ||
60 | -- | ||
61 | 1.7.9.5 | ||
62 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0047-Bluetooth-hci_core-fix-NULL-pointer-dereference-at-u.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0047-Bluetooth-hci_core-fix-NULL-pointer-dereference-at-u.patch new file mode 100644 index 00000000..4e3ff35d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0047-Bluetooth-hci_core-fix-NULL-pointer-dereference-at-u.patch | |||
@@ -0,0 +1,133 @@ | |||
1 | From 1eb32b0dc5c5286345e96240894af14de856e515 Mon Sep 17 00:00:00 2001 | ||
2 | From: Johan Hovold <jhovold@gmail.com> | ||
3 | Date: Thu, 15 Mar 2012 14:48:41 +0100 | ||
4 | Subject: [PATCH 47/69] Bluetooth: hci_core: fix NULL-pointer dereference at | ||
5 | unregister | ||
6 | |||
7 | commit 94324962066231a938564bebad0f941cd2d06bb2 upstream. | ||
8 | |||
9 | Make sure hci_dev_open returns immediately if hci_dev_unregister has | ||
10 | been called. | ||
11 | |||
12 | This fixes a race between hci_dev_open and hci_dev_unregister which can | ||
13 | lead to a NULL-pointer dereference. | ||
14 | |||
15 | Bug is 100% reproducible using hciattach and a disconnected serial port: | ||
16 | |||
17 | 0. # hciattach -n /dev/ttyO1 any noflow | ||
18 | |||
19 | 1. hci_dev_open called from hci_power_on grabs req lock | ||
20 | 2. hci_init_req executes but device fails to initialise (times out | ||
21 | eventually) | ||
22 | 3. hci_dev_open is called from hci_sock_ioctl and sleeps on req lock | ||
23 | 4. hci_uart_tty_close calls hci_dev_unregister and sleeps on req lock in | ||
24 | hci_dev_do_close | ||
25 | 5. hci_dev_open (1) releases req lock | ||
26 | 6. hci_dev_do_close grabs req lock and returns as device is not up | ||
27 | 7. hci_dev_unregister sleeps in destroy_workqueue | ||
28 | 8. hci_dev_open (3) grabs req lock, calls hci_init_req and eventually sleeps | ||
29 | 9. hci_dev_unregister finishes, while hci_dev_open is still running... | ||
30 | |||
31 | [ 79.627136] INFO: trying to register non-static key. | ||
32 | [ 79.632354] the code is fine but needs lockdep annotation. | ||
33 | [ 79.638122] turning off the locking correctness validator. | ||
34 | [ 79.643920] [<c00188bc>] (unwind_backtrace+0x0/0xf8) from [<c00729c4>] (__lock_acquire+0x1590/0x1ab0) | ||
35 | [ 79.653594] [<c00729c4>] (__lock_acquire+0x1590/0x1ab0) from [<c00733f8>] (lock_acquire+0x9c/0x128) | ||
36 | [ 79.663085] [<c00733f8>] (lock_acquire+0x9c/0x128) from [<c0040a88>] (run_timer_softirq+0x150/0x3ac) | ||
37 | [ 79.672668] [<c0040a88>] (run_timer_softirq+0x150/0x3ac) from [<c003a3b8>] (__do_softirq+0xd4/0x22c) | ||
38 | [ 79.682281] [<c003a3b8>] (__do_softirq+0xd4/0x22c) from [<c003a924>] (irq_exit+0x8c/0x94) | ||
39 | [ 79.690856] [<c003a924>] (irq_exit+0x8c/0x94) from [<c0013a50>] (handle_IRQ+0x34/0x84) | ||
40 | [ 79.699157] [<c0013a50>] (handle_IRQ+0x34/0x84) from [<c0008530>] (omap3_intc_handle_irq+0x48/0x4c) | ||
41 | [ 79.708648] [<c0008530>] (omap3_intc_handle_irq+0x48/0x4c) from [<c037499c>] (__irq_usr+0x3c/0x60) | ||
42 | [ 79.718048] Exception stack(0xcf281fb0 to 0xcf281ff8) | ||
43 | [ 79.723358] 1fa0: 0001e6a0 be8dab00 0001e698 00036698 | ||
44 | [ 79.731933] 1fc0: 0002df98 0002df38 0000001f 00000000 b6f234d0 00000000 00000004 00000000 | ||
45 | [ 79.740509] 1fe0: 0001e6f8 be8d6aa0 be8dac50 0000aab8 80000010 ffffffff | ||
46 | [ 79.747497] Unable to handle kernel NULL pointer dereference at virtual address 00000000 | ||
47 | [ 79.756011] pgd = cf3b4000 | ||
48 | [ 79.758850] [00000000] *pgd=8f0c7831, *pte=00000000, *ppte=00000000 | ||
49 | [ 79.765502] Internal error: Oops: 80000007 [#1] | ||
50 | [ 79.770294] Modules linked in: | ||
51 | [ 79.773529] CPU: 0 Tainted: G W (3.3.0-rc6-00002-gb5d5c87 #421) | ||
52 | [ 79.781066] PC is at 0x0 | ||
53 | [ 79.783721] LR is at run_timer_softirq+0x16c/0x3ac | ||
54 | [ 79.788787] pc : [<00000000>] lr : [<c0040aa4>] psr: 60000113 | ||
55 | [ 79.788787] sp : cf281ee0 ip : 00000000 fp : cf280000 | ||
56 | [ 79.800903] r10: 00000004 r9 : 00000100 r8 : b6f234d0 | ||
57 | [ 79.806427] r7 : c0519c28 r6 : cf093488 r5 : c0561a00 r4 : 00000000 | ||
58 | [ 79.813323] r3 : 00000000 r2 : c054eee0 r1 : 00000001 r0 : 00000000 | ||
59 | [ 79.820190] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user | ||
60 | [ 79.827728] Control: 10c5387d Table: 8f3b4019 DAC: 00000015 | ||
61 | [ 79.833801] Process gpsd (pid: 1265, stack limit = 0xcf2802e8) | ||
62 | [ 79.839965] Stack: (0xcf281ee0 to 0xcf282000) | ||
63 | [ 79.844573] 1ee0: 00000002 00000000 c0040a24 00000000 00000002 cf281f08 00200200 00000000 | ||
64 | [ 79.853210] 1f00: 00000000 cf281f18 cf281f08 00000000 00000000 00000000 cf281f18 cf281f18 | ||
65 | [ 79.861816] 1f20: 00000000 00000001 c056184c 00000000 00000001 b6f234d0 c0561848 00000004 | ||
66 | [ 79.870452] 1f40: cf280000 c003a3b8 c051e79c 00000001 00000000 00000100 3fa9e7b8 0000000a | ||
67 | [ 79.879089] 1f60: 00000025 cf280000 00000025 00000000 00000000 b6f234d0 00000000 00000004 | ||
68 | [ 79.887756] 1f80: 00000000 c003a924 c053ad38 c0013a50 fa200000 cf281fb0 ffffffff c0008530 | ||
69 | [ 79.896362] 1fa0: 0001e6a0 0000aab8 80000010 c037499c 0001e6a0 be8dab00 0001e698 00036698 | ||
70 | [ 79.904998] 1fc0: 0002df98 0002df38 0000001f 00000000 b6f234d0 00000000 00000004 00000000 | ||
71 | [ 79.913665] 1fe0: 0001e6f8 be8d6aa0 be8dac50 0000aab8 80000010 ffffffff 00fbf700 04ffff00 | ||
72 | [ 79.922302] [<c0040aa4>] (run_timer_softirq+0x16c/0x3ac) from [<c003a3b8>] (__do_softirq+0xd4/0x22c) | ||
73 | [ 79.931945] [<c003a3b8>] (__do_softirq+0xd4/0x22c) from [<c003a924>] (irq_exit+0x8c/0x94) | ||
74 | [ 79.940582] [<c003a924>] (irq_exit+0x8c/0x94) from [<c0013a50>] (handle_IRQ+0x34/0x84) | ||
75 | [ 79.948913] [<c0013a50>] (handle_IRQ+0x34/0x84) from [<c0008530>] (omap3_intc_handle_irq+0x48/0x4c) | ||
76 | [ 79.958404] [<c0008530>] (omap3_intc_handle_irq+0x48/0x4c) from [<c037499c>] (__irq_usr+0x3c/0x60) | ||
77 | [ 79.967773] Exception stack(0xcf281fb0 to 0xcf281ff8) | ||
78 | [ 79.973083] 1fa0: 0001e6a0 be8dab00 0001e698 00036698 | ||
79 | [ 79.981658] 1fc0: 0002df98 0002df38 0000001f 00000000 b6f234d0 00000000 00000004 00000000 | ||
80 | [ 79.990234] 1fe0: 0001e6f8 be8d6aa0 be8dac50 0000aab8 80000010 ffffffff | ||
81 | [ 79.997161] Code: bad PC value | ||
82 | [ 80.000396] ---[ end trace 6f6739840475f9ee ]--- | ||
83 | [ 80.005279] Kernel panic - not syncing: Fatal exception in interrupt | ||
84 | |||
85 | Signed-off-by: Johan Hovold <jhovold@gmail.com> | ||
86 | Acked-by: Marcel Holtmann <marcel@holtmann.org> | ||
87 | Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> | ||
88 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
89 | --- | ||
90 | include/net/bluetooth/hci.h | 1 + | ||
91 | net/bluetooth/hci_core.c | 7 +++++++ | ||
92 | 2 files changed, 8 insertions(+) | ||
93 | |||
94 | diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h | ||
95 | index aaf79af..a7e13bf 100644 | ||
96 | --- a/include/net/bluetooth/hci.h | ||
97 | +++ b/include/net/bluetooth/hci.h | ||
98 | @@ -84,6 +84,7 @@ enum { | ||
99 | HCI_SERVICE_CACHE, | ||
100 | HCI_LINK_KEYS, | ||
101 | HCI_DEBUG_KEYS, | ||
102 | + HCI_UNREGISTER, | ||
103 | |||
104 | HCI_RESET, | ||
105 | }; | ||
106 | diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c | ||
107 | index b84458d..857dc88 100644 | ||
108 | --- a/net/bluetooth/hci_core.c | ||
109 | +++ b/net/bluetooth/hci_core.c | ||
110 | @@ -510,6 +510,11 @@ int hci_dev_open(__u16 dev) | ||
111 | |||
112 | hci_req_lock(hdev); | ||
113 | |||
114 | + if (test_bit(HCI_UNREGISTER, &hdev->flags)) { | ||
115 | + ret = -ENODEV; | ||
116 | + goto done; | ||
117 | + } | ||
118 | + | ||
119 | if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) { | ||
120 | ret = -ERFKILL; | ||
121 | goto done; | ||
122 | @@ -1540,6 +1545,8 @@ int hci_unregister_dev(struct hci_dev *hdev) | ||
123 | |||
124 | BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus); | ||
125 | |||
126 | + set_bit(HCI_UNREGISTER, &hdev->flags); | ||
127 | + | ||
128 | write_lock_bh(&hci_dev_list_lock); | ||
129 | list_del(&hdev->list); | ||
130 | write_unlock_bh(&hci_dev_list_lock); | ||
131 | -- | ||
132 | 1.7.9.5 | ||
133 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0048-pch_gpio-Support-new-device-LAPIS-Semiconductor-ML78.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0048-pch_gpio-Support-new-device-LAPIS-Semiconductor-ML78.patch new file mode 100644 index 00000000..1f78b921 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0048-pch_gpio-Support-new-device-LAPIS-Semiconductor-ML78.patch | |||
@@ -0,0 +1,63 @@ | |||
1 | From 02f5e653d3083265e70a5cc00f050b6ec394fb83 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com> | ||
3 | Date: Fri, 28 Oct 2011 09:23:32 +0900 | ||
4 | Subject: [PATCH 48/69] pch_gpio: Support new device LAPIS Semiconductor | ||
5 | ML7831 IOH | ||
6 | |||
7 | commit 868fea0507308b6548bba7debe5f5c2d5ca47fca upstream. | ||
8 | |||
9 | ML7831 is companion chip for Intel Atom E6xx series. | ||
10 | |||
11 | Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com> | ||
12 | Signed-off-by: Grant Likely <grant.likely@secretlab.ca> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/gpio/Kconfig | 11 ++++++----- | ||
16 | drivers/gpio/gpio-pch.c | 1 + | ||
17 | 2 files changed, 7 insertions(+), 5 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig | ||
20 | index 8482a23..4e04157 100644 | ||
21 | --- a/drivers/gpio/Kconfig | ||
22 | +++ b/drivers/gpio/Kconfig | ||
23 | @@ -387,7 +387,7 @@ config GPIO_LANGWELL | ||
24 | Say Y here to support Intel Langwell/Penwell GPIO. | ||
25 | |||
26 | config GPIO_PCH | ||
27 | - tristate "Intel EG20T PCH / OKI SEMICONDUCTOR ML7223 IOH GPIO" | ||
28 | + tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7223/ML7831) GPIO" | ||
29 | depends on PCI && X86 | ||
30 | select GENERIC_IRQ_CHIP | ||
31 | help | ||
32 | @@ -395,11 +395,12 @@ config GPIO_PCH | ||
33 | which is an IOH(Input/Output Hub) for x86 embedded processor. | ||
34 | This driver can access PCH GPIO device. | ||
35 | |||
36 | - This driver also can be used for OKI SEMICONDUCTOR IOH(Input/ | ||
37 | - Output Hub), ML7223. | ||
38 | + This driver also can be used for LAPIS Semiconductor IOH(Input/ | ||
39 | + Output Hub), ML7223 and ML7831. | ||
40 | ML7223 IOH is for MP(Media Phone) use. | ||
41 | - ML7223 is companion chip for Intel Atom E6xx series. | ||
42 | - ML7223 is completely compatible for Intel EG20T PCH. | ||
43 | + ML7831 IOH is for general purpose use. | ||
44 | + ML7223/ML7831 is companion chip for Intel Atom E6xx series. | ||
45 | + ML7223/ML7831 is completely compatible for Intel EG20T PCH. | ||
46 | |||
47 | config GPIO_ML_IOH | ||
48 | tristate "OKI SEMICONDUCTOR ML7213 IOH GPIO support" | ||
49 | diff --git a/drivers/gpio/gpio-pch.c b/drivers/gpio/gpio-pch.c | ||
50 | index a6008e1..eb574f2 100644 | ||
51 | --- a/drivers/gpio/gpio-pch.c | ||
52 | +++ b/drivers/gpio/gpio-pch.c | ||
53 | @@ -524,6 +524,7 @@ static DEFINE_PCI_DEVICE_TABLE(pch_gpio_pcidev_id) = { | ||
54 | { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x8803) }, | ||
55 | { PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8014) }, | ||
56 | { PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8043) }, | ||
57 | + { PCI_DEVICE(PCI_VENDOR_ID_ROHM, 0x8803) }, | ||
58 | { 0, } | ||
59 | }; | ||
60 | MODULE_DEVICE_TABLE(pci, pch_gpio_pcidev_id); | ||
61 | -- | ||
62 | 1.7.9.5 | ||
63 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0049-gpio-Add-missing-spin_lock_init-in-gpio-pch-driver.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0049-gpio-Add-missing-spin_lock_init-in-gpio-pch-driver.patch new file mode 100644 index 00000000..23824a74 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0049-gpio-Add-missing-spin_lock_init-in-gpio-pch-driver.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From 9fb55b40aa4e085f86bfce237a482b13847fdc01 Mon Sep 17 00:00:00 2001 | ||
2 | From: Axel Lin <axel.lin@gmail.com> | ||
3 | Date: Wed, 1 Feb 2012 10:51:53 +0800 | ||
4 | Subject: [PATCH 49/69] gpio: Add missing spin_lock_init in gpio-pch driver | ||
5 | |||
6 | commit d166370ad86b33b1111af3a0cdd7de94e03789a6 upstream. | ||
7 | |||
8 | This bug was introduced by commit d568a681 | ||
9 | "gpio-pch: add spinlock in suspend/resume processing" | ||
10 | which adds a spinlock to struct pch_gpio but never init the spinlock. | ||
11 | |||
12 | Reported-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
13 | Signed-off-by: Axel Lin <axel.lin@gmail.com> | ||
14 | Acked-by: Linus Walleij <linus.walleij@linaro.org> | ||
15 | Signed-off-by: Grant Likely <grant.likely@secretlab.ca> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/gpio/gpio-pch.c | 1 + | ||
19 | 1 file changed, 1 insertion(+) | ||
20 | |||
21 | diff --git a/drivers/gpio/gpio-pch.c b/drivers/gpio/gpio-pch.c | ||
22 | index eb574f2..779ff70 100644 | ||
23 | --- a/drivers/gpio/gpio-pch.c | ||
24 | +++ b/drivers/gpio/gpio-pch.c | ||
25 | @@ -392,6 +392,7 @@ static int __devinit pch_gpio_probe(struct pci_dev *pdev, | ||
26 | chip->reg = chip->base; | ||
27 | pci_set_drvdata(pdev, chip); | ||
28 | mutex_init(&chip->lock); | ||
29 | + spin_lock_init(&chip->spinlock); | ||
30 | pch_gpio_setup(chip); | ||
31 | ret = gpiochip_add(&chip->gpio); | ||
32 | if (ret) { | ||
33 | -- | ||
34 | 1.7.9.5 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0050-usb-gadget-pch_udc-Fix-disconnect-issue.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0050-usb-gadget-pch_udc-Fix-disconnect-issue.patch new file mode 100644 index 00000000..6588e3c9 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0050-usb-gadget-pch_udc-Fix-disconnect-issue.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From 51d31aff64b1ebc13cab146aea7e34e0b9deec9a Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Thu, 12 Jan 2012 11:27:05 +0900 | ||
4 | Subject: [PATCH 50/69] usb: gadget: pch_udc: Fix disconnect issue | ||
5 | |||
6 | commit c50a3bff0edb0acd49d8033a12ea4668e09a31ad upstream. | ||
7 | |||
8 | ISSUE: | ||
9 | When the driver notifies a gadget of a disconnect event, a system | ||
10 | rarely freezes. | ||
11 | |||
12 | CAUSE: | ||
13 | When the driver calls dev->driver->disconnect(), it is not calling | ||
14 | spin_unlock(). | ||
15 | |||
16 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
17 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/usb/gadget/pch_udc.c | 5 ++++- | ||
21 | 1 file changed, 4 insertions(+), 1 deletion(-) | ||
22 | |||
23 | diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c | ||
24 | index dd2313c..521e995 100644 | ||
25 | --- a/drivers/usb/gadget/pch_udc.c | ||
26 | +++ b/drivers/usb/gadget/pch_udc.c | ||
27 | @@ -2335,8 +2335,11 @@ static void pch_udc_svc_ur_interrupt(struct pch_udc_dev *dev) | ||
28 | /* Complete request queue */ | ||
29 | empty_req_queue(ep); | ||
30 | } | ||
31 | - if (dev->driver && dev->driver->disconnect) | ||
32 | + if (dev->driver && dev->driver->disconnect) { | ||
33 | + spin_unlock(&dev->lock); | ||
34 | dev->driver->disconnect(&dev->gadget); | ||
35 | + spin_lock(&dev->lock); | ||
36 | + } | ||
37 | } | ||
38 | |||
39 | /** | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0051-usb-gadget-pch_udc-Fix-wrong-return-value.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0051-usb-gadget-pch_udc-Fix-wrong-return-value.patch new file mode 100644 index 00000000..decab7b0 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0051-usb-gadget-pch_udc-Fix-wrong-return-value.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From 8fd36443bed52de1ac27dade568e7a3d94158d13 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Thu, 12 Jan 2012 11:27:06 +0900 | ||
4 | Subject: [PATCH 51/69] usb: gadget: pch_udc: Fix wrong return value | ||
5 | |||
6 | commit c802672cd36cd063bfd54d54c8c34825ab5b2357 upstream. | ||
7 | |||
8 | ISSUE: | ||
9 | If the return value of pch_udc_pcd_init() is False, the return value of | ||
10 | this function is unsettled. | ||
11 | Since pch_udc_pcd_init() always returns 0, there is not actually the issue. | ||
12 | |||
13 | CAUSE: | ||
14 | If pch_udc_pcd_init() is True, the variable, retval, is not set for an | ||
15 | appropriate value. | ||
16 | |||
17 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
18 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/usb/gadget/pch_udc.c | 4 +++- | ||
22 | 1 file changed, 3 insertions(+), 1 deletion(-) | ||
23 | |||
24 | diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c | ||
25 | index 521e995..a9a7d8a 100644 | ||
26 | --- a/drivers/usb/gadget/pch_udc.c | ||
27 | +++ b/drivers/usb/gadget/pch_udc.c | ||
28 | @@ -2915,8 +2915,10 @@ static int pch_udc_probe(struct pci_dev *pdev, | ||
29 | } | ||
30 | pch_udc = dev; | ||
31 | /* initialize the hardware */ | ||
32 | - if (pch_udc_pcd_init(dev)) | ||
33 | + if (pch_udc_pcd_init(dev)) { | ||
34 | + retval = -ENODEV; | ||
35 | goto finished; | ||
36 | + } | ||
37 | if (request_irq(pdev->irq, pch_udc_isr, IRQF_SHARED, KBUILD_MODNAME, | ||
38 | dev)) { | ||
39 | dev_err(&pdev->dev, "%s: request_irq(%d) fail\n", __func__, | ||
40 | -- | ||
41 | 1.7.9.5 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0052-usb-gadget-pch_udc-Fix-USB-suspend-issue.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0052-usb-gadget-pch_udc-Fix-USB-suspend-issue.patch new file mode 100644 index 00000000..fda0ca92 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0052-usb-gadget-pch_udc-Fix-USB-suspend-issue.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From c0aaf320ddf17688ad75ab9f024f789b4cb89365 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Thu, 12 Jan 2012 11:27:07 +0900 | ||
4 | Subject: [PATCH 52/69] usb: gadget: pch_udc: Fix USB suspend issue | ||
5 | |||
6 | commit 84566abba058b2aae8d603dfa90b5a3778a6714f upstream. | ||
7 | |||
8 | ISSUE: | ||
9 | After USB Suspend, a system rarely freezes. | ||
10 | |||
11 | CAUSE: | ||
12 | When USB Suspend occurred, the driver is not notifying | ||
13 | a gadget of the event. | ||
14 | |||
15 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
16 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/usb/gadget/pch_udc.c | 9 ++++++++- | ||
20 | 1 file changed, 8 insertions(+), 1 deletion(-) | ||
21 | |||
22 | diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c | ||
23 | index a9a7d8a..3ab799c 100644 | ||
24 | --- a/drivers/usb/gadget/pch_udc.c | ||
25 | +++ b/drivers/usb/gadget/pch_udc.c | ||
26 | @@ -2475,8 +2475,15 @@ static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr) | ||
27 | if (dev_intr & UDC_DEVINT_SC) | ||
28 | pch_udc_svc_cfg_interrupt(dev); | ||
29 | /* USB Suspend interrupt */ | ||
30 | - if (dev_intr & UDC_DEVINT_US) | ||
31 | + if (dev_intr & UDC_DEVINT_US) { | ||
32 | + if (dev->driver | ||
33 | + && dev->driver->suspend) { | ||
34 | + spin_unlock(&dev->lock); | ||
35 | + dev->driver->suspend(&dev->gadget); | ||
36 | + spin_lock(&dev->lock); | ||
37 | + } | ||
38 | dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n"); | ||
39 | + } | ||
40 | /* Clear the SOF interrupt, if enabled */ | ||
41 | if (dev_intr & UDC_DEVINT_SOF) | ||
42 | dev_dbg(&dev->pdev->dev, "SOF\n"); | ||
43 | -- | ||
44 | 1.7.9.5 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0053-usb-gadget-pch_udc-Fix-usb-gadget-pch_udc-Fix-ether-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0053-usb-gadget-pch_udc-Fix-usb-gadget-pch_udc-Fix-ether-.patch new file mode 100644 index 00000000..379b748e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0053-usb-gadget-pch_udc-Fix-usb-gadget-pch_udc-Fix-ether-.patch | |||
@@ -0,0 +1,153 @@ | |||
1 | From 9200ef1704e7415a883be5ff751f486da1df7212 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Thu, 12 Jan 2012 11:27:08 +0900 | ||
4 | Subject: [PATCH 53/69] usb: gadget: pch_udc: Fix usb/gadget/pch_udc: Fix | ||
5 | ether gadget connect/disconnect issue | ||
6 | |||
7 | commit 1c575d2d2e3ff2a7cb3c2e2165064199cfd8ad32 upstream. | ||
8 | |||
9 | ISSUE: | ||
10 | After a USB cable is connect/disconnected, the system rarely freezes. | ||
11 | |||
12 | CAUSE: | ||
13 | Since the USB device controller cannot know to disconnect the USB cable, when | ||
14 | it is used without detecting VBUS by GPIO, the UDC driver does not notify to | ||
15 | USB Gadget. | ||
16 | |||
17 | Since USB Gadget cannot know to disconnect, a false setting occurred when the | ||
18 | USB cable is connected/disconnect repeatedly. | ||
19 | |||
20 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
21 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | drivers/usb/gadget/pch_udc.c | 70 +++++++++++++++++++++++++++++++++++++++--- | ||
25 | 1 file changed, 66 insertions(+), 4 deletions(-) | ||
26 | |||
27 | diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c | ||
28 | index 3ab799c..f232e65 100644 | ||
29 | --- a/drivers/usb/gadget/pch_udc.c | ||
30 | +++ b/drivers/usb/gadget/pch_udc.c | ||
31 | @@ -311,6 +311,7 @@ struct pch_udc_ep { | ||
32 | * @registered: driver regsitered with system | ||
33 | * @suspended: driver in suspended state | ||
34 | * @connected: gadget driver associated | ||
35 | + * @vbus_session: required vbus_session state | ||
36 | * @set_cfg_not_acked: pending acknowledgement 4 setup | ||
37 | * @waiting_zlp_ack: pending acknowledgement 4 ZLP | ||
38 | * @data_requests: DMA pool for data requests | ||
39 | @@ -337,6 +338,7 @@ struct pch_udc_dev { | ||
40 | registered:1, | ||
41 | suspended:1, | ||
42 | connected:1, | ||
43 | + vbus_session:1, | ||
44 | set_cfg_not_acked:1, | ||
45 | waiting_zlp_ack:1; | ||
46 | struct pci_pool *data_requests; | ||
47 | @@ -554,6 +556,31 @@ static void pch_udc_clear_disconnect(struct pch_udc_dev *dev) | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | + * pch_udc_reconnect() - This API initializes usb device controller, | ||
52 | + * and clear the disconnect status. | ||
53 | + * @dev: Reference to pch_udc_regs structure | ||
54 | + */ | ||
55 | +static void pch_udc_init(struct pch_udc_dev *dev); | ||
56 | +static void pch_udc_reconnect(struct pch_udc_dev *dev) | ||
57 | +{ | ||
58 | + pch_udc_init(dev); | ||
59 | + | ||
60 | + /* enable device interrupts */ | ||
61 | + /* pch_udc_enable_interrupts() */ | ||
62 | + pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, | ||
63 | + UDC_DEVINT_UR | UDC_DEVINT_US | | ||
64 | + UDC_DEVINT_ENUM | | ||
65 | + UDC_DEVINT_SI | UDC_DEVINT_SC); | ||
66 | + | ||
67 | + /* Clear the disconnect */ | ||
68 | + pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); | ||
69 | + pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_SD); | ||
70 | + mdelay(1); | ||
71 | + /* Resume USB signalling */ | ||
72 | + pch_udc_bit_clr(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); | ||
73 | +} | ||
74 | + | ||
75 | +/** | ||
76 | * pch_udc_vbus_session() - set or clearr the disconnect status. | ||
77 | * @dev: Reference to pch_udc_regs structure | ||
78 | * @is_active: Parameter specifying the action | ||
79 | @@ -563,10 +590,18 @@ static void pch_udc_clear_disconnect(struct pch_udc_dev *dev) | ||
80 | static inline void pch_udc_vbus_session(struct pch_udc_dev *dev, | ||
81 | int is_active) | ||
82 | { | ||
83 | - if (is_active) | ||
84 | - pch_udc_clear_disconnect(dev); | ||
85 | - else | ||
86 | + if (is_active) { | ||
87 | + pch_udc_reconnect(dev); | ||
88 | + dev->vbus_session = 1; | ||
89 | + } else { | ||
90 | + if (dev->driver && dev->driver->disconnect) { | ||
91 | + spin_unlock(&dev->lock); | ||
92 | + dev->driver->disconnect(&dev->gadget); | ||
93 | + spin_lock(&dev->lock); | ||
94 | + } | ||
95 | pch_udc_set_disconnect(dev); | ||
96 | + dev->vbus_session = 0; | ||
97 | + } | ||
98 | } | ||
99 | |||
100 | /** | ||
101 | @@ -1126,7 +1161,17 @@ static int pch_udc_pcd_pullup(struct usb_gadget *gadget, int is_on) | ||
102 | if (!gadget) | ||
103 | return -EINVAL; | ||
104 | dev = container_of(gadget, struct pch_udc_dev, gadget); | ||
105 | - pch_udc_vbus_session(dev, is_on); | ||
106 | + if (is_on) { | ||
107 | + pch_udc_reconnect(dev); | ||
108 | + } else { | ||
109 | + if (dev->driver && dev->driver->disconnect) { | ||
110 | + spin_unlock(&dev->lock); | ||
111 | + dev->driver->disconnect(&dev->gadget); | ||
112 | + spin_lock(&dev->lock); | ||
113 | + } | ||
114 | + pch_udc_set_disconnect(dev); | ||
115 | + } | ||
116 | + | ||
117 | return 0; | ||
118 | } | ||
119 | |||
120 | @@ -2482,6 +2527,15 @@ static void pch_udc_dev_isr(struct pch_udc_dev *dev, u32 dev_intr) | ||
121 | dev->driver->suspend(&dev->gadget); | ||
122 | spin_lock(&dev->lock); | ||
123 | } | ||
124 | + | ||
125 | + if (dev->vbus_session == 0) { | ||
126 | + if (dev->driver && dev->driver->disconnect) { | ||
127 | + spin_unlock(&dev->lock); | ||
128 | + dev->driver->disconnect(&dev->gadget); | ||
129 | + spin_lock(&dev->lock); | ||
130 | + } | ||
131 | + pch_udc_reconnect(dev); | ||
132 | + } | ||
133 | dev_dbg(&dev->pdev->dev, "USB_SUSPEND\n"); | ||
134 | } | ||
135 | /* Clear the SOF interrupt, if enabled */ | ||
136 | @@ -2509,6 +2563,14 @@ static irqreturn_t pch_udc_isr(int irq, void *pdev) | ||
137 | dev_intr = pch_udc_read_device_interrupts(dev); | ||
138 | ep_intr = pch_udc_read_ep_interrupts(dev); | ||
139 | |||
140 | + /* For a hot plug, this find that the controller is hung up. */ | ||
141 | + if (dev_intr == ep_intr) | ||
142 | + if (dev_intr == pch_udc_readl(dev, UDC_DEVCFG_ADDR)) { | ||
143 | + dev_dbg(&dev->pdev->dev, "UDC: Hung up\n"); | ||
144 | + /* The controller is reset */ | ||
145 | + pch_udc_writel(dev, UDC_SRST, UDC_SRST_ADDR); | ||
146 | + return IRQ_HANDLED; | ||
147 | + } | ||
148 | if (dev_intr) | ||
149 | /* Clear device interrupts */ | ||
150 | pch_udc_write_device_interrupts(dev, dev_intr); | ||
151 | -- | ||
152 | 1.7.9.5 | ||
153 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0054-usb-gadget-pch_udc-Reduce-redundant-interrupt.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0054-usb-gadget-pch_udc-Reduce-redundant-interrupt.patch new file mode 100644 index 00000000..3322abf0 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0054-usb-gadget-pch_udc-Reduce-redundant-interrupt.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | From 841c06ccc583055a42b0546efb5e6b448f26d5fd Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Thu, 12 Jan 2012 11:27:09 +0900 | ||
4 | Subject: [PATCH 54/69] usb: gadget: pch_udc: Reduce redundant interrupt | ||
5 | |||
6 | commit 833310402c54ad9b676b465fc53ad276b13d36be upstream. | ||
7 | |||
8 | ISSUE: | ||
9 | USB Suspend interrupts occur frequently. | ||
10 | |||
11 | CAUSE: | ||
12 | When it is called pch_udc_reconnect() in USB Suspend, it repeats reset and | ||
13 | Suspend. | ||
14 | |||
15 | SOLUTION: | ||
16 | pch_udc_reconnect() does not enable all interrupts. When an enumeration event | ||
17 | occurred the driver enables all interrupts. | ||
18 | |||
19 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
20 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/usb/gadget/pch_udc.c | 9 ++++++--- | ||
24 | 1 file changed, 6 insertions(+), 3 deletions(-) | ||
25 | |||
26 | diff --git a/drivers/usb/gadget/pch_udc.c b/drivers/usb/gadget/pch_udc.c | ||
27 | index f232e65..870897ac 100644 | ||
28 | --- a/drivers/usb/gadget/pch_udc.c | ||
29 | +++ b/drivers/usb/gadget/pch_udc.c | ||
30 | @@ -568,9 +568,7 @@ static void pch_udc_reconnect(struct pch_udc_dev *dev) | ||
31 | /* enable device interrupts */ | ||
32 | /* pch_udc_enable_interrupts() */ | ||
33 | pch_udc_bit_clr(dev, UDC_DEVIRQMSK_ADDR, | ||
34 | - UDC_DEVINT_UR | UDC_DEVINT_US | | ||
35 | - UDC_DEVINT_ENUM | | ||
36 | - UDC_DEVINT_SI | UDC_DEVINT_SC); | ||
37 | + UDC_DEVINT_UR | UDC_DEVINT_ENUM); | ||
38 | |||
39 | /* Clear the disconnect */ | ||
40 | pch_udc_bit_set(dev, UDC_DEVCTL_ADDR, UDC_DEVCTL_RES); | ||
41 | @@ -2419,6 +2417,11 @@ static void pch_udc_svc_enum_interrupt(struct pch_udc_dev *dev) | ||
42 | pch_udc_set_dma(dev, DMA_DIR_TX); | ||
43 | pch_udc_set_dma(dev, DMA_DIR_RX); | ||
44 | pch_udc_ep_set_rrdy(&(dev->ep[UDC_EP0OUT_IDX])); | ||
45 | + | ||
46 | + /* enable device interrupts */ | ||
47 | + pch_udc_enable_interrupts(dev, UDC_DEVINT_UR | UDC_DEVINT_US | | ||
48 | + UDC_DEVINT_ES | UDC_DEVINT_ENUM | | ||
49 | + UDC_DEVINT_SI | UDC_DEVINT_SC); | ||
50 | } | ||
51 | |||
52 | /** | ||
53 | -- | ||
54 | 1.7.9.5 | ||
55 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0055-ACPICA-Fix-to-allow-region-arguments-to-reference-ot.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0055-ACPICA-Fix-to-allow-region-arguments-to-reference-ot.patch new file mode 100644 index 00000000..996c5fd4 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0055-ACPICA-Fix-to-allow-region-arguments-to-reference-ot.patch | |||
@@ -0,0 +1,82 @@ | |||
1 | From 0584e8b8127ffeb0de3d56313113727fab87aff5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Lin Ming <ming.m.lin@intel.com> | ||
3 | Date: Mon, 28 Nov 2011 09:46:02 +0800 | ||
4 | Subject: [PATCH 55/69] ACPICA: Fix to allow region arguments to reference | ||
5 | other scopes | ||
6 | |||
7 | commit 8931d9ea78848b073bf299594f148b83abde4a5e upstream. | ||
8 | |||
9 | Allow referenced objects to be in a different scope. | ||
10 | |||
11 | http://www.acpica.org/bugzilla/show_bug.cgi?id=937 | ||
12 | http://marc.info/?l=linux-acpi&m=131636632718222&w=2 | ||
13 | |||
14 | ACPI Error: [RAMB] Namespace lookup failure, AE_NOT_FOUND (20110112/psargs-359) | ||
15 | ACPI Exception: AE_NOT_FOUND, Could not execute arguments for [RAMW] (Region) (20110112/nsinit-349) | ||
16 | |||
17 | Scope (_SB) | ||
18 | { | ||
19 | Name (RAMB, 0xDF5A1018) | ||
20 | OperationRegion (\RAMW, SystemMemory, RAMB, 0x00010000) | ||
21 | } | ||
22 | |||
23 | For above ASL code, we need to save scope node(\_SB) to lookup | ||
24 | the argument node(\_SB.RAMB). | ||
25 | |||
26 | Reported-by: Jim Green <student.northwestern@gmail.com> | ||
27 | Signed-off-by: Lin Ming <ming.m.lin@intel.com> | ||
28 | Signed-off-by: Bob Moore <robert.moore@intel.com> | ||
29 | Signed-off-by: Len Brown <len.brown@intel.com> | ||
30 | Cc: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com> | ||
31 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
32 | --- | ||
33 | drivers/acpi/acpica/acobject.h | 1 + | ||
34 | drivers/acpi/acpica/dsargs.c | 2 +- | ||
35 | drivers/acpi/acpica/excreate.c | 6 ++++++ | ||
36 | 3 files changed, 8 insertions(+), 1 deletion(-) | ||
37 | |||
38 | diff --git a/drivers/acpi/acpica/acobject.h b/drivers/acpi/acpica/acobject.h | ||
39 | index 1055769..6d276c2 100644 | ||
40 | --- a/drivers/acpi/acpica/acobject.h | ||
41 | +++ b/drivers/acpi/acpica/acobject.h | ||
42 | @@ -358,6 +358,7 @@ typedef enum { | ||
43 | */ | ||
44 | struct acpi_object_extra { | ||
45 | ACPI_OBJECT_COMMON_HEADER struct acpi_namespace_node *method_REG; /* _REG method for this region (if any) */ | ||
46 | + struct acpi_namespace_node *scope_node; | ||
47 | void *region_context; /* Region-specific data */ | ||
48 | u8 *aml_start; | ||
49 | u32 aml_length; | ||
50 | diff --git a/drivers/acpi/acpica/dsargs.c b/drivers/acpi/acpica/dsargs.c | ||
51 | index 42163d8..d69e4a5 100644 | ||
52 | --- a/drivers/acpi/acpica/dsargs.c | ||
53 | +++ b/drivers/acpi/acpica/dsargs.c | ||
54 | @@ -384,7 +384,7 @@ acpi_status acpi_ds_get_region_arguments(union acpi_operand_object *obj_desc) | ||
55 | |||
56 | /* Execute the argument AML */ | ||
57 | |||
58 | - status = acpi_ds_execute_arguments(node, node->parent, | ||
59 | + status = acpi_ds_execute_arguments(node, extra_desc->extra.scope_node, | ||
60 | extra_desc->extra.aml_length, | ||
61 | extra_desc->extra.aml_start); | ||
62 | if (ACPI_FAILURE(status)) { | ||
63 | diff --git a/drivers/acpi/acpica/excreate.c b/drivers/acpi/acpica/excreate.c | ||
64 | index 110711a..8a06dc5 100644 | ||
65 | --- a/drivers/acpi/acpica/excreate.c | ||
66 | +++ b/drivers/acpi/acpica/excreate.c | ||
67 | @@ -330,6 +330,12 @@ acpi_ex_create_region(u8 * aml_start, | ||
68 | region_obj2 = obj_desc->common.next_object; | ||
69 | region_obj2->extra.aml_start = aml_start; | ||
70 | region_obj2->extra.aml_length = aml_length; | ||
71 | + if (walk_state->scope_info) { | ||
72 | + region_obj2->extra.scope_node = | ||
73 | + walk_state->scope_info->scope.node; | ||
74 | + } else { | ||
75 | + region_obj2->extra.scope_node = node; | ||
76 | + } | ||
77 | |||
78 | /* Init the region from the operands */ | ||
79 | |||
80 | -- | ||
81 | 1.7.9.5 | ||
82 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0056-security-fix-compile-error-in-commoncap.c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0056-security-fix-compile-error-in-commoncap.c.patch new file mode 100644 index 00000000..e40edbea --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0056-security-fix-compile-error-in-commoncap.c.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From c44baf116ced749a5017ab4f36a808c4aad7c39c Mon Sep 17 00:00:00 2001 | ||
2 | From: Jonghwan Choi <jhbird.choi@samsung.com> | ||
3 | Date: Wed, 18 Apr 2012 17:23:04 -0400 | ||
4 | Subject: [PATCH 56/69] security: fix compile error in commoncap.c | ||
5 | |||
6 | commit 51b79bee627d526199b2f6a6bef8ee0c0739b6d1 upstream. | ||
7 | |||
8 | Add missing "personality.h" | ||
9 | security/commoncap.c: In function 'cap_bprm_set_creds': | ||
10 | security/commoncap.c:510: error: 'PER_CLEAR_ON_SETID' undeclared (first use in this function) | ||
11 | security/commoncap.c:510: error: (Each undeclared identifier is reported only once | ||
12 | security/commoncap.c:510: error: for each function it appears in.) | ||
13 | |||
14 | Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com> | ||
15 | Acked-by: Serge Hallyn <serge.hallyn@canonical.com> | ||
16 | Signed-off-by: James Morris <james.l.morris@oracle.com> | ||
17 | Cc: Eric Paris <eparis@redhat.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | security/commoncap.c | 1 + | ||
21 | 1 file changed, 1 insertion(+) | ||
22 | |||
23 | diff --git a/security/commoncap.c b/security/commoncap.c | ||
24 | index 0aee106..12440ee 100644 | ||
25 | --- a/security/commoncap.c | ||
26 | +++ b/security/commoncap.c | ||
27 | @@ -28,6 +28,7 @@ | ||
28 | #include <linux/prctl.h> | ||
29 | #include <linux/securebits.h> | ||
30 | #include <linux/user_namespace.h> | ||
31 | +#include <linux/personality.h> | ||
32 | |||
33 | /* | ||
34 | * If a non-root user executes a setuid-root binary in | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0057-pch_gbe-Do-not-abort-probe-on-bad-MAC.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0057-pch_gbe-Do-not-abort-probe-on-bad-MAC.patch new file mode 100644 index 00000000..0b69021b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0057-pch_gbe-Do-not-abort-probe-on-bad-MAC.patch | |||
@@ -0,0 +1,81 @@ | |||
1 | From 56bfb17ce9aba57b7bd205d7828d4f3d9935276e Mon Sep 17 00:00:00 2001 | ||
2 | From: Darren Hart <dvhart@linux.intel.com> | ||
3 | Date: Mon, 16 Jan 2012 09:50:19 +0000 | ||
4 | Subject: [PATCH 57/69] pch_gbe: Do not abort probe on bad MAC | ||
5 | |||
6 | commit 2b53d07891630dead46d65c8f896955fd3ae0302 upstream. | ||
7 | |||
8 | If the MAC is invalid or not implemented, do not abort the probe. Issue | ||
9 | a warning and prevent bringing the interface up until a MAC is set manually | ||
10 | (via ifconfig $IFACE hw ether $MAC). | ||
11 | |||
12 | Tested on two platforms, one with a valid MAC, the other without a MAC. The real | ||
13 | MAC is used if present, the interface fails to come up until the MAC is set on | ||
14 | the other. They successfully get an IP over DHCP and pass a simple ping and | ||
15 | login over ssh test. | ||
16 | |||
17 | This is meant to allow the Inforce SYS940X development board: | ||
18 | http://www.inforcecomputing.com/SYS940X_ECX.html | ||
19 | (and others suffering from a missing MAC) to work with the mainline kernel. | ||
20 | Without this patch, the probe will fail and the interface will not be created, | ||
21 | preventing the user from configuring the MAC manually. | ||
22 | |||
23 | This does not make any attempt to address a missing or invalid MAC for the | ||
24 | pch_phub driver. | ||
25 | |||
26 | Signed-off-by: Darren Hart <dvhart@linux.intel.com> | ||
27 | CC: Arjan van de Ven <arjan@linux.intel.com> | ||
28 | CC: Alan Cox <alan@linux.intel.com> | ||
29 | CC: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
30 | CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com> | ||
31 | CC: "David S. Miller" <davem@davemloft.net> | ||
32 | CC: Paul Gortmaker <paul.gortmaker@windriver.com> | ||
33 | CC: Jon Mason <jdmason@kudzu.us> | ||
34 | CC: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
35 | CC: David Laight <David.Laight@ACULAB.COM> | ||
36 | CC: Joe Perches <joe@perches.com> | ||
37 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
38 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
39 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
40 | --- | ||
41 | .../net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 17 ++++++++++++++--- | ||
42 | 1 file changed, 14 insertions(+), 3 deletions(-) | ||
43 | |||
44 | diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | ||
45 | index 48406ca..43c7b25 100644 | ||
46 | --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | ||
47 | +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | ||
48 | @@ -1745,6 +1745,12 @@ int pch_gbe_up(struct pch_gbe_adapter *adapter) | ||
49 | struct pch_gbe_rx_ring *rx_ring = adapter->rx_ring; | ||
50 | int err; | ||
51 | |||
52 | + /* Ensure we have a valid MAC */ | ||
53 | + if (!is_valid_ether_addr(adapter->hw.mac.addr)) { | ||
54 | + pr_err("Error: Invalid MAC address\n"); | ||
55 | + return -EINVAL; | ||
56 | + } | ||
57 | + | ||
58 | /* hardware has been reset, we need to reload some things */ | ||
59 | pch_gbe_set_multi(netdev); | ||
60 | |||
61 | @@ -2467,9 +2473,14 @@ static int pch_gbe_probe(struct pci_dev *pdev, | ||
62 | |||
63 | memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len); | ||
64 | if (!is_valid_ether_addr(netdev->dev_addr)) { | ||
65 | - dev_err(&pdev->dev, "Invalid MAC Address\n"); | ||
66 | - ret = -EIO; | ||
67 | - goto err_free_adapter; | ||
68 | + /* | ||
69 | + * If the MAC is invalid (or just missing), display a warning | ||
70 | + * but do not abort setting up the device. pch_gbe_up will | ||
71 | + * prevent the interface from being brought up until a valid MAC | ||
72 | + * is set. | ||
73 | + */ | ||
74 | + dev_err(&pdev->dev, "Invalid MAC address, " | ||
75 | + "interface disabled.\n"); | ||
76 | } | ||
77 | setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog, | ||
78 | (unsigned long)adapter); | ||
79 | -- | ||
80 | 1.7.9.5 | ||
81 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0058-pch_gbe-memory-corruption-calling-pch_gbe_validate_o.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0058-pch_gbe-memory-corruption-calling-pch_gbe_validate_o.patch new file mode 100644 index 00000000..1c4d0da3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0058-pch_gbe-memory-corruption-calling-pch_gbe_validate_o.patch | |||
@@ -0,0 +1,56 @@ | |||
1 | From aa636350865960bf05da0427e6129a09787b9a8e Mon Sep 17 00:00:00 2001 | ||
2 | From: Dan Carpenter <dan.carpenter@oracle.com> | ||
3 | Date: Wed, 29 Feb 2012 21:17:08 +0000 | ||
4 | Subject: [PATCH 58/69] pch_gbe: memory corruption calling | ||
5 | pch_gbe_validate_option() | ||
6 | |||
7 | commit 73f98eab9b9e0bab492ca06add5657d9e702ddb1 upstream. | ||
8 | |||
9 | pch_gbe_validate_option() modifies 32 bits of memory but we pass | ||
10 | &hw->phy.autoneg_advertised which only has 16 bits and &hw->mac.fc | ||
11 | which only has 8 bits. | ||
12 | |||
13 | Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> | ||
14 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
15 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | .../net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | 15 ++++++++------- | ||
19 | 1 file changed, 8 insertions(+), 7 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | ||
22 | index 9cb5f91..29e23be 100644 | ||
23 | --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | ||
24 | +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | ||
25 | @@ -321,10 +321,10 @@ static void pch_gbe_check_copper_options(struct pch_gbe_adapter *adapter) | ||
26 | pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); | ||
27 | hw->phy.autoneg_advertised = opt.def; | ||
28 | } else { | ||
29 | - hw->phy.autoneg_advertised = AutoNeg; | ||
30 | - pch_gbe_validate_option( | ||
31 | - (int *)(&hw->phy.autoneg_advertised), | ||
32 | - &opt, adapter); | ||
33 | + int tmp = AutoNeg; | ||
34 | + | ||
35 | + pch_gbe_validate_option(&tmp, &opt, adapter); | ||
36 | + hw->phy.autoneg_advertised = tmp; | ||
37 | } | ||
38 | } | ||
39 | |||
40 | @@ -495,9 +495,10 @@ void pch_gbe_check_options(struct pch_gbe_adapter *adapter) | ||
41 | .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), | ||
42 | .p = fc_list } } | ||
43 | }; | ||
44 | - hw->mac.fc = FlowControl; | ||
45 | - pch_gbe_validate_option((int *)(&hw->mac.fc), | ||
46 | - &opt, adapter); | ||
47 | + int tmp = FlowControl; | ||
48 | + | ||
49 | + pch_gbe_validate_option(&tmp, &opt, adapter); | ||
50 | + hw->mac.fc = tmp; | ||
51 | } | ||
52 | |||
53 | pch_gbe_check_copper_options(adapter); | ||
54 | -- | ||
55 | 1.7.9.5 | ||
56 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0059-pch_dma-Support-new-device-LAPIS-Semiconductor-ML783.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0059-pch_dma-Support-new-device-LAPIS-Semiconductor-ML783.patch new file mode 100644 index 00000000..dd77d52e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0059-pch_dma-Support-new-device-LAPIS-Semiconductor-ML783.patch | |||
@@ -0,0 +1,82 @@ | |||
1 | From b9ec954fcea6867cd78e33f003ce6c11a8c1b217 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
3 | Date: Thu, 17 Nov 2011 16:14:23 +0900 | ||
4 | Subject: [PATCH 59/69] pch_dma: Support new device LAPIS Semiconductor ML7831 | ||
5 | IOH | ||
6 | |||
7 | commit ca7fe2db892dcf91b2c72ee352eda4ff867903a7 upstream. | ||
8 | |||
9 | ML7831 is companion chip for Intel Atom E6xx series. | ||
10 | |||
11 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
12 | Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/dma/Kconfig | 13 ++++++------- | ||
16 | drivers/dma/pch_dma.c | 8 ++++++-- | ||
17 | 2 files changed, 12 insertions(+), 9 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig | ||
20 | index 5a99bb3..da85c0d 100644 | ||
21 | --- a/drivers/dma/Kconfig | ||
22 | +++ b/drivers/dma/Kconfig | ||
23 | @@ -201,18 +201,17 @@ config PL330_DMA | ||
24 | platform_data for a dma-pl330 device. | ||
25 | |||
26 | config PCH_DMA | ||
27 | - tristate "Intel EG20T PCH / OKI Semi IOH(ML7213/ML7223) DMA support" | ||
28 | + tristate "Intel EG20T PCH / OKI Semi IOH(ML7213/ML7223/ML7831) DMA support" | ||
29 | depends on PCI && X86 | ||
30 | select DMA_ENGINE | ||
31 | help | ||
32 | Enable support for Intel EG20T PCH DMA engine. | ||
33 | - | ||
34 | This driver also can be used for OKI SEMICONDUCTOR IOH(Input/ | ||
35 | - Output Hub), ML7213 and ML7223. | ||
36 | - ML7213 IOH is for IVI(In-Vehicle Infotainment) use and ML7223 IOH is | ||
37 | - for MP(Media Phone) use. | ||
38 | - ML7213/ML7223 is companion chip for Intel Atom E6xx series. | ||
39 | - ML7213/ML7223 is completely compatible for Intel EG20T PCH. | ||
40 | + Output Hub), ML7213, ML7223 and ML7831. | ||
41 | + ML7213 IOH is for IVI(In-Vehicle Infotainment) use, ML7223 IOH is | ||
42 | + for MP(Media Phone) use and ML7831 IOH is for general purpose use. | ||
43 | + ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series. | ||
44 | + ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH. | ||
45 | |||
46 | config IMX_SDMA | ||
47 | tristate "i.MX SDMA support" | ||
48 | diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c | ||
49 | index a6d0e3d..629c430 100644 | ||
50 | --- a/drivers/dma/pch_dma.c | ||
51 | +++ b/drivers/dma/pch_dma.c | ||
52 | @@ -1018,6 +1018,8 @@ static void __devexit pch_dma_remove(struct pci_dev *pdev) | ||
53 | #define PCI_DEVICE_ID_ML7223_DMA2_4CH 0x800E | ||
54 | #define PCI_DEVICE_ID_ML7223_DMA3_4CH 0x8017 | ||
55 | #define PCI_DEVICE_ID_ML7223_DMA4_4CH 0x803B | ||
56 | +#define PCI_DEVICE_ID_ML7831_DMA1_8CH 0x8810 | ||
57 | +#define PCI_DEVICE_ID_ML7831_DMA2_4CH 0x8815 | ||
58 | |||
59 | DEFINE_PCI_DEVICE_TABLE(pch_dma_id_table) = { | ||
60 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_EG20T_PCH_DMA_8CH), 8 }, | ||
61 | @@ -1030,6 +1032,8 @@ DEFINE_PCI_DEVICE_TABLE(pch_dma_id_table) = { | ||
62 | { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_DMA2_4CH), 4}, /* Video SPI */ | ||
63 | { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_DMA3_4CH), 4}, /* Security */ | ||
64 | { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_DMA4_4CH), 4}, /* FPGA */ | ||
65 | + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_DMA1_8CH), 8}, /* UART */ | ||
66 | + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_DMA2_4CH), 4}, /* SPI */ | ||
67 | { 0, }, | ||
68 | }; | ||
69 | |||
70 | @@ -1057,7 +1061,7 @@ static void __exit pch_dma_exit(void) | ||
71 | module_init(pch_dma_init); | ||
72 | module_exit(pch_dma_exit); | ||
73 | |||
74 | -MODULE_DESCRIPTION("Intel EG20T PCH / OKI SEMICONDUCTOR ML7213 IOH " | ||
75 | - "DMA controller driver"); | ||
76 | +MODULE_DESCRIPTION("Intel EG20T PCH / OKI SEMICON ML7213/ML7223/ML7831 IOH" | ||
77 | + "DMA controller driver"); | ||
78 | MODULE_AUTHOR("Yong Wang <yong.y.wang@intel.com>"); | ||
79 | MODULE_LICENSE("GPL v2"); | ||
80 | -- | ||
81 | 1.7.9.5 | ||
82 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0060-spi-topcliff-pch-fix-Wuninitialized-warning.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0060-spi-topcliff-pch-fix-Wuninitialized-warning.patch new file mode 100644 index 00000000..9b5bc86d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0060-spi-topcliff-pch-fix-Wuninitialized-warning.patch | |||
@@ -0,0 +1,82 @@ | |||
1 | From 799b889232ef93a544b5b580bc8fb1178c27adbe Mon Sep 17 00:00:00 2001 | ||
2 | From: Danny Kukawka <danny.kukawka@bisect.de> | ||
3 | Date: Tue, 14 Feb 2012 15:35:03 +0100 | ||
4 | Subject: [PATCH 60/69] spi-topcliff-pch: fix -Wuninitialized warning | ||
5 | MIME-Version: 1.0 | ||
6 | Content-Type: text/plain; charset=UTF-8 | ||
7 | Content-Transfer-Encoding: 8bit | ||
8 | |||
9 | commit de3bd7e6de25141c466773c2e0fa319b2fa93655 upstream. | ||
10 | |||
11 | Fix for: | ||
12 | drivers/spi/spi-topcliff-pch.c: In function ‘pch_spi_handler_sub’: | ||
13 | drivers/spi/spi-topcliff-pch.c:325:17: warning: ‘bpw_len’ may be | ||
14 | used uninitialized in this function [-Wuninitialized] | ||
15 | drivers/spi/spi-topcliff-pch.c:325:42: warning: ‘rx_index’ may be | ||
16 | used uninitialized in this function [-Wuninitialized] | ||
17 | drivers/spi/spi-topcliff-pch.c:325:42: warning: ‘tx_index’ may be | ||
18 | used uninitialized in this function [-Wuninitialized] | ||
19 | |||
20 | Move usage of tx_index, rx_index and bpw_len into the same | ||
21 | block as where they are set to prevent uninitialized usage. | ||
22 | |||
23 | v2: instead of init variables with 0 move the whole block | ||
24 | |||
25 | [This patch title "warnings" makes you think "This patch is not | ||
26 | for bug fix". However, this patch surely patch for bug fix.] | ||
27 | |||
28 | Signed-off-by: Danny Kukawka <danny.kukawka@bisect.de> | ||
29 | Signed-off-by: Grant Likely <grant.likely@secretlab.ca> | ||
30 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
31 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
32 | --- | ||
33 | drivers/spi/spi-topcliff-pch.c | 33 +++++++++++++++++---------------- | ||
34 | 1 file changed, 17 insertions(+), 16 deletions(-) | ||
35 | |||
36 | diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c | ||
37 | index 027b6d0..ec50541 100644 | ||
38 | --- a/drivers/spi/spi-topcliff-pch.c | ||
39 | +++ b/drivers/spi/spi-topcliff-pch.c | ||
40 | @@ -315,22 +315,23 @@ static void pch_spi_handler_sub(struct pch_spi_data *data, u32 reg_spsr_val, | ||
41 | data->tx_index = tx_index; | ||
42 | data->rx_index = rx_index; | ||
43 | |||
44 | - } | ||
45 | - | ||
46 | - /* if transfer complete interrupt */ | ||
47 | - if (reg_spsr_val & SPSR_FI_BIT) { | ||
48 | - if ((tx_index == bpw_len) && (rx_index == tx_index)) { | ||
49 | - /* disable interrupts */ | ||
50 | - pch_spi_setclr_reg(data->master, PCH_SPCR, 0, PCH_ALL); | ||
51 | - | ||
52 | - /* transfer is completed; | ||
53 | - inform pch_spi_process_messages */ | ||
54 | - data->transfer_complete = true; | ||
55 | - data->transfer_active = false; | ||
56 | - wake_up(&data->wait); | ||
57 | - } else { | ||
58 | - dev_err(&data->master->dev, | ||
59 | - "%s : Transfer is not completed", __func__); | ||
60 | + /* if transfer complete interrupt */ | ||
61 | + if (reg_spsr_val & SPSR_FI_BIT) { | ||
62 | + if ((tx_index == bpw_len) && (rx_index == tx_index)) { | ||
63 | + /* disable interrupts */ | ||
64 | + pch_spi_setclr_reg(data->master, PCH_SPCR, 0, | ||
65 | + PCH_ALL); | ||
66 | + | ||
67 | + /* transfer is completed; | ||
68 | + inform pch_spi_process_messages */ | ||
69 | + data->transfer_complete = true; | ||
70 | + data->transfer_active = false; | ||
71 | + wake_up(&data->wait); | ||
72 | + } else { | ||
73 | + dev_err(&data->master->dev, | ||
74 | + "%s : Transfer is not completed", | ||
75 | + __func__); | ||
76 | + } | ||
77 | } | ||
78 | } | ||
79 | } | ||
80 | -- | ||
81 | 1.7.9.5 | ||
82 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0061-spi-topcliff-pch-Support-new-device-LAPIS-Semiconduc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0061-spi-topcliff-pch-Support-new-device-LAPIS-Semiconduc.patch new file mode 100644 index 00000000..0bef575b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0061-spi-topcliff-pch-Support-new-device-LAPIS-Semiconduc.patch | |||
@@ -0,0 +1,76 @@ | |||
1 | From 77fac631e9296a678208e031ca3b47a644a64bb8 Mon Sep 17 00:00:00 2001 | ||
2 | From: Tomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com> | ||
3 | Date: Fri, 28 Oct 2011 09:35:21 +0900 | ||
4 | Subject: [PATCH 61/69] spi-topcliff-pch: Support new device LAPIS | ||
5 | Semiconductor ML7831 IOH | ||
6 | |||
7 | commit 92b3a5c1bc3c7da1ae4675d014124f4a97ddb632 upstream. | ||
8 | |||
9 | ML7831 is companion chip for Intel Atom E6xx series. | ||
10 | |||
11 | Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com> | ||
12 | Signed-off-by: Grant Likely <grant.likely@secretlab.ca> | ||
13 | Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/spi/Kconfig | 6 +++--- | ||
17 | drivers/spi/spi-topcliff-pch.c | 5 ++++- | ||
18 | 2 files changed, 7 insertions(+), 4 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig | ||
21 | index 8ba4510..7587796 100644 | ||
22 | --- a/drivers/spi/Kconfig | ||
23 | +++ b/drivers/spi/Kconfig | ||
24 | @@ -346,14 +346,14 @@ config SPI_TI_SSP | ||
25 | serial port. | ||
26 | |||
27 | config SPI_TOPCLIFF_PCH | ||
28 | - tristate "Intel EG20T PCH/OKI SEMICONDUCTOR ML7213 IOH SPI controller" | ||
29 | + tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) SPI" | ||
30 | depends on PCI | ||
31 | help | ||
32 | SPI driver for the Topcliff PCH (Platform Controller Hub) SPI bus | ||
33 | used in some x86 embedded processors. | ||
34 | |||
35 | - This driver also supports the ML7213, a companion chip for the | ||
36 | - Atom E6xx series and compatible with the Intel EG20T PCH. | ||
37 | + This driver also supports the ML7213/ML7223/ML7831, a companion chip | ||
38 | + for the Atom E6xx series and compatible with the Intel EG20T PCH. | ||
39 | |||
40 | config SPI_TXX9 | ||
41 | tristate "Toshiba TXx9 SPI controller" | ||
42 | diff --git a/drivers/spi/spi-topcliff-pch.c b/drivers/spi/spi-topcliff-pch.c | ||
43 | index ec50541..54b9d2e 100644 | ||
44 | --- a/drivers/spi/spi-topcliff-pch.c | ||
45 | +++ b/drivers/spi/spi-topcliff-pch.c | ||
46 | @@ -95,16 +95,18 @@ | ||
47 | #define PCH_CLOCK_HZ 50000000 | ||
48 | #define PCH_MAX_SPBR 1023 | ||
49 | |||
50 | -/* Definition for ML7213 by OKI SEMICONDUCTOR */ | ||
51 | +/* Definition for ML7213/ML7831 by OKI SEMICONDUCTOR */ | ||
52 | #define PCI_VENDOR_ID_ROHM 0x10DB | ||
53 | #define PCI_DEVICE_ID_ML7213_SPI 0x802c | ||
54 | #define PCI_DEVICE_ID_ML7223_SPI 0x800F | ||
55 | +#define PCI_DEVICE_ID_ML7831_SPI 0x8816 | ||
56 | |||
57 | /* | ||
58 | * Set the number of SPI instance max | ||
59 | * Intel EG20T PCH : 1ch | ||
60 | * OKI SEMICONDUCTOR ML7213 IOH : 2ch | ||
61 | * OKI SEMICONDUCTOR ML7223 IOH : 1ch | ||
62 | + * OKI SEMICONDUCTOR ML7831 IOH : 1ch | ||
63 | */ | ||
64 | #define PCH_SPI_MAX_DEV 2 | ||
65 | |||
66 | @@ -218,6 +220,7 @@ static struct pci_device_id pch_spi_pcidev_id[] = { | ||
67 | { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_GE_SPI), 1, }, | ||
68 | { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7213_SPI), 2, }, | ||
69 | { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7223_SPI), 1, }, | ||
70 | + { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_SPI), 1, }, | ||
71 | { } | ||
72 | }; | ||
73 | |||
74 | -- | ||
75 | 1.7.9.5 | ||
76 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0062-Bluetooth-Adding-USB-device-13d3-3375-as-an-Atheros-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0062-Bluetooth-Adding-USB-device-13d3-3375-as-an-Atheros-.patch new file mode 100644 index 00000000..471914c1 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0062-Bluetooth-Adding-USB-device-13d3-3375-as-an-Atheros-.patch | |||
@@ -0,0 +1,67 @@ | |||
1 | From efa82e03e24743425f4cb3d3632f29756b70d5b5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Eran <eran@over-here.org> | ||
3 | Date: Mon, 5 Dec 2011 22:15:29 +0000 | ||
4 | Subject: [PATCH 62/69] Bluetooth: Adding USB device 13d3:3375 as an Atheros | ||
5 | AR3012. | ||
6 | |||
7 | commit 9498ba7a1d38d42eef4ef6d906ab1743c9f0fd6f upstream. | ||
8 | |||
9 | The bluetooth module in the Asus UX31/UX21 is based on Atheros AR3012 | ||
10 | and requires a firmware to be uploaded before it's usable. | ||
11 | |||
12 | output of usb-devices for this module: | ||
13 | T: Bus=01 Lev=02 Prnt=02 Port=07 Cnt=03 Dev#= 6 Spd=12 MxCh= 0 | ||
14 | D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 | ||
15 | P: Vendor=13d3 ProdID=3375 Rev=00.02 | ||
16 | S: Manufacturer=Atheros Communications | ||
17 | S: Product=Bluetooth USB Host Controller | ||
18 | S: SerialNumber=Alaska Day 2006 | ||
19 | C: #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA | ||
20 | I: If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
21 | I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
22 | |||
23 | Signed-off-by: Eran <eran@over-here.org> | ||
24 | Tested-by: Michal Labedzki <michal.labedzki@tieto.com> | ||
25 | Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi> | ||
26 | Cc: Jonathan Nieder <jrnieder@gmail.com> | ||
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
28 | --- | ||
29 | drivers/bluetooth/ath3k.c | 2 ++ | ||
30 | drivers/bluetooth/btusb.c | 1 + | ||
31 | 2 files changed, 3 insertions(+) | ||
32 | |||
33 | diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c | ||
34 | index db811d2..67a79b0 100644 | ||
35 | --- a/drivers/bluetooth/ath3k.c | ||
36 | +++ b/drivers/bluetooth/ath3k.c | ||
37 | @@ -71,6 +71,7 @@ static struct usb_device_id ath3k_table[] = { | ||
38 | |||
39 | /* Atheros AR3012 with sflash firmware*/ | ||
40 | { USB_DEVICE(0x0CF3, 0x3004) }, | ||
41 | + { USB_DEVICE(0x13d3, 0x3375) }, | ||
42 | |||
43 | /* Atheros AR5BBU12 with sflash firmware */ | ||
44 | { USB_DEVICE(0x0489, 0xE02C) }, | ||
45 | @@ -87,6 +88,7 @@ static struct usb_device_id ath3k_blist_tbl[] = { | ||
46 | |||
47 | /* Atheros AR3012 with sflash firmware*/ | ||
48 | { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, | ||
49 | + { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, | ||
50 | |||
51 | { } /* Terminating entry */ | ||
52 | }; | ||
53 | diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c | ||
54 | index c16c750..df0331a 100644 | ||
55 | --- a/drivers/bluetooth/btusb.c | ||
56 | +++ b/drivers/bluetooth/btusb.c | ||
57 | @@ -126,6 +126,7 @@ static struct usb_device_id blacklist_table[] = { | ||
58 | |||
59 | /* Atheros 3012 with sflash firmware */ | ||
60 | { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, | ||
61 | + { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, | ||
62 | |||
63 | /* Atheros AR5BBU12 with sflash firmware */ | ||
64 | { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, | ||
65 | -- | ||
66 | 1.7.9.5 | ||
67 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0063-Bluetooth-Add-Atheros-maryann-PIDVID-support.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0063-Bluetooth-Add-Atheros-maryann-PIDVID-support.patch new file mode 100644 index 00000000..4ae57d9b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0063-Bluetooth-Add-Atheros-maryann-PIDVID-support.patch | |||
@@ -0,0 +1,119 @@ | |||
1 | From cf0a0312929eb18f55e95db15f2129fd28a0adb3 Mon Sep 17 00:00:00 2001 | ||
2 | From: "Cho, Yu-Chen" <acho@suse.com> | ||
3 | Date: Wed, 14 Mar 2012 22:01:21 +0200 | ||
4 | Subject: [PATCH 63/69] Bluetooth: Add Atheros maryann PIDVID support | ||
5 | |||
6 | commit 07c0ea874d43c299d185948452945a361052b6e3 upstream. | ||
7 | |||
8 | Add Atheros maryann 0cf3:311d PIDVID support | ||
9 | This module is AR3012 Series. | ||
10 | |||
11 | Include /sys/kernel/debug/usb/devices output here for reference | ||
12 | |||
13 | before: | ||
14 | T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 | ||
15 | D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 | ||
16 | P: Vendor=0cf3 ProdID=311d Rev= 0.01 | ||
17 | S: Manufacturer=Atheros Communications | ||
18 | S: Product=Bluetooth USB Host Controller | ||
19 | S: SerialNumber=Alaska Day 2006 | ||
20 | C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA | ||
21 | I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
22 | E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms | ||
23 | E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
24 | E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
25 | I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
26 | E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms | ||
27 | E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms | ||
28 | I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
29 | E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms | ||
30 | E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms | ||
31 | I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
32 | E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms | ||
33 | E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms | ||
34 | I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
35 | E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms | ||
36 | E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms | ||
37 | I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
38 | E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms | ||
39 | E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms | ||
40 | I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
41 | E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms | ||
42 | E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms | ||
43 | |||
44 | after: | ||
45 | T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 | ||
46 | D: Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 | ||
47 | P: Vendor=0cf3 ProdID=311d Rev= 0.02 | ||
48 | S: Manufacturer=Atheros Communications | ||
49 | S: Product=Bluetooth USB Host Controller | ||
50 | S: SerialNumber=Alaska Day 2006 | ||
51 | C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA | ||
52 | I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
53 | E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms | ||
54 | E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
55 | E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms | ||
56 | I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
57 | E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms | ||
58 | E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms | ||
59 | I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
60 | E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms | ||
61 | E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms | ||
62 | I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
63 | E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms | ||
64 | E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms | ||
65 | I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
66 | E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms | ||
67 | E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms | ||
68 | I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
69 | E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms | ||
70 | E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms | ||
71 | I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb | ||
72 | E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms | ||
73 | E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms | ||
74 | |||
75 | Signed-off-by: Cho, Yu-Chen <acho@suse.com> | ||
76 | cked-by: Marcel Holtmann <marcel@holtmann.org> | ||
77 | Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> | ||
78 | Cc: Jonathan Nieder <jrnieder@gmail.com> | ||
79 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
80 | --- | ||
81 | drivers/bluetooth/ath3k.c | 2 ++ | ||
82 | drivers/bluetooth/btusb.c | 1 + | ||
83 | 2 files changed, 3 insertions(+) | ||
84 | |||
85 | diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c | ||
86 | index 67a79b0..003cd8d 100644 | ||
87 | --- a/drivers/bluetooth/ath3k.c | ||
88 | +++ b/drivers/bluetooth/ath3k.c | ||
89 | @@ -71,6 +71,7 @@ static struct usb_device_id ath3k_table[] = { | ||
90 | |||
91 | /* Atheros AR3012 with sflash firmware*/ | ||
92 | { USB_DEVICE(0x0CF3, 0x3004) }, | ||
93 | + { USB_DEVICE(0x0CF3, 0x311D) }, | ||
94 | { USB_DEVICE(0x13d3, 0x3375) }, | ||
95 | |||
96 | /* Atheros AR5BBU12 with sflash firmware */ | ||
97 | @@ -88,6 +89,7 @@ static struct usb_device_id ath3k_blist_tbl[] = { | ||
98 | |||
99 | /* Atheros AR3012 with sflash firmware*/ | ||
100 | { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, | ||
101 | + { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 }, | ||
102 | { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, | ||
103 | |||
104 | { } /* Terminating entry */ | ||
105 | diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c | ||
106 | index df0331a..5a87b2e 100644 | ||
107 | --- a/drivers/bluetooth/btusb.c | ||
108 | +++ b/drivers/bluetooth/btusb.c | ||
109 | @@ -126,6 +126,7 @@ static struct usb_device_id blacklist_table[] = { | ||
110 | |||
111 | /* Atheros 3012 with sflash firmware */ | ||
112 | { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 }, | ||
113 | + { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, | ||
114 | { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, | ||
115 | |||
116 | /* Atheros AR5BBU12 with sflash firmware */ | ||
117 | -- | ||
118 | 1.7.9.5 | ||
119 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0064-Bluetooth-Add-support-for-BCM20702A0-0a5c-21e3.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0064-Bluetooth-Add-support-for-BCM20702A0-0a5c-21e3.patch new file mode 100644 index 00000000..85b6c137 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0064-Bluetooth-Add-support-for-BCM20702A0-0a5c-21e3.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From 876f46c3f8fe8b612d1892941785c52c3f1d0012 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jesse Sung <jesse.sung@canonical.com> | ||
3 | Date: Thu, 22 Dec 2011 10:48:47 +0800 | ||
4 | Subject: [PATCH 64/69] Bluetooth: Add support for BCM20702A0 [0a5c:21e3] | ||
5 | |||
6 | commit c0190925dacd976a67044f4382d4effbed568dce upstream. | ||
7 | |||
8 | Add another vendor specific ID for BCM20702A0. | ||
9 | |||
10 | output of usb-devices: | ||
11 | T: Bus=06 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0 | ||
12 | D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 | ||
13 | P: Vendor=0a5c ProdID=21e3 Rev=01.12 | ||
14 | S: Manufacturer=Broadcom Corp | ||
15 | S: Product=BCM20702A0 | ||
16 | S: SerialNumber=9439E5CBF66C | ||
17 | C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA | ||
18 | I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none) | ||
19 | I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none) | ||
20 | I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) | ||
21 | I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none) | ||
22 | |||
23 | Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com> | ||
24 | Acked-by: Marcel Holtmann <marcel@holtmann.org> | ||
25 | Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | drivers/bluetooth/btusb.c | 1 + | ||
29 | 1 file changed, 1 insertion(+) | ||
30 | |||
31 | diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c | ||
32 | index 5a87b2e..db44ad5 100644 | ||
33 | --- a/drivers/bluetooth/btusb.c | ||
34 | +++ b/drivers/bluetooth/btusb.c | ||
35 | @@ -101,6 +101,7 @@ static struct usb_device_id btusb_table[] = { | ||
36 | { USB_DEVICE(0x0c10, 0x0000) }, | ||
37 | |||
38 | /* Broadcom BCM20702A0 */ | ||
39 | + { USB_DEVICE(0x0a5c, 0x21e3) }, | ||
40 | { USB_DEVICE(0x413c, 0x8197) }, | ||
41 | |||
42 | { } /* Terminating entry */ | ||
43 | -- | ||
44 | 1.7.9.5 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0065-futex-Do-not-leak-robust-list-to-unprivileged-proces.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0065-futex-Do-not-leak-robust-list-to-unprivileged-proces.patch new file mode 100644 index 00000000..d39ffb48 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0065-futex-Do-not-leak-robust-list-to-unprivileged-proces.patch | |||
@@ -0,0 +1,170 @@ | |||
1 | From 39bc94c8c5909dc1047dad45c14ba96ff54e5654 Mon Sep 17 00:00:00 2001 | ||
2 | From: Kees Cook <keescook@chromium.org> | ||
3 | Date: Mon, 19 Mar 2012 16:12:53 -0700 | ||
4 | Subject: [PATCH 65/69] futex: Do not leak robust list to unprivileged process | ||
5 | |||
6 | commit bdbb776f882f5ad431aa1e694c69c1c3d6a4a5b8 upstream. | ||
7 | |||
8 | It was possible to extract the robust list head address from a setuid | ||
9 | process if it had used set_robust_list(), allowing an ASLR info leak. This | ||
10 | changes the permission checks to be the same as those used for similar | ||
11 | info that comes out of /proc. | ||
12 | |||
13 | Running a setuid program that uses robust futexes would have had: | ||
14 | cred->euid != pcred->euid | ||
15 | cred->euid == pcred->uid | ||
16 | so the old permissions check would allow it. I'm not aware of any setuid | ||
17 | programs that use robust futexes, so this is just a preventative measure. | ||
18 | |||
19 | (This patch is based on changes from grsecurity.) | ||
20 | |||
21 | Signed-off-by: Kees Cook <keescook@chromium.org> | ||
22 | Cc: Darren Hart <dvhart@linux.intel.com> | ||
23 | Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> | ||
24 | Cc: Jiri Kosina <jkosina@suse.cz> | ||
25 | Cc: Eric W. Biederman <ebiederm@xmission.com> | ||
26 | Cc: David Howells <dhowells@redhat.com> | ||
27 | Cc: Serge E. Hallyn <serge.hallyn@canonical.com> | ||
28 | Cc: kernel-hardening@lists.openwall.com | ||
29 | Cc: spender@grsecurity.net | ||
30 | Link: http://lkml.kernel.org/r/20120319231253.GA20893@www.outflux.net | ||
31 | Signed-off-by: Thomas Gleixner <tglx@linutronix.de> | ||
32 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
33 | --- | ||
34 | kernel/futex.c | 36 +++++++++++++----------------------- | ||
35 | kernel/futex_compat.c | 36 +++++++++++++----------------------- | ||
36 | 2 files changed, 26 insertions(+), 46 deletions(-) | ||
37 | |||
38 | diff --git a/kernel/futex.c b/kernel/futex.c | ||
39 | index 0677023..866c9d5 100644 | ||
40 | --- a/kernel/futex.c | ||
41 | +++ b/kernel/futex.c | ||
42 | @@ -59,6 +59,7 @@ | ||
43 | #include <linux/magic.h> | ||
44 | #include <linux/pid.h> | ||
45 | #include <linux/nsproxy.h> | ||
46 | +#include <linux/ptrace.h> | ||
47 | |||
48 | #include <asm/futex.h> | ||
49 | |||
50 | @@ -2443,40 +2444,29 @@ SYSCALL_DEFINE3(get_robust_list, int, pid, | ||
51 | { | ||
52 | struct robust_list_head __user *head; | ||
53 | unsigned long ret; | ||
54 | - const struct cred *cred = current_cred(), *pcred; | ||
55 | + struct task_struct *p; | ||
56 | |||
57 | if (!futex_cmpxchg_enabled) | ||
58 | return -ENOSYS; | ||
59 | |||
60 | + rcu_read_lock(); | ||
61 | + | ||
62 | + ret = -ESRCH; | ||
63 | if (!pid) | ||
64 | - head = current->robust_list; | ||
65 | + p = current; | ||
66 | else { | ||
67 | - struct task_struct *p; | ||
68 | - | ||
69 | - ret = -ESRCH; | ||
70 | - rcu_read_lock(); | ||
71 | p = find_task_by_vpid(pid); | ||
72 | if (!p) | ||
73 | goto err_unlock; | ||
74 | - ret = -EPERM; | ||
75 | - pcred = __task_cred(p); | ||
76 | - /* If victim is in different user_ns, then uids are not | ||
77 | - comparable, so we must have CAP_SYS_PTRACE */ | ||
78 | - if (cred->user->user_ns != pcred->user->user_ns) { | ||
79 | - if (!ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE)) | ||
80 | - goto err_unlock; | ||
81 | - goto ok; | ||
82 | - } | ||
83 | - /* If victim is in same user_ns, then uids are comparable */ | ||
84 | - if (cred->euid != pcred->euid && | ||
85 | - cred->euid != pcred->uid && | ||
86 | - !ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE)) | ||
87 | - goto err_unlock; | ||
88 | -ok: | ||
89 | - head = p->robust_list; | ||
90 | - rcu_read_unlock(); | ||
91 | } | ||
92 | |||
93 | + ret = -EPERM; | ||
94 | + if (!ptrace_may_access(p, PTRACE_MODE_READ)) | ||
95 | + goto err_unlock; | ||
96 | + | ||
97 | + head = p->robust_list; | ||
98 | + rcu_read_unlock(); | ||
99 | + | ||
100 | if (put_user(sizeof(*head), len_ptr)) | ||
101 | return -EFAULT; | ||
102 | return put_user(head, head_ptr); | ||
103 | diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c | ||
104 | index 5f9e689..a9642d5 100644 | ||
105 | --- a/kernel/futex_compat.c | ||
106 | +++ b/kernel/futex_compat.c | ||
107 | @@ -10,6 +10,7 @@ | ||
108 | #include <linux/compat.h> | ||
109 | #include <linux/nsproxy.h> | ||
110 | #include <linux/futex.h> | ||
111 | +#include <linux/ptrace.h> | ||
112 | |||
113 | #include <asm/uaccess.h> | ||
114 | |||
115 | @@ -136,40 +137,29 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, | ||
116 | { | ||
117 | struct compat_robust_list_head __user *head; | ||
118 | unsigned long ret; | ||
119 | - const struct cred *cred = current_cred(), *pcred; | ||
120 | + struct task_struct *p; | ||
121 | |||
122 | if (!futex_cmpxchg_enabled) | ||
123 | return -ENOSYS; | ||
124 | |||
125 | + rcu_read_lock(); | ||
126 | + | ||
127 | + ret = -ESRCH; | ||
128 | if (!pid) | ||
129 | - head = current->compat_robust_list; | ||
130 | + p = current; | ||
131 | else { | ||
132 | - struct task_struct *p; | ||
133 | - | ||
134 | - ret = -ESRCH; | ||
135 | - rcu_read_lock(); | ||
136 | p = find_task_by_vpid(pid); | ||
137 | if (!p) | ||
138 | goto err_unlock; | ||
139 | - ret = -EPERM; | ||
140 | - pcred = __task_cred(p); | ||
141 | - /* If victim is in different user_ns, then uids are not | ||
142 | - comparable, so we must have CAP_SYS_PTRACE */ | ||
143 | - if (cred->user->user_ns != pcred->user->user_ns) { | ||
144 | - if (!ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE)) | ||
145 | - goto err_unlock; | ||
146 | - goto ok; | ||
147 | - } | ||
148 | - /* If victim is in same user_ns, then uids are comparable */ | ||
149 | - if (cred->euid != pcred->euid && | ||
150 | - cred->euid != pcred->uid && | ||
151 | - !ns_capable(pcred->user->user_ns, CAP_SYS_PTRACE)) | ||
152 | - goto err_unlock; | ||
153 | -ok: | ||
154 | - head = p->compat_robust_list; | ||
155 | - rcu_read_unlock(); | ||
156 | } | ||
157 | |||
158 | + ret = -EPERM; | ||
159 | + if (!ptrace_may_access(p, PTRACE_MODE_READ)) | ||
160 | + goto err_unlock; | ||
161 | + | ||
162 | + head = p->compat_robust_list; | ||
163 | + rcu_read_unlock(); | ||
164 | + | ||
165 | if (put_user(sizeof(*head), len_ptr)) | ||
166 | return -EFAULT; | ||
167 | return put_user(ptr_to_compat(head), head_ptr); | ||
168 | -- | ||
169 | 1.7.9.5 | ||
170 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0066-drm-radeon-kms-fix-the-regression-of-DVI-connector-c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0066-drm-radeon-kms-fix-the-regression-of-DVI-connector-c.patch new file mode 100644 index 00000000..78e16f86 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0066-drm-radeon-kms-fix-the-regression-of-DVI-connector-c.patch | |||
@@ -0,0 +1,39 @@ | |||
1 | From 8bfeb0bfde94ba70986c03d0a8ca9ab876073e35 Mon Sep 17 00:00:00 2001 | ||
2 | From: Takashi Iwai <tiwai@suse.de> | ||
3 | Date: Wed, 18 Apr 2012 15:21:07 +0200 | ||
4 | Subject: [PATCH 66/69] drm/radeon/kms: fix the regression of DVI connector | ||
5 | check | ||
6 | |||
7 | commit e36325071832f1ba96ac54fb8ba1459f08b05dd8 upstream. | ||
8 | |||
9 | The check of the encoder type in the commit [e00e8b5e: drm/radeon/kms: | ||
10 | fix analog load detection on DVI-I connectors] is obviously wrong, and | ||
11 | it's the culprit of the regression on my workstation with DVI-analog | ||
12 | connection resulting in the blank output. | ||
13 | |||
14 | Fixed the typo now. | ||
15 | |||
16 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
17 | Reviewed-by: Alex Deucher <alexander.deucher@amd.com> | ||
18 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/gpu/drm/radeon/radeon_connectors.c | 2 +- | ||
22 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
23 | |||
24 | diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c | ||
25 | index f7d39ac..f19ea2e 100644 | ||
26 | --- a/drivers/gpu/drm/radeon/radeon_connectors.c | ||
27 | +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | ||
28 | @@ -946,7 +946,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force) | ||
29 | |||
30 | encoder = obj_to_encoder(obj); | ||
31 | |||
32 | - if (encoder->encoder_type != DRM_MODE_ENCODER_DAC || | ||
33 | + if (encoder->encoder_type != DRM_MODE_ENCODER_DAC && | ||
34 | encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) | ||
35 | continue; | ||
36 | |||
37 | -- | ||
38 | 1.7.9.5 | ||
39 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0067-drm-radeon-disable-MSI-on-RV515.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0067-drm-radeon-disable-MSI-on-RV515.patch new file mode 100644 index 00000000..6bf86500 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0067-drm-radeon-disable-MSI-on-RV515.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 0532e1f8a710f011e839ad1ad0d83c6f3a1d2d74 Mon Sep 17 00:00:00 2001 | ||
2 | From: Dave Airlie <airlied@redhat.com> | ||
3 | Date: Fri, 13 Apr 2012 11:14:50 +0100 | ||
4 | Subject: [PATCH 67/69] drm/radeon: disable MSI on RV515 | ||
5 | |||
6 | commit 16a5e32b83fd946312b9b13590c75d20c95c5202 upstream. | ||
7 | |||
8 | My rv515 card is very flaky with msi enabled. Every so often it loses a rearm | ||
9 | and never comes back, manually banging the rearm brings it back. | ||
10 | |||
11 | Reviewed-by: Alex Deucher <alexander.deucher@amd.com> | ||
12 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/gpu/drm/radeon/radeon_irq_kms.c | 6 ++++++ | ||
16 | 1 file changed, 6 insertions(+) | ||
17 | |||
18 | diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c | ||
19 | index e7ddb49..baa019e 100644 | ||
20 | --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c | ||
21 | +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c | ||
22 | @@ -143,6 +143,12 @@ static bool radeon_msi_ok(struct radeon_device *rdev) | ||
23 | (rdev->pdev->subsystem_device == 0x01fd)) | ||
24 | return true; | ||
25 | |||
26 | + /* RV515 seems to have MSI issues where it loses | ||
27 | + * MSI rearms occasionally. This leads to lockups and freezes. | ||
28 | + * disable it by default. | ||
29 | + */ | ||
30 | + if (rdev->family == CHIP_RV515) | ||
31 | + return false; | ||
32 | if (rdev->flags & RADEON_IS_IGP) { | ||
33 | /* APUs work fine with MSIs */ | ||
34 | if (rdev->family >= CHIP_PALM) | ||
35 | -- | ||
36 | 1.7.9.5 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0068-drm-radeon-fix-load-detect-on-rn50-with-hardcoded-ED.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0068-drm-radeon-fix-load-detect-on-rn50-with-hardcoded-ED.patch new file mode 100644 index 00000000..ee262ca9 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0068-drm-radeon-fix-load-detect-on-rn50-with-hardcoded-ED.patch | |||
@@ -0,0 +1,46 @@ | |||
1 | From 29e2a67065f74d9a1f31a61d4466976551d9bed4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Dave Airlie <airlied@redhat.com> | ||
3 | Date: Thu, 19 Apr 2012 15:42:58 +0100 | ||
4 | Subject: [PATCH 68/69] drm/radeon: fix load detect on rn50 with hardcoded | ||
5 | EDIDs. | ||
6 | |||
7 | commit a09d431f344d854e4fe9cfac44f78cb8202f3eb7 upstream. | ||
8 | |||
9 | When the force changes went in back in 3.3.0, we ended up returning | ||
10 | disconnected in the !force case, and the connected in when forced, | ||
11 | as it hit the hardcoded check. | ||
12 | |||
13 | Fix it so all exits go via the hardcoded check and stop spurious | ||
14 | modesets on platforms with hardcoded EDIDs. | ||
15 | |||
16 | Reported-by: Evan McNabb (Red Hat) | ||
17 | Reviewed-by: Alex Deucher <alexander.deucher@amd.com> | ||
18 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/gpu/drm/radeon/radeon_connectors.c | 2 +- | ||
22 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
23 | |||
24 | diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c | ||
25 | index f19ea2e..4a4493f 100644 | ||
26 | --- a/drivers/gpu/drm/radeon/radeon_connectors.c | ||
27 | +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | ||
28 | @@ -976,6 +976,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force) | ||
29 | * cases the DVI port is actually a virtual KVM port connected to the service | ||
30 | * processor. | ||
31 | */ | ||
32 | +out: | ||
33 | if ((!rdev->is_atom_bios) && | ||
34 | (ret == connector_status_disconnected) && | ||
35 | rdev->mode_info.bios_hardcoded_edid_size) { | ||
36 | @@ -983,7 +984,6 @@ radeon_dvi_detect(struct drm_connector *connector, bool force) | ||
37 | ret = connector_status_connected; | ||
38 | } | ||
39 | |||
40 | -out: | ||
41 | /* updated in get modes as well since we need to know if it's analog or digital */ | ||
42 | radeon_connector_update_scratch_regs(connector, ret); | ||
43 | return ret; | ||
44 | -- | ||
45 | 1.7.9.5 | ||
46 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0069-Linux-3.2.16.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0069-Linux-3.2.16.patch new file mode 100644 index 00000000..261d3551 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.16/0069-Linux-3.2.16.patch | |||
@@ -0,0 +1,24 @@ | |||
1 | From 206e830feaa561615d9ea721a7e4a0f8d3708e81 Mon Sep 17 00:00:00 2001 | ||
2 | From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
3 | Date: Sun, 22 Apr 2012 15:31:32 -0700 | ||
4 | Subject: [PATCH 69/69] Linux 3.2.16 | ||
5 | |||
6 | --- | ||
7 | Makefile | 2 +- | ||
8 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
9 | |||
10 | diff --git a/Makefile b/Makefile | ||
11 | index 6195122..3da29cb 100644 | ||
12 | --- a/Makefile | ||
13 | +++ b/Makefile | ||
14 | @@ -1,6 +1,6 @@ | ||
15 | VERSION = 3 | ||
16 | PATCHLEVEL = 2 | ||
17 | -SUBLEVEL = 15 | ||
18 | +SUBLEVEL = 16 | ||
19 | EXTRAVERSION = | ||
20 | NAME = Saber-toothed Squirrel | ||
21 | |||
22 | -- | ||
23 | 1.7.9.5 | ||
24 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb index 35d1b268..70dd7be7 100644 --- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb +++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb | |||
@@ -12,7 +12,7 @@ MULTI_CONFIG_BASE_SUFFIX = "" | |||
12 | 12 | ||
13 | BRANCH = "v3.2-staging" | 13 | BRANCH = "v3.2-staging" |
14 | SRCREV = "0d0567b6c1a61a374120b985559768077c511a6d" | 14 | SRCREV = "0d0567b6c1a61a374120b985559768077c511a6d" |
15 | MACHINE_KERNEL_PR_append = "e+gitr${SRCREV}" | 15 | MACHINE_KERNEL_PR_append = "a+gitr${SRCREV}" |
16 | 16 | ||
17 | COMPATIBLE_MACHINE = "(ti33x)" | 17 | COMPATIBLE_MACHINE = "(ti33x)" |
18 | 18 | ||
@@ -796,6 +796,134 @@ PATCHES_OVER_PSP = " \ | |||
796 | file://3.2.14/0145-serial-sh-sci-fix-a-race-of-DMA-submit_tx-on-transfe.patch \ | 796 | file://3.2.14/0145-serial-sh-sci-fix-a-race-of-DMA-submit_tx-on-transfe.patch \ |
797 | file://3.2.14/0146-ASPM-Fix-pcie-devices-with-non-pcie-children.patch \ | 797 | file://3.2.14/0146-ASPM-Fix-pcie-devices-with-non-pcie-children.patch \ |
798 | file://3.2.14/0147-Linux-3.2.14.patch \ | 798 | file://3.2.14/0147-Linux-3.2.14.patch \ |
799 | file://3.2.15/0001-x86-bpf_jit-fix-a-bug-in-emitting-the-16-bit-immedia.patch \ | ||
800 | file://3.2.15/0002-tg3-Fix-5717-serdes-powerdown-problem.patch \ | ||
801 | file://3.2.15/0003-sky2-dont-overwrite-settings-for-PHY-Quick-link.patch \ | ||
802 | file://3.2.15/0004-rose_dev-fix-memcpy-bug-in-rose_set_mac_address.patch \ | ||
803 | file://3.2.15/0005-net-usb-cdc_eem-fix-mtu.patch \ | ||
804 | file://3.2.15/0006-Fix-non-TBI-PHY-access-a-bad-merge-undid-bug-fix-in-.patch \ | ||
805 | file://3.2.15/0007-ASoC-wm8994-Update-WM8994-DCS-calibration.patch \ | ||
806 | file://3.2.15/0008-mtd-ixp4xx-oops-in-ixp4xx_flash_probe.patch \ | ||
807 | file://3.2.15/0009-mtd-mips-lantiq-reintroduce-support-for-cmdline-part.patch \ | ||
808 | file://3.2.15/0010-mtd-nand-gpmi-use-correct-member-for-checking-NAND_B.patch \ | ||
809 | file://3.2.15/0011-mtd-sst25l-initialize-writebufsize.patch \ | ||
810 | file://3.2.15/0012-mtd-block2mtd-initialize-writebufsize.patch \ | ||
811 | file://3.2.15/0013-mtd-lart-initialize-writebufsize.patch \ | ||
812 | file://3.2.15/0014-mtd-m25p80-set-writebufsize.patch \ | ||
813 | file://3.2.15/0015-ACPI-Do-cpufreq-clamping-for-throttling-per-package-.patch \ | ||
814 | file://3.2.15/0016-PNPACPI-Fix-device-ref-leaking-in-acpi_pnp_match.patch \ | ||
815 | file://3.2.15/0017-ACPICA-Fix-regression-in-FADT-revision-checks.patch \ | ||
816 | file://3.2.15/0018-modpost-fix-ALL_INIT_DATA_SECTIONS.patch \ | ||
817 | file://3.2.15/0019-genirq-Adjust-irq-thread-affinity-on-IRQ_SET_MASK_OK.patch \ | ||
818 | file://3.2.15/0020-tracing-Fix-ftrace-stack-trace-entries.patch \ | ||
819 | file://3.2.15/0021-tracing-Fix-ent_size-in-trace-output.patch \ | ||
820 | file://3.2.15/0022-m68k-mac-Add-missing-platform-check-before-registeri.patch \ | ||
821 | file://3.2.15/0023-mac80211-fix-possible-tid_rx-reorder_timer-use-after.patch \ | ||
822 | file://3.2.15/0024-rtlwifi-rtl8192ce-rtl8192cu-rtl8192de-Fix-low-gain-s.patch \ | ||
823 | file://3.2.15/0025-drm-Validate-requested-virtual-size-against-allocate.patch \ | ||
824 | file://3.2.15/0026-drm-radeon-kms-fix-fans-after-resume.patch \ | ||
825 | file://3.2.15/0027-drm-i915-no-lvds-quirk-on-MSI-DC500.patch \ | ||
826 | file://3.2.15/0028-drm-i915-Sanitize-BIOS-debugging-bits-from-PIPECONF.patch \ | ||
827 | file://3.2.15/0029-drm-i915-Add-lock-on-drm_helper_resume_force_mode.patch \ | ||
828 | file://3.2.15/0030-drm-i915-quirk-away-broken-OpRegion-VBT.patch \ | ||
829 | file://3.2.15/0031-r8169-runtime-resume-before-shutdown.patch \ | ||
830 | file://3.2.15/0032-target-Fix-unsupported-WRITE_SAME-sense-payload.patch \ | ||
831 | file://3.2.15/0033-kgdb-debug_core-pass-the-breakpoint-struct-instead-o.patch \ | ||
832 | file://3.2.15/0034-kgdbts-Fix-kernel-oops-with-CONFIG_DEBUG_RODATA.patch \ | ||
833 | file://3.2.15/0035-kgdbts-1-of-2-fix-single-step-awareness-to-work-corr.patch \ | ||
834 | file://3.2.15/0036-kgdbts-2-of-2-fix-single-step-awareness-to-work-corr.patch \ | ||
835 | file://3.2.15/0037-x86-kgdb-Fix-DEBUG_RODATA-limitation-using-text_poke.patch \ | ||
836 | file://3.2.15/0038-CIFS-Fix-VFS-lock-usage-for-oplocked-files.patch \ | ||
837 | file://3.2.15/0039-ARM-tegra-remove-Tegra30-errata-from-MACH_TEGRA_DT.patch \ | ||
838 | file://3.2.15/0040-mmc-sdhci-dove-Fix-compile-error-by-including-module.patch \ | ||
839 | file://3.2.15/0041-mmc-atmel-mci-correct-data-timeout-computation.patch \ | ||
840 | file://3.2.15/0042-tcm_fc-Add-abort-flag-for-gracefully-handling-exchan.patch \ | ||
841 | file://3.2.15/0043-tcm_fc-Do-not-free-tpg-structure-during-wq-allocatio.patch \ | ||
842 | file://3.2.15/0044-sysctl-fix-write-access-to-dmesg_restrict-kptr_restr.patch \ | ||
843 | file://3.2.15/0045-modpost-Fix-modpost-license-checking-of-vmlinux.o.patch \ | ||
844 | file://3.2.15/0046-x86-PCI-use-host-bridge-_CRS-info-on-MSI-MS-7253.patch \ | ||
845 | file://3.2.15/0047-x86-PCI-do-not-tie-MSI-MS-7253-use_crs-quirk-to-BIOS.patch \ | ||
846 | file://3.2.15/0048-TOMOYO-Fix-mount-flags-checking-order.patch \ | ||
847 | file://3.2.15/0049-Revert-x86-ioapic-Add-register-level-checks-to-detec.patch \ | ||
848 | file://3.2.15/0050-acer-wmi-No-wifi-rfkill-on-Sony-machines.patch \ | ||
849 | file://3.2.15/0051-Fix-length-of-buffer-copied-in-__nfs4_get_acl_uncach.patch \ | ||
850 | file://3.2.15/0052-sched-x86-Fix-overflow-in-cyc2ns_offset.patch \ | ||
851 | file://3.2.15/0053-mfd-Clear-twl6030-IRQ-status-register-only-once.patch \ | ||
852 | file://3.2.15/0054-USB-Add-Motorola-Rokr-E6-Id-to-the-USBNet-driver-zau.patch \ | ||
853 | file://3.2.15/0055-ioat-fix-size-of-completion-for-Xen.patch \ | ||
854 | file://3.2.15/0056-ASoC-ak4642-fixup-mute-needs-1-step.patch \ | ||
855 | file://3.2.15/0057-cred-copy_process-should-clear-child-replacement_ses.patch \ | ||
856 | file://3.2.15/0058-iommu-amd-Make-sure-IOMMU-interrupts-are-re-enabled-.patch \ | ||
857 | file://3.2.15/0059-Bluetooth-Fix-l2cap-conn-failures-for-ssp-devices.patch \ | ||
858 | file://3.2.15/0060-Linux-3.2.15.patch \ | ||
859 | file://3.2.16/0001-drm-i915-mask-transcoder-select-bits-before-setting-.patch \ | ||
860 | file://3.2.16/0002-drm-radeon-kms-fix-DVO-setup-on-some-r4xx-chips.patch \ | ||
861 | file://3.2.16/0003-drm-i915-ringbuffer-Exclude-last-2-cachlines-of-ring.patch \ | ||
862 | file://3.2.16/0004-drm-radeon-only-add-the-mm-i2c-bus-if-the-hw_i2c-mod.patch \ | ||
863 | file://3.2.16/0005-drm-i915-properly-compute-dp-dithering-for-user-crea.patch \ | ||
864 | file://3.2.16/0006-drm-i915-make-rc6-module-parameter-read-only.patch \ | ||
865 | file://3.2.16/0007-rtlwifi-Add-missing-DMA-buffer-unmapping-for-PCI-dri.patch \ | ||
866 | file://3.2.16/0008-ARM-7379-1-DT-fix-atags_to_fdt-second-call-site.patch \ | ||
867 | file://3.2.16/0009-ARM-7384-1-ThumbEE-Disable-userspace-TEEHBR-access-f.patch \ | ||
868 | file://3.2.16/0010-md-bitmap-prevent-bitmap_daemon_work-running-while-i.patch \ | ||
869 | file://3.2.16/0011-Bluetooth-uart-ldisc-Fix-memory-leak.patch \ | ||
870 | file://3.2.16/0012-Bluetooth-hci_ldisc-fix-NULL-pointer-dereference-on-.patch \ | ||
871 | file://3.2.16/0013-ext4-address-scalability-issue-by-removing-extent-ca.patch \ | ||
872 | file://3.2.16/0014-ia64-fix-futex_atomic_cmpxchg_inatomic.patch \ | ||
873 | file://3.2.16/0015-drivers-rtc-rtc-pl031.c-enable-clock-on-all-ST-varia.patch \ | ||
874 | file://3.2.16/0016-hugetlb-fix-race-condition-in-hugetlb_fault.patch \ | ||
875 | file://3.2.16/0017-staging-iio-hmc5843-Fix-crash-in-probe-function.patch \ | ||
876 | file://3.2.16/0018-tty-serial-altera_uart-Check-for-NULL-platform_data-.patch \ | ||
877 | file://3.2.16/0019-sparc64-Eliminate-obsolete-__handle_softirq-function.patch \ | ||
878 | file://3.2.16/0020-sparc64-Fix-bootup-crash-on-sun4v.patch \ | ||
879 | file://3.2.16/0021-cciss-Initialize-scsi-host-max_sectors-for-tape-driv.patch \ | ||
880 | file://3.2.16/0022-cciss-Fix-scsi-tape-io-with-more-than-255-scatter-ga.patch \ | ||
881 | file://3.2.16/0024-video-uvesafb-Fix-oops-that-uvesafb-try-to-execute-N.patch \ | ||
882 | file://3.2.16/0025-nohz-Fix-stale-jiffies-update-in-tick_nohz_restart.patch \ | ||
883 | file://3.2.16/0026-pch_uart-Fix-MSI-setting-issue.patch \ | ||
884 | file://3.2.16/0027-USB-serial-fix-race-between-probe-and-open.patch \ | ||
885 | file://3.2.16/0028-USB-pl2303-fix-DTR-RTS-being-raised-on-baud-rate-cha.patch \ | ||
886 | file://3.2.16/0029-USB-option-re-add-NOVATELWIRELESS_PRODUCT_HSPA_HIGHS.patch \ | ||
887 | file://3.2.16/0030-USB-ftdi_sio-fix-status-line-change-handling-for-TIO.patch \ | ||
888 | file://3.2.16/0031-USB-ftdi_sio-fix-race-condition-in-TIOCMIWAIT-and-ab.patch \ | ||
889 | file://3.2.16/0032-USB-sierra-add-support-for-Sierra-Wireless-MC7710.patch \ | ||
890 | file://3.2.16/0033-USB-don-t-clear-urb-dev-in-scatter-gather-library.patch \ | ||
891 | file://3.2.16/0034-USB-don-t-ignore-suspend-errors-for-root-hubs.patch \ | ||
892 | file://3.2.16/0035-xhci-don-t-re-enable-IE-constantly.patch \ | ||
893 | file://3.2.16/0036-xhci-Don-t-write-zeroed-pointers-to-xHC-registers.patch \ | ||
894 | file://3.2.16/0037-xhci-Restore-event-ring-dequeue-pointer-on-resume.patch \ | ||
895 | file://3.2.16/0038-USB-fix-bug-of-device-descriptor-got-from-superspeed.patch \ | ||
896 | file://3.2.16/0039-xHCI-add-XHCI_RESET_ON_RESUME-quirk-for-VIA-xHCI-hos.patch \ | ||
897 | file://3.2.16/0040-xHCI-Correct-the-define-XHCI_LEGACY_DISABLE_SMI.patch \ | ||
898 | file://3.2.16/0041-fix-tlb-flushing-for-page-table-pages.patch \ | ||
899 | file://3.2.16/0042-serial-PL011-clear-pending-interrupts.patch \ | ||
900 | file://3.2.16/0043-serial-PL011-move-interrupt-clearing.patch \ | ||
901 | file://3.2.16/0044-fcaps-clear-the-same-personality-flags-as-suid-when-.patch \ | ||
902 | file://3.2.16/0045-ath9k-fix-max-noise-floor-threshold.patch \ | ||
903 | file://3.2.16/0046-xhci-Fix-register-save-restore-order.patch \ | ||
904 | file://3.2.16/0047-Bluetooth-hci_core-fix-NULL-pointer-dereference-at-u.patch \ | ||
905 | file://3.2.16/0048-pch_gpio-Support-new-device-LAPIS-Semiconductor-ML78.patch \ | ||
906 | file://3.2.16/0049-gpio-Add-missing-spin_lock_init-in-gpio-pch-driver.patch \ | ||
907 | file://3.2.16/0050-usb-gadget-pch_udc-Fix-disconnect-issue.patch \ | ||
908 | file://3.2.16/0051-usb-gadget-pch_udc-Fix-wrong-return-value.patch \ | ||
909 | file://3.2.16/0052-usb-gadget-pch_udc-Fix-USB-suspend-issue.patch \ | ||
910 | file://3.2.16/0053-usb-gadget-pch_udc-Fix-usb-gadget-pch_udc-Fix-ether-.patch \ | ||
911 | file://3.2.16/0054-usb-gadget-pch_udc-Reduce-redundant-interrupt.patch \ | ||
912 | file://3.2.16/0055-ACPICA-Fix-to-allow-region-arguments-to-reference-ot.patch \ | ||
913 | file://3.2.16/0056-security-fix-compile-error-in-commoncap.c.patch \ | ||
914 | file://3.2.16/0057-pch_gbe-Do-not-abort-probe-on-bad-MAC.patch \ | ||
915 | file://3.2.16/0058-pch_gbe-memory-corruption-calling-pch_gbe_validate_o.patch \ | ||
916 | file://3.2.16/0059-pch_dma-Support-new-device-LAPIS-Semiconductor-ML783.patch \ | ||
917 | file://3.2.16/0060-spi-topcliff-pch-fix-Wuninitialized-warning.patch \ | ||
918 | file://3.2.16/0061-spi-topcliff-pch-Support-new-device-LAPIS-Semiconduc.patch \ | ||
919 | file://3.2.16/0062-Bluetooth-Adding-USB-device-13d3-3375-as-an-Atheros-.patch \ | ||
920 | file://3.2.16/0063-Bluetooth-Add-Atheros-maryann-PIDVID-support.patch \ | ||
921 | file://3.2.16/0064-Bluetooth-Add-support-for-BCM20702A0-0a5c-21e3.patch \ | ||
922 | file://3.2.16/0065-futex-Do-not-leak-robust-list-to-unprivileged-proces.patch \ | ||
923 | file://3.2.16/0066-drm-radeon-kms-fix-the-regression-of-DVI-connector-c.patch \ | ||
924 | file://3.2.16/0067-drm-radeon-disable-MSI-on-RV515.patch \ | ||
925 | file://3.2.16/0068-drm-radeon-fix-load-detect-on-rn50-with-hardcoded-ED.patch \ | ||
926 | file://3.2.16/0069-Linux-3.2.16.patch \ | ||
799 | file://beaglebone/0001-f_rndis-HACK-around-undefined-variables.patch \ | 927 | file://beaglebone/0001-f_rndis-HACK-around-undefined-variables.patch \ |
800 | file://beaglebone/0002-da8xx-fb-add-DVI-support-for-beaglebone.patch \ | 928 | file://beaglebone/0002-da8xx-fb-add-DVI-support-for-beaglebone.patch \ |
801 | file://beaglebone/0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch \ | 929 | file://beaglebone/0003-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch \ |
@@ -829,4 +957,3 @@ PATCHES_OVER_PSP = " \ | |||
829 | file://beaglebone/0031-omap2-irq-process-all-4-irq-banks-for-am335x.patch \ | 957 | file://beaglebone/0031-omap2-irq-process-all-4-irq-banks-for-am335x.patch \ |
830 | file://beaglebone/0032-omap2-irqs.h-increase-number-or-irq-banks.patch \ | 958 | file://beaglebone/0032-omap2-irqs.h-increase-number-or-irq-banks.patch \ |
831 | " | 959 | " |
832 | |||