From: Greg Kroah-Hartman Date: Tue, 23 Nov 2010 00:24:21 +0000 (-0800) Subject: .36 patches X-Git-Tag: v2.6.27.57~69 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a323acb33ed6be8b007d7368609aac1c713915ab;p=thirdparty%2Fkernel%2Fstable-queue.git .36 patches --- diff --git a/queue-2.6.36/alsa-hda-add-some-workarounds-for-creative-ibg.patch b/queue-2.6.36/alsa-hda-add-some-workarounds-for-creative-ibg.patch new file mode 100644 index 00000000000..876b4a3aba8 --- /dev/null +++ b/queue-2.6.36/alsa-hda-add-some-workarounds-for-creative-ibg.patch @@ -0,0 +1,80 @@ +From 14d34f166c57e77e3d7f9bc8b43d349186d922c1 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Thu, 21 Oct 2010 09:03:25 +0200 +Subject: ALSA: hda - Add some workarounds for Creative IBG + +From: Takashi Iwai + +commit 14d34f166c57e77e3d7f9bc8b43d349186d922c1 upstream. + +Creative HD-audio controller chips require some workarounds: + - Additional delay before RIRB response + - Set the initial RIRB counter to 0xc0 + +The latter seems to be done in general in Windows driver, so we may +use this value later for all types if it's confirmed to work better. + +Reported-by: Wai Yew CHAY +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_intel.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -458,6 +458,7 @@ enum { + AZX_DRIVER_ULI, + AZX_DRIVER_NVIDIA, + AZX_DRIVER_TERA, ++ AZX_DRIVER_CTX, + AZX_DRIVER_GENERIC, + AZX_NUM_DRIVERS, /* keep this as last entry */ + }; +@@ -473,6 +474,7 @@ static char *driver_short_names[] __devi + [AZX_DRIVER_ULI] = "HDA ULI M5461", + [AZX_DRIVER_NVIDIA] = "HDA NVidia", + [AZX_DRIVER_TERA] = "HDA Teradici", ++ [AZX_DRIVER_CTX] = "HDA Creative", + [AZX_DRIVER_GENERIC] = "HD-Audio Generic", + }; + +@@ -563,7 +565,10 @@ static void azx_init_cmd_io(struct azx * + /* reset the rirb hw write pointer */ + azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST); + /* set N=1, get RIRB response interrupt for new entry */ +- azx_writew(chip, RINTCNT, 1); ++ if (chip->driver_type == AZX_DRIVER_CTX) ++ azx_writew(chip, RINTCNT, 0xc0); ++ else ++ azx_writew(chip, RINTCNT, 1); + /* enable rirb dma and response irq */ + azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN); + spin_unlock_irq(&chip->reg_lock); +@@ -1136,8 +1141,11 @@ static irqreturn_t azx_interrupt(int irq + /* clear rirb int */ + status = azx_readb(chip, RIRBSTS); + if (status & RIRB_INT_MASK) { +- if (status & RIRB_INT_RESPONSE) ++ if (status & RIRB_INT_RESPONSE) { ++ if (chip->driver_type == AZX_DRIVER_CTX) ++ udelay(80); + azx_update_rirb(chip); ++ } + azx_writeb(chip, RIRBSTS, RIRB_INT_MASK); + } + +@@ -2799,10 +2807,10 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) + { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID), + .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, + .class_mask = 0xffffff, +- .driver_data = AZX_DRIVER_GENERIC }, ++ .driver_data = AZX_DRIVER_CTX }, + #else + /* this entry seems still valid -- i.e. without emu20kx chip */ +- { PCI_DEVICE(0x1102, 0x0009), .driver_data = AZX_DRIVER_GENERIC }, ++ { PCI_DEVICE(0x1102, 0x0009), .driver_data = AZX_DRIVER_CTX }, + #endif + /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */ + { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID), diff --git a/queue-2.6.36/alsa-hda-add-workarounds-for-ct-ibg-controllers.patch b/queue-2.6.36/alsa-hda-add-workarounds-for-ct-ibg-controllers.patch new file mode 100644 index 00000000000..ce9a3a58f57 --- /dev/null +++ b/queue-2.6.36/alsa-hda-add-workarounds-for-ct-ibg-controllers.patch @@ -0,0 +1,70 @@ +From 62b7e5e09bcb854ff05e6ee1aa161f8283dc36ee Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 22 Oct 2010 17:15:47 +0200 +Subject: ALSA: hda - Add workarounds for CT-IBG controllers + +From: Takashi Iwai + +commit 62b7e5e09bcb854ff05e6ee1aa161f8283dc36ee upstream. + +Creative IBG controllers require the playback stream-tags to be started +from 1, instead of capture+1. Otherwise the stream stalls. + +Reported-by: Wai Yew CHAY +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_codec.c | 5 ++++- + sound/pci/hda/hda_intel.c | 9 +++++++-- + 2 files changed, 11 insertions(+), 3 deletions(-) + +--- a/sound/pci/hda/hda_codec.c ++++ b/sound/pci/hda/hda_codec.c +@@ -1216,6 +1216,7 @@ void snd_hda_codec_setup_stream(struct h + struct hda_codec *c; + struct hda_cvt_setup *p; + unsigned int oldval, newval; ++ int type; + int i; + + if (!nid) +@@ -1254,10 +1255,12 @@ void snd_hda_codec_setup_stream(struct h + p->dirty = 0; + + /* make other inactive cvts with the same stream-tag dirty */ ++ type = get_wcaps_type(get_wcaps(codec, nid)); + list_for_each_entry(c, &codec->bus->codec_list, list) { + for (i = 0; i < c->cvt_setups.used; i++) { + p = snd_array_elem(&c->cvt_setups, i); +- if (!p->active && p->stream_tag == stream_tag) ++ if (!p->active && p->stream_tag == stream_tag && ++ get_wcaps_type(get_wcaps(codec, p->nid)) == type) + p->dirty = 1; + } + } +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -1647,7 +1647,7 @@ static int azx_pcm_prepare(struct snd_pc + struct azx_dev *azx_dev = get_azx_dev(substream); + struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream]; + struct snd_pcm_runtime *runtime = substream->runtime; +- unsigned int bufsize, period_bytes, format_val; ++ unsigned int bufsize, period_bytes, format_val, stream_tag; + int err; + + azx_stream_reset(chip, azx_dev); +@@ -1689,7 +1689,12 @@ static int azx_pcm_prepare(struct snd_pc + else + azx_dev->fifo_size = 0; + +- return snd_hda_codec_prepare(apcm->codec, hinfo, azx_dev->stream_tag, ++ stream_tag = azx_dev->stream_tag; ++ /* CA-IBG chips need the playback stream starting from 1 */ ++ if (chip->driver_type == AZX_DRIVER_CTX && ++ stream_tag > chip->capture_streams) ++ stream_tag -= chip->capture_streams; ++ return snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag, + azx_dev->format_val, substream); + } + diff --git a/queue-2.6.36/alsa-hda-disable-sticky-pcm-stream-assignment-for-ad-codecs.patch b/queue-2.6.36/alsa-hda-disable-sticky-pcm-stream-assignment-for-ad-codecs.patch new file mode 100644 index 00000000000..ddf4a1546aa --- /dev/null +++ b/queue-2.6.36/alsa-hda-disable-sticky-pcm-stream-assignment-for-ad-codecs.patch @@ -0,0 +1,104 @@ +From 0e7adbe263f89ea2ef15b5af5e80a812b2a85025 Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Mon, 25 Oct 2010 10:37:11 +0200 +Subject: ALSA: hda - Disable sticky PCM stream assignment for AD codecs + +From: Takashi Iwai + +commit 0e7adbe263f89ea2ef15b5af5e80a812b2a85025 upstream. + +The sticky PCM stream assignment introduced in 2.6.36 kernel seems +causing problems on AD codecs. At some time later, the streaming no +longer works by unknown reason. A simple workaround is to disable +sticky-assignment for these codecs. + +Tested-by: Vasily Khoruzhick +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_codec.c | 3 +++ + sound/pci/hda/hda_codec.h | 1 + + sound/pci/hda/patch_analog.c | 7 +++++++ + 3 files changed, 11 insertions(+) + +--- a/sound/pci/hda/hda_codec.c ++++ b/sound/pci/hda/hda_codec.c +@@ -1281,6 +1281,9 @@ void __snd_hda_codec_cleanup_stream(stru + if (!nid) + return; + ++ if (codec->no_sticky_stream) ++ do_now = 1; ++ + snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid); + p = get_hda_cvt_setup(codec, nid); + if (p) { +--- a/sound/pci/hda/hda_codec.h ++++ b/sound/pci/hda/hda_codec.h +@@ -850,6 +850,7 @@ struct hda_codec { + unsigned int pin_amp_workaround:1; /* pin out-amp takes index + * (e.g. Conexant codecs) + */ ++ unsigned int no_sticky_stream:1; /* no sticky-PCM stream assignment */ + unsigned int pins_shutup:1; /* pins are shut up */ + unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */ + #ifdef CONFIG_SND_HDA_POWER_SAVE +--- a/sound/pci/hda/patch_analog.c ++++ b/sound/pci/hda/patch_analog.c +@@ -1276,6 +1276,7 @@ static int patch_ad1986a(struct hda_code + spec->multiout.no_share_stream = 1; + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } +@@ -1463,6 +1464,7 @@ static int patch_ad1983(struct hda_codec + codec->patch_ops = ad198x_patch_ops; + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } +@@ -1917,6 +1919,7 @@ static int patch_ad1981(struct hda_codec + } + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } +@@ -3235,6 +3238,7 @@ static int patch_ad1988(struct hda_codec + spec->vmaster_nid = 0x04; + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } +@@ -3449,6 +3453,7 @@ static int patch_ad1884(struct hda_codec + codec->patch_ops = ad198x_patch_ops; + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } +@@ -4422,6 +4427,7 @@ static int patch_ad1884a(struct hda_code + } + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } +@@ -4761,6 +4767,7 @@ static int patch_ad1882(struct hda_codec + } + + codec->no_trigger_sense = 1; ++ codec->no_sticky_stream = 1; + + return 0; + } diff --git a/queue-2.6.36/alsa-hda-enable-internal-mic-on-dell-e6410-and-dell-e6510.patch b/queue-2.6.36/alsa-hda-enable-internal-mic-on-dell-e6410-and-dell-e6510.patch new file mode 100644 index 00000000000..329eb486d5f --- /dev/null +++ b/queue-2.6.36/alsa-hda-enable-internal-mic-on-dell-e6410-and-dell-e6510.patch @@ -0,0 +1,78 @@ +From flameeyes@gmail.com Mon Nov 22 16:18:17 2010 +From: David Henningsson +Date: Mon, 25 Oct 2010 23:52:04 +0200 +Subject: ALSA: HDA: Enable internal mic on Dell E6410 and Dell E6510 +To: stable@kernel.org +Cc: Takashi Iwai , David Henningsson +Message-ID: <1288043524-31436-2-git-send-email-flameeyes@gmail.com> + +From: David Henningsson + +[Not upstream as .37 fixes this differently in a much more complete way +that is not able to be backported easily.] + +(Ported on top of 2.6.36) + +BugLink: http://launchpad.net/bugs/628961 +BugLink: http://launchpad.net/bugs/605047 + +Signed-off-by: David Henningsson +Signed-off-by: Diego Elio Pettenò +Acked-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_sigmatel.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +--- a/sound/pci/hda/patch_sigmatel.c ++++ b/sound/pci/hda/patch_sigmatel.c +@@ -93,6 +93,7 @@ enum { + STAC_92HD83XXX_REF, + STAC_92HD83XXX_PWR_REF, + STAC_DELL_S14, ++ STAC_DELL_E6410, + STAC_92HD83XXX_HP, + STAC_HP_DV7_4000, + STAC_92HD83XXX_MODELS +@@ -1633,6 +1634,13 @@ static unsigned int dell_s14_pin_configs + 0x40f000f0, 0x40f000f0, + }; + ++/* Deliberately turn off 0x0f (Dock Mic) to make it choose Int Mic instead */ ++static unsigned int dell_e6410_pin_configs[10] = { ++ 0x04a11020, 0x0421101f, 0x400000f0, 0x90170110, ++ 0x23011050, 0x40f000f0, 0x400000f0, 0x90a60130, ++ 0x40f000f0, 0x40f000f0, ++}; ++ + static unsigned int hp_dv7_4000_pin_configs[10] = { + 0x03a12050, 0x0321201f, 0x40f000f0, 0x90170110, + 0x40f000f0, 0x40f000f0, 0x90170110, 0xd5a30140, +@@ -1643,6 +1651,7 @@ static unsigned int *stac92hd83xxx_brd_t + [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs, + [STAC_92HD83XXX_PWR_REF] = ref92hd83xxx_pin_configs, + [STAC_DELL_S14] = dell_s14_pin_configs, ++ [STAC_DELL_E6410] = dell_e6410_pin_configs, + [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs, + }; + +@@ -1651,6 +1660,7 @@ static const char *stac92hd83xxx_models[ + [STAC_92HD83XXX_REF] = "ref", + [STAC_92HD83XXX_PWR_REF] = "mic-ref", + [STAC_DELL_S14] = "dell-s14", ++ [STAC_DELL_E6410] = "dell-e6410", + [STAC_92HD83XXX_HP] = "hp", + [STAC_HP_DV7_4000] = "hp-dv7-4000", + }; +@@ -1663,6 +1673,10 @@ static struct snd_pci_quirk stac92hd83xx + "DFI LanParty", STAC_92HD83XXX_REF), + SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02ba, + "unknown Dell", STAC_DELL_S14), ++ SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x040a, ++ "Dell E6410", STAC_DELL_E6410), ++ SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x040b, ++ "Dell E6510", STAC_DELL_E6410), + SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_HP, 0xff00, 0x3600, + "HP", STAC_92HD83XXX_HP), + {} /* terminator */ diff --git a/queue-2.6.36/alsa-hda-fix-wrong-spdif-nid-assignment-for-ca0110.patch b/queue-2.6.36/alsa-hda-fix-wrong-spdif-nid-assignment-for-ca0110.patch new file mode 100644 index 00000000000..bf329f7c799 --- /dev/null +++ b/queue-2.6.36/alsa-hda-fix-wrong-spdif-nid-assignment-for-ca0110.patch @@ -0,0 +1,31 @@ +From 24b55c69b66eb2a122842820ec14ab215fc8572f Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Thu, 21 Oct 2010 08:55:13 +0200 +Subject: ALSA: hda - Fix wrong SPDIF NID assignment for CA0110 + +From: Takashi Iwai + +commit 24b55c69b66eb2a122842820ec14ab215fc8572f upstream. + +The dig_out_nid field must take a digital-converter widget, but the current +ca0110 parser passed the pin wrongly instead. + +Reported-by: Wai Yew CHAY +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/patch_ca0110.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/sound/pci/hda/patch_ca0110.c ++++ b/sound/pci/hda/patch_ca0110.c +@@ -489,7 +489,7 @@ static void parse_digital(struct hda_cod + if (cfg->dig_outs && + snd_hda_get_connections(codec, cfg->dig_out_pins[0], + &spec->dig_out, 1) == 1) +- spec->multiout.dig_out_nid = cfg->dig_out_pins[0]; ++ spec->multiout.dig_out_nid = spec->dig_out; + } + + static int ca0110_parse_auto_config(struct hda_codec *codec) diff --git a/queue-2.6.36/alsa-oss-mixer-emulation-fix-locking.patch b/queue-2.6.36/alsa-oss-mixer-emulation-fix-locking.patch new file mode 100644 index 00000000000..0995effc098 --- /dev/null +++ b/queue-2.6.36/alsa-oss-mixer-emulation-fix-locking.patch @@ -0,0 +1,75 @@ +From 838c364ff05c143fd1810e8ad1469935d6c23a7a Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 8 Oct 2010 10:48:50 +0200 +Subject: ALSA: OSS mixer emulation - fix locking + +From: Jaroslav Kysela + +commit 838c364ff05c143fd1810e8ad1469935d6c23a7a upstream. + +Fix mutex release and cleanup some locking code. + +Signed-off-by: Jaroslav Kysela +Signed-off-by: Greg Kroah-Hartman + +--- + sound/core/oss/mixer_oss.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +--- a/sound/core/oss/mixer_oss.c ++++ b/sound/core/oss/mixer_oss.c +@@ -618,8 +618,10 @@ static void snd_mixer_oss_put_volume1_vo + if (numid == ID_UNKNOWN) + return; + down_read(&card->controls_rwsem); +- if ((kctl = snd_ctl_find_numid(card, numid)) == NULL) ++ if ((kctl = snd_ctl_find_numid(card, numid)) == NULL) { ++ up_read(&card->controls_rwsem); + return; ++ } + uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); + uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); + if (uinfo == NULL || uctl == NULL) +@@ -658,7 +660,7 @@ static void snd_mixer_oss_put_volume1_sw + return; + down_read(&card->controls_rwsem); + if ((kctl = snd_ctl_find_numid(card, numid)) == NULL) { +- up_read(&fmixer->card->controls_rwsem); ++ up_read(&card->controls_rwsem); + return; + } + uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL); +@@ -797,7 +799,7 @@ static int snd_mixer_oss_get_recsrc2(str + uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); + if (uinfo == NULL || uctl == NULL) { + err = -ENOMEM; +- goto __unlock; ++ goto __free_only; + } + down_read(&card->controls_rwsem); + kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0); +@@ -826,6 +828,7 @@ static int snd_mixer_oss_get_recsrc2(str + err = 0; + __unlock: + up_read(&card->controls_rwsem); ++ __free_only: + kfree(uctl); + kfree(uinfo); + return err; +@@ -847,7 +850,7 @@ static int snd_mixer_oss_put_recsrc2(str + uctl = kzalloc(sizeof(*uctl), GFP_KERNEL); + if (uinfo == NULL || uctl == NULL) { + err = -ENOMEM; +- goto __unlock; ++ goto __free_only; + } + down_read(&card->controls_rwsem); + kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0); +@@ -880,6 +883,7 @@ static int snd_mixer_oss_put_recsrc2(str + err = 0; + __unlock: + up_read(&card->controls_rwsem); ++ __free_only: + kfree(uctl); + kfree(uinfo); + return err; diff --git a/queue-2.6.36/microblaze-fix-build-with-make-3.82.patch b/queue-2.6.36/microblaze-fix-build-with-make-3.82.patch new file mode 100644 index 00000000000..79431fd54aa --- /dev/null +++ b/queue-2.6.36/microblaze-fix-build-with-make-3.82.patch @@ -0,0 +1,45 @@ +From b843e4ec01991a386a9e0e9030703524446e03da Mon Sep 17 00:00:00 2001 +From: Thomas Backlund +Date: Thu, 21 Oct 2010 13:19:10 +0300 +Subject: microblaze: Fix build with make 3.82 + +From: Thomas Backlund + +commit b843e4ec01991a386a9e0e9030703524446e03da upstream. + +When running make headers_install_all on x86_64 and make 3.82 I hit this: + +arch/microblaze/Makefile:80: *** mixed implicit and normal rules. Stop. +make: *** [headers_install_all] Error 2 + +So split the rules to satisfy make 3.82. + +Signed-off-by: Thomas Backlund +Signed-off-by: Michal Simek +Signed-off-by: Greg Kroah-Hartman + +--- + arch/microblaze/Makefile | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +--- a/arch/microblaze/Makefile ++++ b/arch/microblaze/Makefile +@@ -72,12 +72,16 @@ export MMU DTB + + all: linux.bin + +-BOOT_TARGETS = linux.bin linux.bin.gz simpleImage.% ++# With make 3.82 we cannot mix normal and wildcard targets ++BOOT_TARGETS1 = linux.bin linux.bin.gz ++BOOT_TARGETS2 = simpleImage.% + + archclean: + $(Q)$(MAKE) $(clean)=$(boot) + +-$(BOOT_TARGETS): vmlinux ++$(BOOT_TARGETS1): vmlinux ++ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ ++$(BOOT_TARGETS2): vmlinux + $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ + + define archhelp diff --git a/queue-2.6.36/powerpc-fix-call-to-subpage_protection.patch b/queue-2.6.36/powerpc-fix-call-to-subpage_protection.patch new file mode 100644 index 00000000000..745aaabff10 --- /dev/null +++ b/queue-2.6.36/powerpc-fix-call-to-subpage_protection.patch @@ -0,0 +1,63 @@ +From 1c2c25c78740b2796c7c06640784cb6732fa4907 Mon Sep 17 00:00:00 2001 +From: Michael Neuling +Date: Wed, 17 Nov 2010 16:32:59 +0000 +Subject: powerpc: Fix call to subpage_protection() + +From: Michael Neuling + +commit 1c2c25c78740b2796c7c06640784cb6732fa4907 upstream. + +In: + powerpc/mm: Fix pgtable cache cleanup with CONFIG_PPC_SUBPAGE_PROT + commit d28513bc7f675d28b479db666d572e078ecf182d + Author: David Gibson + +subpage_protection() was changed to to take an mm rather a pgdir but it +didn't change calling site in hashpage_preload(). The change wasn't +noticed at compile time since hashpage_preload() used a void* as the +parameter to subpage_protection(). + +This is obviously wrong and can trigger the following crash when +CONFIG_SLAB, CONFIG_DEBUG_SLAB, CONFIG_PPC_64K_PAGES +CONFIG_PPC_SUBPAGE_PROT are enabled. + +Freeing unused kernel memory: 704k freed +Unable to handle kernel paging request for data at address 0x6b6b6b6b6b6c49b7 +Faulting instruction address: 0xc0000000000410f4 +cpu 0x2: Vector: 300 (Data Access) at [c00000004233f590] + pc: c0000000000410f4: .hash_preload+0x258/0x338 + lr: c000000000041054: .hash_preload+0x1b8/0x338 + sp: c00000004233f810 + msr: 8000000000009032 + dar: 6b6b6b6b6b6c49b7 + dsisr: 40000000 + current = 0xc00000007e2c0070 + paca = 0xc000000007fe0500 + pid = 1, comm = init +enter ? for help +[c00000004233f810] c000000000041020 .hash_preload+0x184/0x338 (unreliable) +[c00000004233f8f0] c00000000003ed98 .update_mmu_cache+0xb0/0xd0 +[c00000004233f990] c000000000157754 .__do_fault+0x48c/0x5dc +[c00000004233faa0] c000000000158fd0 .handle_mm_fault+0x508/0xa8c +[c00000004233fb90] c0000000006acdd4 .do_page_fault+0x428/0x6ac +[c00000004233fe30] c000000000005260 handle_page_fault+0x20/0x74 + +Reported-by: Jim Keniston +Signed-off-by: Benjamin Herrenschmidt +Signed-off-by: Michael Neuling +cc: David Gibson +Signed-off-by: Greg Kroah-Hartman + +diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c +index 83f534d..5e95844 100644 +--- a/arch/powerpc/mm/hash_utils_64.c ++++ b/arch/powerpc/mm/hash_utils_64.c +@@ -1123,7 +1123,7 @@ void hash_preload(struct mm_struct *mm, unsigned long ea, + else + #endif /* CONFIG_PPC_HAS_HASH_64K */ + rc = __hash_page_4K(ea, access, vsid, ptep, trap, local, ssize, +- subpage_protection(pgdir, ea)); ++ subpage_protection(mm, ea)); + + /* Dump some info in case of hash insertion failure, they should + * never happen so it is really useful to know if/when they do diff --git a/queue-2.6.36/series b/queue-2.6.36/series index bf80a2a3cca..6983c800101 100644 --- a/queue-2.6.36/series +++ b/queue-2.6.36/series @@ -65,3 +65,12 @@ isdn-gigaset-bas_gigaset-locking-fix.patch i2c-pca-platform-change-device-name-of-request_irq.patch viafb-fix-i2c_transfer-error-handling.patch drm-radeon-kms-register-an-i2c-adapter-name-for-the-dp-aux-bus.patch +alsa-hda-disable-sticky-pcm-stream-assignment-for-ad-codecs.patch +alsa-hda-add-workarounds-for-ct-ibg-controllers.patch +alsa-hda-fix-wrong-spdif-nid-assignment-for-ca0110.patch +alsa-hda-add-some-workarounds-for-creative-ibg.patch +alsa-oss-mixer-emulation-fix-locking.patch +alsa-hda-enable-internal-mic-on-dell-e6410-and-dell-e6510.patch +powerpc-fix-call-to-subpage_protection.patch +sunrpc-after-calling-xprt_release-we-must-restart-from-call_reserve.patch +microblaze-fix-build-with-make-3.82.patch diff --git a/queue-2.6.36/sunrpc-after-calling-xprt_release-we-must-restart-from-call_reserve.patch b/queue-2.6.36/sunrpc-after-calling-xprt_release-we-must-restart-from-call_reserve.patch new file mode 100644 index 00000000000..99b5be3f144 --- /dev/null +++ b/queue-2.6.36/sunrpc-after-calling-xprt_release-we-must-restart-from-call_reserve.patch @@ -0,0 +1,77 @@ +From 118df3d17f11733b294ea2cd988d56ee376ef9fd Mon Sep 17 00:00:00 2001 +From: Trond Myklebust +Date: Sun, 24 Oct 2010 17:17:31 -0400 +Subject: SUNRPC: After calling xprt_release(), we must restart from call_reserve + +From: Trond Myklebust + +commit 118df3d17f11733b294ea2cd988d56ee376ef9fd upstream. + +Rob Leslie reports seeing the following Oops after his Kerberos session +expired. + +BUG: unable to handle kernel NULL pointer dereference at 00000058 +IP: [] rpcauth_refreshcred+0x11/0x12c [sunrpc] +*pde = 00000000 +Oops: 0000 [#1] +last sysfs file: /sys/devices/platform/pc87360.26144/temp3_input +Modules linked in: autofs4 authenc esp4 xfrm4_mode_transport ipt_LOG ipt_REJECT xt_limit xt_state ipt_REDIRECT xt_owner xt_HL xt_hl xt_tcpudp xt_mark cls_u32 cls_tcindex sch_sfq sch_htb sch_dsmark geodewdt deflate ctr twofish_generic twofish_i586 twofish_common camellia serpent blowfish cast5 cbc xcbc rmd160 sha512_generic sha1_generic hmac crypto_null af_key rpcsec_gss_krb5 nfsd exportfs nfs lockd fscache nfs_acl auth_rpcgss sunrpc ip_gre sit tunnel4 dummy ext3 jbd nf_nat_irc nf_conntrack_irc nf_nat_ftp nf_conntrack_ftp iptable_mangle iptable_nat nf_nat nf_conntrack_ipv4 nf_conntrack nf_defrag_ipv4 iptable_filter ip_tables x_tables pc8736x_gpio nsc_gpio pc87360 hwmon_vid loop aes_i586 aes_generic sha256_generic dm_crypt cs5535_gpio serio_raw cs5535_mfgpt hifn_795x des_generic geode_rng rng_core led_class ext4 mbcache jbd2 crc16 dm_mirror dm_region_hash dm_log dm_snapshot dm_mod sd_mod crc_t10dif ide_pci_generic cs5536 amd74xx ide_core pata_cs5536 ata_generic libata usb_storage via_rhine mii scsi_mod btrfs zlib_deflate crc32c libcrc32c [last unloaded: scsi_wait_scan] + +Pid: 12875, comm: sudo Not tainted 2.6.36-net5501 #1 / +EIP: 0060:[] EFLAGS: 00010292 CPU: 0 +EIP is at rpcauth_refreshcred+0x11/0x12c [sunrpc] +EAX: 00000000 EBX: defb13a0 ECX: 00000006 EDX: e18683b8 +ESI: defb13a0 EDI: 00000000 EBP: 00000000 ESP: de571d58 + DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068 +Process sudo (pid: 12875, ti=de570000 task=decd1430 task.ti=de570000) +Stack: + e186e008 00000000 defb13a0 0000000d deda6000 e1868f22 e196f12b defb13a0 +<0> defb13d8 00000000 00000000 e186e0aa 00000000 defb13a0 de571dac 00000000 +<0> e186956c de571e34 debea5c0 de571dc8 e186967a 00000000 debea5c0 de571e34 +Call Trace: + [] ? rpc_wake_up_next+0x114/0x11b [sunrpc] + [] ? call_decode+0x24a/0x5af [sunrpc] + [] ? nfs4_xdr_dec_access+0x0/0xa2 [nfs] + [] ? __rpc_execute+0x62/0x17b [sunrpc] + [] ? rpc_run_task+0x91/0x97 [sunrpc] + [] ? rpc_call_sync+0x40/0x5b [sunrpc] + [] ? nfs4_proc_access+0x10a/0x176 [nfs] + [] ? nfs_do_access+0x2b1/0x2c0 [nfs] + [] ? rpcauth_lookupcred+0x62/0x84 [sunrpc] + [] ? nfs_permission+0xad/0x13b [nfs] + [] ? exec_permission+0x15/0x4b + [] ? link_path_walk+0x4f/0x456 + [] ? path_walk+0x4c/0xa8 + [] ? do_path_lookup+0x1f/0x68 + [] ? user_path_at+0x37/0x5f + [] ? handle_mm_fault+0x229/0x55b + [] ? sys_faccessat+0x93/0x146 + [] ? sys_access+0xf/0x13 + [] ? syscall_call+0x7/0xb +Code: 0f 94 c2 84 d2 74 09 8b 44 24 0c e8 6a e9 8b de 83 c4 14 89 d8 5b 5e 5f 5d c3 55 57 56 53 83 ec 1c fc 89 c6 8b 40 10 89 44 24 04 <8b> 58 58 85 db 0f 85 d4 00 00 00 0f b7 46 70 8b 56 20 89 c5 83 +EIP: [] rpcauth_refreshcred+0x11/0x12c [sunrpc] SS:ESP 0068:de571d58 +CR2: 0000000000000058 + +This appears to be caused by the function rpc_verify_header() first +calling xprt_release(), then doing a call_refresh. If we release the +transport slot, we should _always_ jump back to call_reserve before +calling anything else. + +Signed-off-by: Trond Myklebust +Signed-off-by: Greg Kroah-Hartman + +--- + net/sunrpc/clnt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/sunrpc/clnt.c ++++ b/net/sunrpc/clnt.c +@@ -1675,7 +1675,7 @@ rpc_verify_header(struct rpc_task *task) + rpcauth_invalcred(task); + /* Ensure we obtain a new XID! */ + xprt_release(task); +- task->tk_action = call_refresh; ++ task->tk_action = call_reserve; + goto out_retry; + case RPC_AUTH_BADCRED: + case RPC_AUTH_BADVERF: