]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.13-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Mar 2014 23:50:12 +0000 (23:50 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Mar 2014 23:50:12 +0000 (23:50 +0000)
added patches:
alsa-hda-add-automute-fix-for-another-dell-aio-model.patch
alsa-hda-added-inverted-digital-mic-handling-for-acer-travelmate-8371.patch
alsa-hda-add-missing-loopback-merge-path-for-ad1884-1984-codecs.patch
alsa-hda-fix-loud-click-noise-with-ideapad-410y.patch
alsa-hda-use-analog-beep-for-thinkpads-with-ad1984-codecs.patch
alsa-oxygen-xonar-dg-x-capture-from-i2s-channel-1-not-2.patch
alsa-usb-audio-add-quirk-for-logitech-webcam-c500.patch
pinctrl-sunxi-use-chained_irq_-enter-exit-for-gic-compatibility.patch
powerpc-align-p_dyn-p_rela-and-p_st-symbols.patch
powerpc-tm-fix-crash-when-forking-inside-a-transaction.patch

queue-3.13/alsa-hda-add-automute-fix-for-another-dell-aio-model.patch [new file with mode: 0644]
queue-3.13/alsa-hda-add-missing-loopback-merge-path-for-ad1884-1984-codecs.patch [new file with mode: 0644]
queue-3.13/alsa-hda-added-inverted-digital-mic-handling-for-acer-travelmate-8371.patch [new file with mode: 0644]
queue-3.13/alsa-hda-fix-loud-click-noise-with-ideapad-410y.patch [new file with mode: 0644]
queue-3.13/alsa-hda-use-analog-beep-for-thinkpads-with-ad1984-codecs.patch [new file with mode: 0644]
queue-3.13/alsa-oxygen-xonar-dg-x-capture-from-i2s-channel-1-not-2.patch [new file with mode: 0644]
queue-3.13/alsa-usb-audio-add-quirk-for-logitech-webcam-c500.patch [new file with mode: 0644]
queue-3.13/pinctrl-sunxi-use-chained_irq_-enter-exit-for-gic-compatibility.patch [new file with mode: 0644]
queue-3.13/powerpc-align-p_dyn-p_rela-and-p_st-symbols.patch [new file with mode: 0644]
queue-3.13/powerpc-tm-fix-crash-when-forking-inside-a-transaction.patch [new file with mode: 0644]
queue-3.13/series

diff --git a/queue-3.13/alsa-hda-add-automute-fix-for-another-dell-aio-model.patch b/queue-3.13/alsa-hda-add-automute-fix-for-another-dell-aio-model.patch
new file mode 100644 (file)
index 0000000..9f1d16a
--- /dev/null
@@ -0,0 +1,34 @@
+From 3b4467522630b7ea0d65a691007ef0a93d471f8f Mon Sep 17 00:00:00 2001
+From: Hui Wang <hui.wang@canonical.com>
+Date: Tue, 4 Mar 2014 16:20:18 +0800
+Subject: ALSA: hda - add automute fix for another dell AIO model
+
+From: Hui Wang <hui.wang@canonical.com>
+
+commit 3b4467522630b7ea0d65a691007ef0a93d471f8f upstream.
+
+When plugging a headphone or headset, lots of noise is heard from
+internal speaker, after changing the automute via amp instead of
+pinctl, the noise disappears.
+
+BugLink: https://bugs.launchpad.net/bugs/1268468
+Cc: David Henningsson <david.henningsson@canonical.com>
+Signed-off-by: Hui Wang <hui.wang@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -5103,7 +5103,7 @@ static const struct snd_pci_quirk alc662
+       SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x0626, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
+       SND_PCI_QUIRK(0x1028, 0x0628, "Dell", ALC668_FIXUP_AUTO_MUTE),
+-      SND_PCI_QUIRK(0x1028, 0x064e, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
++      SND_PCI_QUIRK(0x1028, 0x064e, "Dell", ALC668_FIXUP_AUTO_MUTE),
+       SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
+       SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_BASS_1A_CHMAP),
+       SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_CHMAP),
diff --git a/queue-3.13/alsa-hda-add-missing-loopback-merge-path-for-ad1884-1984-codecs.patch b/queue-3.13/alsa-hda-add-missing-loopback-merge-path-for-ad1884-1984-codecs.patch
new file mode 100644 (file)
index 0000000..1072939
--- /dev/null
@@ -0,0 +1,30 @@
+From c5eda4c1bf6214332c46fb2f4e7c42a85e5e5643 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Wed, 5 Mar 2014 11:52:24 +0100
+Subject: ALSA: hda - Add missing loopback merge path for AD1884/1984 codecs
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit c5eda4c1bf6214332c46fb2f4e7c42a85e5e5643 upstream.
+
+The mixer widget (NID 0x20) of AD1884 and AD1984 codecs isn't
+connected directly to the actual I/O paths but only via another mixer
+widget (NID 0x21).  We need a similar fix as we did for AD1882.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_analog.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/patch_analog.c
++++ b/sound/pci/hda/patch_analog.c
+@@ -1091,6 +1091,7 @@ static int patch_ad1884(struct hda_codec
+       spec = codec->spec;
+       spec->gen.mixer_nid = 0x20;
++      spec->gen.mixer_merge_nid = 0x21;
+       spec->gen.beep_nid = 0x10;
+       set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
diff --git a/queue-3.13/alsa-hda-added-inverted-digital-mic-handling-for-acer-travelmate-8371.patch b/queue-3.13/alsa-hda-added-inverted-digital-mic-handling-for-acer-travelmate-8371.patch
new file mode 100644 (file)
index 0000000..95c63af
--- /dev/null
@@ -0,0 +1,27 @@
+From a6b92b6650d010d58b6e6fe42c6271266e0b1134 Mon Sep 17 00:00:00 2001
+From: Marius Knaust <marius.knaust@gmail.com>
+Date: Mon, 3 Mar 2014 01:48:58 +0100
+Subject: ALSA: hda - Added inverted digital-mic handling for Acer TravelMate 8371
+
+From: Marius Knaust <marius.knaust@gmail.com>
+
+commit a6b92b6650d010d58b6e6fe42c6271266e0b1134 upstream.
+
+Signed-off-by: Marius Knaust <marius.knaust@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -4242,6 +4242,7 @@ static const struct hda_fixup alc269_fix
+ };
+ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
++      SND_PCI_QUIRK(0x1025, 0x0283, "Acer TravelMate 8371", ALC269_FIXUP_INV_DMIC),
+       SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC),
+       SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC),
+       SND_PCI_QUIRK(0x1025, 0x047c, "Acer AC700", ALC269_FIXUP_ACER_AC700),
diff --git a/queue-3.13/alsa-hda-fix-loud-click-noise-with-ideapad-410y.patch b/queue-3.13/alsa-hda-fix-loud-click-noise-with-ideapad-410y.patch
new file mode 100644 (file)
index 0000000..6424257
--- /dev/null
@@ -0,0 +1,73 @@
+From 9b745ab897199c2af9f21ca9681ef86d5b971002 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Fri, 7 Mar 2014 08:37:19 +0100
+Subject: ALSA: hda - Fix loud click noise with IdeaPad 410Y
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 9b745ab897199c2af9f21ca9681ef86d5b971002 upstream.
+
+Lenovo IdeaPad 410Y with ALC282 codec makes loud click noises at boot
+and shutdown.  Also, it wrongly misdetects the acpi_thinkpad hook.
+This patch adds a device-specific fixup for disabling the shutup
+callback that is the cause of the click noise and also avoiding the
+thinpad_helper calls.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=71511
+Reported-and-tested-by: Guilherme Amadio <guilherme.amadio@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_realtek.c |   19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -3559,6 +3559,19 @@ static void alc_fixup_auto_mute_via_amp(
+       }
+ }
++static void alc_no_shutup(struct hda_codec *codec)
++{
++}
++
++static void alc_fixup_no_shutup(struct hda_codec *codec,
++                              const struct hda_fixup *fix, int action)
++{
++      if (action == HDA_FIXUP_ACT_PRE_PROBE) {
++              struct alc_spec *spec = codec->spec;
++              spec->shutup = alc_no_shutup;
++      }
++}
++
+ static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
+                               const struct hda_fixup *fix, int action)
+ {
+@@ -3870,6 +3883,7 @@ enum {
+       ALC269_FIXUP_HP_GPIO_LED,
+       ALC269_FIXUP_INV_DMIC,
+       ALC269_FIXUP_LENOVO_DOCK,
++      ALC269_FIXUP_NO_SHUTUP,
+       ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
+       ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
+       ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
+@@ -4042,6 +4056,10 @@ static const struct hda_fixup alc269_fix
+               .type = HDA_FIXUP_FUNC,
+               .v.func = alc_fixup_inv_dmic_0x12,
+       },
++      [ALC269_FIXUP_NO_SHUTUP] = {
++              .type = HDA_FIXUP_FUNC,
++              .v.func = alc_fixup_no_shutup,
++      },
+       [ALC269_FIXUP_LENOVO_DOCK] = {
+               .type = HDA_FIXUP_PINS,
+               .v.pins = (const struct hda_pintbl[]) {
+@@ -4344,6 +4362,7 @@ static const struct snd_pci_quirk alc269
+       SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
+       SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
+       SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
++      SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
+       SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
+       SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
+       SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
diff --git a/queue-3.13/alsa-hda-use-analog-beep-for-thinkpads-with-ad1984-codecs.patch b/queue-3.13/alsa-hda-use-analog-beep-for-thinkpads-with-ad1984-codecs.patch
new file mode 100644 (file)
index 0000000..bdd3e85
--- /dev/null
@@ -0,0 +1,31 @@
+From f3e9b59cb948e2328bc06635ad39572d5b7b4791 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Wed, 5 Mar 2014 12:00:29 +0100
+Subject: ALSA: hda - Use analog beep for Thinkpads with AD1984 codecs
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit f3e9b59cb948e2328bc06635ad39572d5b7b4791 upstream.
+
+For making the driver behavior compatible with the earlier kernels,
+use the analog beep in the loopback path instead of the digital beep.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/hda/patch_analog.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/sound/pci/hda/patch_analog.c
++++ b/sound/pci/hda/patch_analog.c
+@@ -1025,6 +1025,9 @@ static void ad1884_fixup_thinkpad(struct
+               spec->gen.keep_eapd_on = 1;
+               spec->gen.vmaster_mute.hook = ad_vmaster_eapd_hook;
+               spec->eapd_nid = 0x12;
++              /* Analog PC Beeper - allow firmware/ACPI beeps */
++              spec->beep_amp = HDA_COMPOSE_AMP_VAL(0x20, 3, 3, HDA_INPUT);
++              spec->gen.beep_nid = 0; /* no digital beep */
+       }
+ }
diff --git a/queue-3.13/alsa-oxygen-xonar-dg-x-capture-from-i2s-channel-1-not-2.patch b/queue-3.13/alsa-oxygen-xonar-dg-x-capture-from-i2s-channel-1-not-2.patch
new file mode 100644 (file)
index 0000000..0c93e6b
--- /dev/null
@@ -0,0 +1,32 @@
+From 3dd77654fb1d7f68b9739f3039bad8dbbc0739f8 Mon Sep 17 00:00:00 2001
+From: Roman Volkov <v1ron@mail.ru>
+Date: Fri, 24 Jan 2014 16:18:14 +0400
+Subject: ALSA: oxygen: Xonar DG(X): capture from I2S channel 1, not 2
+
+From: Roman Volkov <v1ron@mail.ru>
+
+commit 3dd77654fb1d7f68b9739f3039bad8dbbc0739f8 upstream.
+
+Actually CS4245 connected to the I2S channel 1 for
+capture, not channel 2. Otherwise capturing and
+playback does not work for CS4245.
+
+Signed-off-by: Roman Volkov <v1ron@mail.ru>
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/pci/oxygen/xonar_dg.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/pci/oxygen/xonar_dg.c
++++ b/sound/pci/oxygen/xonar_dg.c
+@@ -596,7 +596,7 @@ struct oxygen_model model_xonar_dg = {
+       .model_data_size = sizeof(struct dg),
+       .device_config = PLAYBACK_0_TO_I2S |
+                        PLAYBACK_1_TO_SPDIF |
+-                       CAPTURE_0_FROM_I2S_2 |
++                       CAPTURE_0_FROM_I2S_1 |
+                        CAPTURE_1_FROM_SPDIF,
+       .dac_channels_pcm = 6,
+       .dac_channels_mixer = 0,
diff --git a/queue-3.13/alsa-usb-audio-add-quirk-for-logitech-webcam-c500.patch b/queue-3.13/alsa-usb-audio-add-quirk-for-logitech-webcam-c500.patch
new file mode 100644 (file)
index 0000000..36032d9
--- /dev/null
@@ -0,0 +1,29 @@
+From e805ca8b0a9b6c91099c0eaa4b160a1196a4ae25 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Wed, 5 Mar 2014 12:34:39 +0100
+Subject: ALSA: usb-audio: Add quirk for Logitech Webcam C500
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit e805ca8b0a9b6c91099c0eaa4b160a1196a4ae25 upstream.
+
+Logitech C500 (046d:0807) needs the same workaround like other
+Logitech Webcams.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/usb/mixer.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/usb/mixer.c
++++ b/sound/usb/mixer.c
+@@ -883,6 +883,7 @@ static void volume_control_quirks(struct
+               }
+               break;
++      case USB_ID(0x046d, 0x0807): /* Logitech Webcam C500 */
+       case USB_ID(0x046d, 0x0808):
+       case USB_ID(0x046d, 0x0809):
+       case USB_ID(0x046d, 0x081b): /* HD Webcam c310 */
diff --git a/queue-3.13/pinctrl-sunxi-use-chained_irq_-enter-exit-for-gic-compatibility.patch b/queue-3.13/pinctrl-sunxi-use-chained_irq_-enter-exit-for-gic-compatibility.patch
new file mode 100644 (file)
index 0000000..838a7b0
--- /dev/null
@@ -0,0 +1,65 @@
+From 905a5117e79367b7e58ae046d12ca9961f048c89 Mon Sep 17 00:00:00 2001
+From: Chen-Yu Tsai <wens@csie.org>
+Date: Tue, 11 Feb 2014 00:22:37 +0800
+Subject: pinctrl: sunxi: use chained_irq_{enter, exit} for GIC compatibility
+
+From: Chen-Yu Tsai <wens@csie.org>
+
+commit 905a5117e79367b7e58ae046d12ca9961f048c89 upstream.
+
+On tha Allwinner A20 SoC, the external interrupts on the pin controller
+device are connected to the GIC. Without chained_irq_{enter, exit},
+external GPIO interrupts, such as used by mmc core card detect, cause
+the system to hang.
+
+This issue was first encountered during my attempt to get out-of-band
+interrupts for WiFi on the Cubietruck working. With David's new series
+of sunci-mci using mmc slot-gpio for (GPIO interrupt based) card
+detection, removing the SD card also causes my Cubietruck to hang. This
+problem should extend to all Allwinner A20 based boards.
+
+With this fix, the system no longer hangs when I remove or insert the
+SD card. /proc/interrupts show that the interrupt has correctly fired.
+However the system still does not detect card removal/insertion. I
+believe this is another unrelated issue.
+
+Signed-off-by: Chen-Yu Tsai <wens@csie.org>
+Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pinctrl/pinctrl-sunxi.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/pinctrl/pinctrl-sunxi.c
++++ b/drivers/pinctrl/pinctrl-sunxi.c
+@@ -14,6 +14,7 @@
+ #include <linux/clk.h>
+ #include <linux/gpio.h>
+ #include <linux/irqdomain.h>
++#include <linux/irqchip/chained_irq.h>
+ #include <linux/module.h>
+ #include <linux/of.h>
+ #include <linux/of_address.h>
+@@ -665,6 +666,7 @@ static struct irq_chip sunxi_pinctrl_irq
+ static void sunxi_pinctrl_irq_handler(unsigned irq, struct irq_desc *desc)
+ {
++      struct irq_chip *chip = irq_get_chip(irq);
+       struct sunxi_pinctrl *pctl = irq_get_handler_data(irq);
+       const unsigned long reg = readl(pctl->membase + IRQ_STATUS_REG);
+@@ -674,10 +676,12 @@ static void sunxi_pinctrl_irq_handler(un
+       if (reg) {
+               int irqoffset;
++              chained_irq_enter(chip, desc);
+               for_each_set_bit(irqoffset, &reg, SUNXI_IRQ_NUMBER) {
+                       int pin_irq = irq_find_mapping(pctl->domain, irqoffset);
+                       generic_handle_irq(pin_irq);
+               }
++              chained_irq_exit(chip, desc);
+       }
+ }
diff --git a/queue-3.13/powerpc-align-p_dyn-p_rela-and-p_st-symbols.patch b/queue-3.13/powerpc-align-p_dyn-p_rela-and-p_st-symbols.patch
new file mode 100644 (file)
index 0000000..42ffabe
--- /dev/null
@@ -0,0 +1,32 @@
+From a5b2cf5b1af424ee3dd9e3ce6d5cea18cb927e67 Mon Sep 17 00:00:00 2001
+From: Anton Blanchard <anton@samba.org>
+Date: Tue, 4 Mar 2014 08:31:24 +1100
+Subject: powerpc: Align p_dyn, p_rela and p_st symbols
+
+From: Anton Blanchard <anton@samba.org>
+
+commit a5b2cf5b1af424ee3dd9e3ce6d5cea18cb927e67 upstream.
+
+The 64bit relocation code places a few symbols in the text segment.
+These symbols are only 4 byte aligned where they need to be 8 byte
+aligned. Add an explicit alignment.
+
+Signed-off-by: Anton Blanchard <anton@samba.org>
+Tested-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/kernel/reloc_64.S |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/powerpc/kernel/reloc_64.S
++++ b/arch/powerpc/kernel/reloc_64.S
+@@ -81,6 +81,7 @@ _GLOBAL(relocate)
+ 6:    blr
++.balign 8
+ p_dyn:        .llong  __dynamic_start - 0b
+ p_rela:       .llong  __rela_dyn_start - 0b
+ p_st: .llong  _stext - 0b
diff --git a/queue-3.13/powerpc-tm-fix-crash-when-forking-inside-a-transaction.patch b/queue-3.13/powerpc-tm-fix-crash-when-forking-inside-a-transaction.patch
new file mode 100644 (file)
index 0000000..6bd6cf6
--- /dev/null
@@ -0,0 +1,67 @@
+From 621b5060e823301d0cba4cb52a7ee3491922d291 Mon Sep 17 00:00:00 2001
+From: Michael Neuling <mikey@neuling.org>
+Date: Mon, 3 Mar 2014 14:21:40 +1100
+Subject: powerpc/tm: Fix crash when forking inside a transaction
+
+From: Michael Neuling <mikey@neuling.org>
+
+commit 621b5060e823301d0cba4cb52a7ee3491922d291 upstream.
+
+When we fork/clone we currently don't copy any of the TM state to the new
+thread.  This results in a TM bad thing (program check) when the new process is
+switched in as the kernel does a tmrechkpt with TEXASR FS not set.  Also, since
+R1 is from userspace, we trigger the bad kernel stack pointer detection.  So we
+end up with something like this:
+
+   Bad kernel stack pointer 0 at c0000000000404fc
+   cpu 0x2: Vector: 700 (Program Check) at [c00000003ffefd40]
+       pc: c0000000000404fc: restore_gprs+0xc0/0x148
+       lr: 0000000000000000
+       sp: 0
+      msr: 9000000100201030
+     current = 0xc000001dd1417c30
+     paca    = 0xc00000000fe00800   softe: 0        irq_happened: 0x01
+       pid   = 0, comm = swapper/2
+   WARNING: exception is not recoverable, can't continue
+
+The below fixes this by flushing the TM state before we copy the task_struct to
+the clone.  To do this we go through the tmreclaim patch, which removes the
+checkpointed registers from the CPU and transitions the CPU out of TM suspend
+mode.  Hence we need to call tmrechkpt after to restore the checkpointed state
+and the TM mode for the current task.
+
+To make this fail from userspace is simply:
+       tbegin
+       li      r0, 2
+       sc
+       <boom>
+
+Kudos to Adhemerval Zanella Neto for finding this.
+
+Signed-off-by: Michael Neuling <mikey@neuling.org>
+cc: Adhemerval Zanella Neto <azanella@br.ibm.com>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/kernel/process.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/arch/powerpc/kernel/process.c
++++ b/arch/powerpc/kernel/process.c
+@@ -927,6 +927,15 @@ int arch_dup_task_struct(struct task_str
+       flush_altivec_to_thread(src);
+       flush_vsx_to_thread(src);
+       flush_spe_to_thread(src);
++      /*
++       * Flush TM state out so we can copy it.  __switch_to_tm() does this
++       * flush but it removes the checkpointed state from the current CPU and
++       * transitions the CPU out of TM mode.  Hence we need to call
++       * tm_recheckpoint_new_task() (on the same task) to restore the
++       * checkpointed state back and the TM mode.
++       */
++      __switch_to_tm(src);
++      tm_recheckpoint_new_task(src);
+       *dst = *src;
index c5ca93ecf035868c423dff96d8c0e55ea81af03d..f94ae2521253f27c9ac49be0696bc705dd24ed45 100644 (file)
@@ -44,3 +44,13 @@ arc-use-correct-ptag-register-for-icache-flush.patch
 perf-trace-decode-architecture-specific-signal-numbers.patch
 drm-radeon-ttm-must-be-init-with-cpu-visible-vram-v2.patch
 drm-ttm-don-t-oops-if-no-invalidate_caches.patch
+alsa-oxygen-xonar-dg-x-capture-from-i2s-channel-1-not-2.patch
+alsa-usb-audio-add-quirk-for-logitech-webcam-c500.patch
+alsa-hda-added-inverted-digital-mic-handling-for-acer-travelmate-8371.patch
+alsa-hda-add-automute-fix-for-another-dell-aio-model.patch
+alsa-hda-add-missing-loopback-merge-path-for-ad1884-1984-codecs.patch
+alsa-hda-use-analog-beep-for-thinkpads-with-ad1984-codecs.patch
+alsa-hda-fix-loud-click-noise-with-ideapad-410y.patch
+pinctrl-sunxi-use-chained_irq_-enter-exit-for-gic-compatibility.patch
+powerpc-tm-fix-crash-when-forking-inside-a-transaction.patch
+powerpc-align-p_dyn-p_rela-and-p_st-symbols.patch