--- /dev/null
+From a45e3d6b13e97506b616980c0f122c3389bcefa4 Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Thu, 24 Mar 2011 09:50:15 +0100
+Subject: ALSA: Fix yet another race in disconnection
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit a45e3d6b13e97506b616980c0f122c3389bcefa4 upstream.
+
+This patch fixes a race between snd_card_file_remove() and
+snd_card_disconnect(). When the card is added to shutdown_files list
+in snd_card_disconnect(), but it's freed in snd_card_file_remove() at
+the same time, the shutdown_files list gets corrupted. The list member
+must be freed in snd_card_file_remove() as well.
+
+Reported-and-tested-by: Russ Dill <russ.dill@gmail.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/core/init.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/sound/core/init.c
++++ b/sound/core/init.c
+@@ -848,6 +848,7 @@ int snd_card_file_add(struct snd_card *c
+ return -ENOMEM;
+ mfile->file = file;
+ mfile->disconnected_f_op = NULL;
++ INIT_LIST_HEAD(&mfile->shutdown_list);
+ spin_lock(&card->files_lock);
+ if (card->shutdown) {
+ spin_unlock(&card->files_lock);
+@@ -883,6 +884,9 @@ int snd_card_file_remove(struct snd_card
+ list_for_each_entry(mfile, &card->files_list, list) {
+ if (mfile->file == file) {
+ list_del(&mfile->list);
++ spin_lock(&shutdown_lock);
++ list_del(&mfile->shutdown_list);
++ spin_unlock(&shutdown_lock);
+ if (mfile->disconnected_f_op)
+ fops_put(mfile->disconnected_f_op);
+ found = mfile;
--- /dev/null
+From 20b67dddcc5f29d3d0c900225d85e0ac655bc69d Mon Sep 17 00:00:00 2001
+From: Takashi Iwai <tiwai@suse.de>
+Date: Wed, 23 Mar 2011 22:54:32 +0100
+Subject: ALSA: hda - Fix SPDIF out regression on ALC889
+
+From: Takashi Iwai <tiwai@suse.de>
+
+commit 20b67dddcc5f29d3d0c900225d85e0ac655bc69d upstream.
+
+The commit 5a8cfb4e8ae317d283f84122ed20faa069c5e0c4
+ ALSA: hda - Use ALC_INIT_DEFAULT for really default initialization
+changed to use the default initialization method for ALC889, but
+this caused a regression on SPDIF output on some machines.
+This seems due to the COEF setup included in the default init procedure.
+For making SPDIF working again, the COEF-setup has to be avoided for
+the id 0889.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=24342
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -1360,7 +1360,7 @@ static void alc_auto_init_amp(struct hda
+ case 0x10ec0883:
+ case 0x10ec0885:
+ case 0x10ec0887:
+- case 0x10ec0889:
++ /*case 0x10ec0889:*/ /* this causes an SPDIF problem */
+ alc889_coef_init(codec);
+ break;
+ case 0x10ec0888:
--- /dev/null
+From 677cd904aba939bc4cfdc3c1eada8ec46582127e Mon Sep 17 00:00:00 2001
+From: David Henningsson <david.henningsson@canonical.com>
+Date: Mon, 7 Feb 2011 15:19:34 +0100
+Subject: ALSA: HDA: New AD1984A model for Dell Precision R5500
+
+From: David Henningsson <david.henningsson@canonical.com>
+
+commit 677cd904aba939bc4cfdc3c1eada8ec46582127e upstream.
+
+For codec AD1984A, add a new model to support Dell Precision R5500
+or the microphone jack won't work correctly.
+
+BugLink: http://bugs.launchpad.net/bugs/741516
+Tested-by: Kent Baxley <kent.baxley@canonical.com>
+Signed-off-by: David Henningsson <david.henningsson@canonical.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/hda/patch_analog.c | 89 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 89 insertions(+)
+
+--- a/sound/pci/hda/patch_analog.c
++++ b/sound/pci/hda/patch_analog.c
+@@ -4353,6 +4353,84 @@ static int ad1984a_thinkpad_init(struct
+ }
+
+ /*
++ * Precision R5500
++ * 0x12 - HP/line-out
++ * 0x13 - speaker (mono)
++ * 0x15 - mic-in
++ */
++
++static struct hda_verb ad1984a_precision_verbs[] = {
++ /* Unmute main output path */
++ {0x03, AC_VERB_SET_AMP_GAIN_MUTE, 0x27}, /* 0dB */
++ {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE + 0x1f}, /* 0dB */
++ {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(5) + 0x17}, /* 0dB */
++ /* Analog mixer; mute as default */
++ {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
++ {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
++ {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)},
++ {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)},
++ {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)},
++ /* Select mic as input */
++ {0x0c, AC_VERB_SET_CONNECT_SEL, 0x1},
++ {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE + 0x27}, /* 0dB */
++ /* Configure as mic */
++ {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
++ {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */
++ /* HP unmute */
++ {0x12, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
++ /* turn on EAPD */
++ {0x13, AC_VERB_SET_EAPD_BTLENABLE, 0x02},
++ /* unsolicited event for pin-sense */
++ {0x12, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_HP_EVENT},
++ { } /* end */
++};
++
++static struct snd_kcontrol_new ad1984a_precision_mixers[] = {
++ HDA_CODEC_VOLUME("Master Playback Volume", 0x21, 0x0, HDA_OUTPUT),
++ HDA_CODEC_MUTE("Master Playback Switch", 0x21, 0x0, HDA_OUTPUT),
++ HDA_CODEC_VOLUME("PCM Playback Volume", 0x20, 0x5, HDA_INPUT),
++ HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT),
++ HDA_CODEC_VOLUME("Mic Playback Volume", 0x20, 0x01, HDA_INPUT),
++ HDA_CODEC_MUTE("Mic Playback Switch", 0x20, 0x01, HDA_INPUT),
++ HDA_CODEC_VOLUME("Mic Boost Volume", 0x15, 0x0, HDA_INPUT),
++ HDA_CODEC_MUTE("Front Playback Switch", 0x12, 0x0, HDA_OUTPUT),
++ HDA_CODEC_VOLUME("Speaker Playback Volume", 0x13, 0x0, HDA_OUTPUT),
++ HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT),
++ HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT),
++ { } /* end */
++};
++
++
++/* mute internal speaker if HP is plugged */
++static void ad1984a_precision_automute(struct hda_codec *codec)
++{
++ unsigned int present;
++
++ present = snd_hda_jack_detect(codec, 0x12);
++ snd_hda_codec_amp_stereo(codec, 0x13, HDA_OUTPUT, 0,
++ HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0);
++}
++
++
++/* unsolicited event for HP jack sensing */
++static void ad1984a_precision_unsol_event(struct hda_codec *codec,
++ unsigned int res)
++{
++ if ((res >> 26) != AD1884A_HP_EVENT)
++ return;
++ ad1984a_precision_automute(codec);
++}
++
++/* initialize jack-sensing, too */
++static int ad1984a_precision_init(struct hda_codec *codec)
++{
++ ad198x_init(codec);
++ ad1984a_precision_automute(codec);
++ return 0;
++}
++
++
++/*
+ * HP Touchsmart
+ * port-A (0x11) - front hp-out
+ * port-B (0x14) - unused
+@@ -4481,6 +4559,7 @@ enum {
+ AD1884A_MOBILE,
+ AD1884A_THINKPAD,
+ AD1984A_TOUCHSMART,
++ AD1984A_PRECISION,
+ AD1884A_MODELS
+ };
+
+@@ -4490,9 +4569,11 @@ static const char * const ad1884a_models
+ [AD1884A_MOBILE] = "mobile",
+ [AD1884A_THINKPAD] = "thinkpad",
+ [AD1984A_TOUCHSMART] = "touchsmart",
++ [AD1984A_PRECISION] = "precision",
+ };
+
+ static struct snd_pci_quirk ad1884a_cfg_tbl[] = {
++ SND_PCI_QUIRK(0x1028, 0x04ac, "Precision R5500", AD1984A_PRECISION),
+ SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE),
+ SND_PCI_QUIRK(0x103c, 0x3037, "HP 2230s", AD1884A_LAPTOP),
+ SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE),
+@@ -4586,6 +4667,14 @@ static int patch_ad1884a(struct hda_code
+ codec->patch_ops.unsol_event = ad1984a_thinkpad_unsol_event;
+ codec->patch_ops.init = ad1984a_thinkpad_init;
+ break;
++ case AD1984A_PRECISION:
++ spec->mixers[0] = ad1984a_precision_mixers;
++ spec->init_verbs[spec->num_init_verbs++] =
++ ad1984a_precision_verbs;
++ spec->multiout.dig_out_nid = 0;
++ codec->patch_ops.unsol_event = ad1984a_precision_unsol_event;
++ codec->patch_ops.init = ad1984a_precision_init;
++ break;
+ case AD1984A_TOUCHSMART:
+ spec->mixers[0] = ad1984a_touchsmart_mixers;
+ spec->init_verbs[0] = ad1984a_touchsmart_verbs;
--- /dev/null
+From 3674f19dabd15f9541079a588149a370d888f4e6 Mon Sep 17 00:00:00 2001
+From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Date: Fri, 25 Mar 2011 17:51:54 +1100
+Subject: ALSA: vmalloc buffers should use normal mmap
+
+From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+
+commit 3674f19dabd15f9541079a588149a370d888f4e6 upstream.
+
+It's a big no-no to use pgprot_noncached() when mmap'ing such buffers
+into userspace since they are mapped cachable in kernel space.
+
+This can cause all sort of interesting things ranging from to garbled
+sound to lockups on various architectures. I've observed that usb-audio
+is broken on powerpc 4xx for example because of that.
+
+Also remove the now unused snd_pcm_lib_mmap_noncached(). It's
+an arch business to know when to use uncached mappings, there's
+already hacks for MIPS inside snd_pcm_default_mmap() and other
+archs are supposed to use dma_mmap_coherent().
+
+(See my separate patch that adds dma_mmap_coherent() to powerpc)
+
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/sound/pcm.h | 4 +---
+ sound/core/pcm_native.c | 9 ---------
+ 2 files changed, 1 insertion(+), 12 deletions(-)
+
+--- a/include/sound/pcm.h
++++ b/include/sound/pcm.h
+@@ -1030,9 +1030,7 @@ int snd_pcm_lib_mmap_iomem(struct snd_pc
+ #define snd_pcm_lib_mmap_iomem NULL
+ #endif
+
+-int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
+- struct vm_area_struct *area);
+-#define snd_pcm_lib_mmap_vmalloc snd_pcm_lib_mmap_noncached
++#define snd_pcm_lib_mmap_vmalloc NULL
+
+ static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
+ {
+--- a/sound/core/pcm_native.c
++++ b/sound/core/pcm_native.c
+@@ -3201,15 +3201,6 @@ int snd_pcm_lib_mmap_iomem(struct snd_pc
+ EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem);
+ #endif /* SNDRV_PCM_INFO_MMAP */
+
+-/* mmap callback with pgprot_noncached */
+-int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
+- struct vm_area_struct *area)
+-{
+- area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
+- return snd_pcm_default_mmap(substream, area);
+-}
+-EXPORT_SYMBOL(snd_pcm_lib_mmap_noncached);
+-
+ /*
+ * mmap DMA buffer
+ */
--- /dev/null
+From 61e1b0b00c793ad5a32fe2181c9f77115fed5dc4 Mon Sep 17 00:00:00 2001
+From: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
+Date: Mon, 21 Mar 2011 18:27:21 +0530
+Subject: ath9k: Fix kernel panic in AR2427
+
+From: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
+
+commit 61e1b0b00c793ad5a32fe2181c9f77115fed5dc4 upstream.
+
+Kernel panic occurs just after AR2427 establishes connection with AP.
+Unless aggregation is enabled we don't initialize the TID structure.
+Thus accesing the elements of the TID structure when aggregation is
+disabled, leads to NULL pointer dereferencing.
+
+[ 191.320358] Call Trace:
+[ 191.320364] [<fd250ea7>] ? ath9k_tx+0xa7/0x200 [ath9k]
+[ 191.320376] [<fd1ec7fc>] ? __ieee80211_tx+0x5c/0x1e0 [mac80211]
+[ 191.320386] [<fd1edd2b>] ? ieee80211_tx+0x7b/0x90 [mac80211]
+[ 191.320395] [<fd1edddd>] ? ieee80211_xmit+0x9d/0x1d0 [mac80211]
+[ 191.320401] [<c014218f>] ? wake_up_state+0xf/0x20
+[ 191.320405] [<c015dbc8>] ? signal_wake_up+0x28/0x40
+[ 191.320410] [<c012a578>] ? default_spin_lock_flags+0x8/0x10
+[ 191.320420] [<fd1ee308>] ? ieee80211_subif_start_xmit+0x2e8/0x7c0
+[mac80211]
+[ 191.320425] [<c058f905>] ? do_page_fault+0x295/0x3a0
+[ 191.320431] [<c04c4a3d>] ? dev_hard_start_xmit+0x1ad/0x210
+[ 191.320436] [<c04d96b5>] ? sch_direct_xmit+0x105/0x170
+[ 191.320445] [<fd1f161a>] ? get_sta_flags+0x2a/0x40 [mac80211]
+[ 191.320449] [<c04c780f>] ? dev_queue_xmit+0x37f/0x4b0
+[ 191.320452] [<c04d75b0>] ? eth_header+0x0/0xb0
+[ 191.320456] [<c04cc479>] ? neigh_resolve_output+0xe9/0x310
+[ 191.320461] [<c053d295>] ? ip6_output_finish+0xa5/0x110
+[ 191.320464] [<c053e354>] ? ip6_output2+0x134/0x250
+[ 191.320468] [<c053f7dd>] ? ip6_output+0x6d/0x100
+[ 191.320471] [<c0559665>] ? mld_sendpack+0x395/0x3e0
+[ 191.320475] [<c0557f81>] ? add_grhead+0x31/0xa0
+[ 191.320478] [<c055a83c>] ? mld_send_cr+0x1bc/0x2b0
+[ 191.320482] [<c01535d9>] ? irq_exit+0x39/0x70
+[ 191.320485] [<c055a940>] ? mld_ifc_timer_expire+0x10/0x40
+[ 191.320489] [<c015b92e>] ? run_timer_softirq+0x13e/0x2c0
+[ 191.320493] [<c0103a30>] ? common_interrupt+0x30/0x40
+[ 191.320498] [<c055a930>] ? mld_ifc_timer_expire+0x0/0x40
+[ 191.320502] [<c0153358>] ? __do_softirq+0x98/0x1b0
+[ 191.320506] [<c01534b5>] ? do_softirq+0x45/0x50
+[ 191.320509] [<c0153605>] ? irq_exit+0x65/0x70
+[ 191.320513] [<c05917dc>] ? smp_apic_timer_interrupt+0x5c/0x8b
+[ 191.320516] [<c0103df1>] ? apic_timer_interrupt+0x31/0x40
+[ 191.320521] [<c016007b>] ? k_getrusage+0x12b/0x2f0
+[ 191.320525] [<c039e384>] ? acpi_idle_enter_simple+0x117/0x148
+[ 191.320529] [<c04a20da>] ? cpuidle_idle_call+0x7a/0x100
+[ 191.320532] [<c01021d4>] ? cpu_idle+0x94/0xd0
+[ 191.320536] [<c057ab88>] ? rest_init+0x58/0x60
+[ 191.320541] [<c07a58ec>] ? start_kernel+0x351/0x357
+[ 191.320544] [<c07a53c7>] ? unknown_bootoption+0x0/0x19e
+[ 191.320548] [<c07a50aa>] ? i386_start_kernel+0xaa/0xb1
+[ 191.320550] Code: 03 66 3d 00 03 0f 84 7c 02 00 00 83 c3 18 0f b6 03
+8b 4d e0 89 c3 83 e3 0f 6b c3 48 89 5d d8 8d 04 06 8d 50 0c 89 55 d0 8b
+40 20 <8b> 00 3b 01 0f 85 8e 02 00 00 f6 47 20 40 0f 84 29 ff ff ff 8b
+[ 191.320634] EIP: [<fd2586d4>] ath_tx_start+0x474/0x770 [ath9k] SS:ESP
+0068:c0761a90
+[ 191.320642] CR2: 0000000000000000
+[ 191.320647] ---[ end trace 9296ef23b9076ece ]---
+[ 191.320650] Kernel panic - not syncing: Fatal exception in interrupt
+
+Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/ath/ath9k/xmit.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -1699,8 +1699,8 @@ static void ath_tx_start_dma(struct ath_
+ u8 tidno;
+
+ spin_lock_bh(&txctl->txq->axq_lock);
+-
+- if (ieee80211_is_data_qos(hdr->frame_control) && txctl->an) {
++ if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an &&
++ ieee80211_is_data_qos(hdr->frame_control)) {
+ tidno = ieee80211_get_qos_ctl(hdr)[0] &
+ IEEE80211_QOS_CTL_TID_MASK;
+ tid = ATH_AN_2_TID(txctl->an, tidno);
--- /dev/null
+From 978eb516a4e1a1b47163518d6f5d5e81ab27a583 Mon Sep 17 00:00:00 2001
+From: Stephen M. Cameron <scameron@beardog.cce.hp.com>
+Date: Fri, 11 Mar 2011 20:07:38 +0100
+Subject: cciss: Add missing allocation in scsi_cmd_stack_setup and corresponding deallocation
+
+From: Stephen M. Cameron <scameron@beardog.cce.hp.com>
+
+commit 978eb516a4e1a1b47163518d6f5d5e81ab27a583 upstream.
+
+This bit got lost somewhere along the way. Without this, panic.
+
+Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
+Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/cciss_scsi.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/block/cciss_scsi.c
++++ b/drivers/block/cciss_scsi.c
+@@ -226,6 +226,13 @@ scsi_cmd_stack_setup(ctlr_info_t *h, str
+ return -ENOMEM;
+ }
+
++ stk->elem = kmalloc(sizeof(stk->elem[0]) * stk->nelems, GFP_KERNEL);
++ if (!stk->elem) {
++ pci_free_consistent(h->pdev, size, stk->pool,
++ stk->cmd_pool_handle);
++ return -1;
++ }
++
+ for (i=0; i<CMD_STACK_SIZE; i++) {
+ stk->elem[i] = &stk->pool[i];
+ stk->elem[i]->busaddr = (__u32) (stk->cmd_pool_handle +
+@@ -255,6 +262,8 @@ scsi_cmd_stack_free(ctlr_info_t *h)
+ pci_free_consistent(h->pdev, size, stk->pool, stk->cmd_pool_handle);
+ stk->pool = NULL;
+ cciss_free_sg_chain_blocks(sa->cmd_sg_list, CMD_STACK_SIZE);
++ kfree(stk->elem);
++ stk->elem = NULL;
+ }
+
+ #if 0
--- /dev/null
+From 1ddd5049545e0aa1a0ed19bca4d9c9c3ce1ac8a2 Mon Sep 17 00:00:00 2001
+From: Bud Brown <bud.brown@redhat.com>
+Date: Wed, 23 Mar 2011 20:47:11 +0100
+Subject: cciss: fix lost command issue
+
+From: Bud Brown <bud.brown@redhat.com>
+
+commit 1ddd5049545e0aa1a0ed19bca4d9c9c3ce1ac8a2 upstream.
+
+Under certain workloads a command may seem to get lost. IOW, the Smart Array
+thinks all commands have been completed but we still have commands in our
+completion queue. This may lead to system instability, filesystems going
+read-only, or even panics depending on the affected filesystem. We add an
+extra read to force the write to complete.
+
+Testing shows this extra read avoids the problem.
+
+Signed-off-by: Mike Miller <mike.miller@hp.com>
+Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/cciss.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/block/cciss.h
++++ b/drivers/block/cciss.h
+@@ -222,6 +222,7 @@ static void SA5_submit_command( ctlr_inf
+ h->ctlr, c->busaddr);
+ #endif /* CCISS_DEBUG */
+ writel(c->busaddr, h->vaddr + SA5_REQUEST_PORT_OFFSET);
++ readl(h->vaddr + SA5_REQUEST_PORT_OFFSET);
+ h->commands_outstanding++;
+ if ( h->commands_outstanding > h->max_outstanding)
+ h->max_outstanding = h->commands_outstanding;
--- /dev/null
+From 8bc8aecdc5e26cfda12dbd6867af4aa67836da6a Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@openwrt.org>
+Date: Mon, 21 Mar 2011 20:01:00 +0100
+Subject: mac80211: initialize sta->last_rx in sta_info_alloc
+
+From: Felix Fietkau <nbd@openwrt.org>
+
+commit 8bc8aecdc5e26cfda12dbd6867af4aa67836da6a upstream.
+
+This field is used to determine the inactivity time. When in AP mode,
+hostapd uses it for kicking out inactive clients after a while. Without this
+patch, hostapd immediately deauthenticates a new client if it checks the
+inactivity time before the client sends its first data frame.
+
+Signed-off-by: Felix Fietkau <nbd@openwrt.org>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/mac80211/sta_info.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/mac80211/sta_info.c
++++ b/net/mac80211/sta_info.c
+@@ -243,6 +243,7 @@ struct sta_info *sta_info_alloc(struct i
+ memcpy(sta->sta.addr, addr, ETH_ALEN);
+ sta->local = local;
+ sta->sdata = sdata;
++ sta->last_rx = jiffies;
+
+ ewma_init(&sta->avg_signal, 1024, 8);
+
--- /dev/null
+From cda6587c21a887254c8ed4b58da8fcc4040ab557 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Wed, 23 Mar 2011 02:44:30 +0000
+Subject: myri10ge: fix rmmod crash
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit cda6587c21a887254c8ed4b58da8fcc4040ab557 upstream.
+
+Rmmod myri10ge crash at free_netdev() -> netif_napi_del(), because napi
+structures are already deallocated. To fix call netif_napi_del() before
+kfree() at myri10ge_free_slices().
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/myri10ge/myri10ge.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/myri10ge/myri10ge.c
++++ b/drivers/net/myri10ge/myri10ge.c
+@@ -3645,6 +3645,7 @@ static void myri10ge_free_slices(struct
+ dma_free_coherent(&pdev->dev, bytes,
+ ss->fw_stats, ss->fw_stats_bus);
+ ss->fw_stats = NULL;
++ netif_napi_del(&ss->napi);
+ }
+ }
+ kfree(mgp->ss);
--- /dev/null
+From 8b8bae901ce23addbdcdb54fa1696fb2d049feb5 Mon Sep 17 00:00:00 2001
+From: Rafael J. Wysocki <rjw@sisk.pl>
+Date: Sat, 5 Mar 2011 13:21:51 +0100
+Subject: PCI/ACPI: Report ASPM support to BIOS if not disabled from command line
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Rafael J. Wysocki <rjw@sisk.pl>
+
+commit 8b8bae901ce23addbdcdb54fa1696fb2d049feb5 upstream.
+
+We need to distinguish the situation in which ASPM support is
+disabled from the command line or through .config from the situation
+in which it is disabled, because the hardware or BIOS can't handle
+it. In the former case we should not report ASPM support to the BIOS
+through ACPI _OSC, but in the latter case we should do that.
+
+Introduce pcie_aspm_support_enabled() that can be used by
+acpi_pci_root_add() to determine whether or not it should report ASPM
+support to the BIOS through _OSC.
+
+References: https://bugzilla.kernel.org/show_bug.cgi?id=29722
+References: https://bugzilla.kernel.org/show_bug.cgi?id=20232
+Reported-and-tested-by: Ortwin Glück <odi@odi.ch>
+Reviewed-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+Tested-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
+Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/acpi/pci_root.c | 2 +-
+ drivers/pci/pcie/aspm.c | 7 +++++++
+ include/linux/pci.h | 7 +++----
+ 3 files changed, 11 insertions(+), 5 deletions(-)
+
+--- a/drivers/acpi/pci_root.c
++++ b/drivers/acpi/pci_root.c
+@@ -564,7 +564,7 @@ static int __devinit acpi_pci_root_add(s
+ /* Indicate support for various _OSC capabilities. */
+ if (pci_ext_cfg_avail(root->bus->self))
+ flags |= OSC_EXT_PCI_CONFIG_SUPPORT;
+- if (pcie_aspm_enabled())
++ if (pcie_aspm_support_enabled())
+ flags |= OSC_ACTIVE_STATE_PWR_SUPPORT |
+ OSC_CLOCK_PWR_CAPABILITY_SUPPORT;
+ if (pci_msi_enabled())
+--- a/drivers/pci/pcie/aspm.c
++++ b/drivers/pci/pcie/aspm.c
+@@ -69,6 +69,7 @@ struct pcie_link_state {
+ };
+
+ static int aspm_disabled, aspm_force, aspm_clear_state;
++static bool aspm_support_enabled = true;
+ static DEFINE_MUTEX(aspm_lock);
+ static LIST_HEAD(link_list);
+
+@@ -896,6 +897,7 @@ static int __init pcie_aspm_disable(char
+ {
+ if (!strcmp(str, "off")) {
+ aspm_disabled = 1;
++ aspm_support_enabled = false;
+ printk(KERN_INFO "PCIe ASPM is disabled\n");
+ } else if (!strcmp(str, "force")) {
+ aspm_force = 1;
+@@ -930,3 +932,8 @@ int pcie_aspm_enabled(void)
+ }
+ EXPORT_SYMBOL(pcie_aspm_enabled);
+
++bool pcie_aspm_support_enabled(void)
++{
++ return aspm_support_enabled;
++}
++EXPORT_SYMBOL(pcie_aspm_support_enabled);
+--- a/include/linux/pci.h
++++ b/include/linux/pci.h
+@@ -1002,12 +1002,11 @@ extern bool pcie_ports_auto;
+ #endif
+
+ #ifndef CONFIG_PCIEASPM
+-static inline int pcie_aspm_enabled(void)
+-{
+- return 0;
+-}
++static inline int pcie_aspm_enabled(void) { return 0; }
++static inline bool pcie_aspm_support_enabled(void) { return false; }
+ #else
+ extern int pcie_aspm_enabled(void);
++extern bool pcie_aspm_support_enabled(void);
+ #endif
+
+ #ifdef CONFIG_PCIEAER
--- /dev/null
+From 880f57318450dbead6a03f9e31a1468924d6dd88 Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <fweisbec@gmail.com>
+Date: Wed, 23 Mar 2011 19:29:39 +0100
+Subject: perf: Better fit max unprivileged mlock pages for tools needs
+
+From: Frederic Weisbecker <fweisbec@gmail.com>
+
+commit 880f57318450dbead6a03f9e31a1468924d6dd88 upstream.
+
+The maximum kilobytes of locked memory that an unprivileged user
+can reserve is of 512 kB = 128 pages by default, scaled to the
+number of onlined CPUs, which fits well with the tools that use
+128 data pages by default.
+
+However tools actually use 129 pages, because they need one more
+for the user control page. Thus the default mlock threshold is
+not sufficient for the default tools needs and we always end up
+to evaluate the constant mlock rlimit policy, which doesn't have
+this scaling with the number of online CPUs.
+
+Hence, on systems that have more than 16 CPUs, we overlap the
+rlimit threshold and fail to mmap:
+
+ $ perf record ls
+ Error: failed to mmap with 1 (Operation not permitted)
+
+Just increase the max unprivileged mlock threshold by one page
+so that it supports well perf tools even after 16 CPUs.
+
+Reported-by: Han Pingtian <phan@redhat.com>
+Reported-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
+Reported-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
+Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Cc: Stephane Eranian <eranian@google.com>
+LKML-Reference: <1300904979-5508-1-git-send-email-fweisbec@gmail.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/perf_event.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/kernel/perf_event.c
++++ b/kernel/perf_event.c
+@@ -62,7 +62,8 @@ static struct srcu_struct pmus_srcu;
+ */
+ int sysctl_perf_event_paranoid __read_mostly = 1;
+
+-int sysctl_perf_event_mlock __read_mostly = 512; /* 'free' kb per user */
++/* Minimum for 128 pages + 1 for the user control page */
++int sysctl_perf_event_mlock __read_mostly = 516; /* 'free' kb per user */
+
+ /*
+ * max perf event sample rate
--- /dev/null
+alsa-hda-new-ad1984a-model-for-dell-precision-r5500.patch
+alsa-hda-fix-spdif-out-regression-on-alc889.patch
+alsa-fix-yet-another-race-in-disconnection.patch
+alsa-vmalloc-buffers-should-use-normal-mmap.patch
+perf-better-fit-max-unprivileged-mlock-pages-for-tools-needs.patch
+myri10ge-fix-rmmod-crash.patch
+cciss-add-missing-allocation-in-scsi_cmd_stack_setup-and-corresponding-deallocation.patch
+cciss-fix-lost-command-issue.patch
+ath9k-fix-kernel-panic-in-ar2427.patch
+sound-oss-opl3-validate-voice-and-channel-indexes.patch
+mac80211-initialize-sta-last_rx-in-sta_info_alloc.patch
+ses-show-devices-for-enclosures-with-no-page-7.patch
+ses-avoid-kernel-panic-when-lun-0-is-not-mapped.patch
+pci-acpi-report-aspm-support-to-bios-if-not-disabled-from-command-line.patch
--- /dev/null
+From d1e12de804f9d8ad114786ca7c2ce593cba79891 Mon Sep 17 00:00:00 2001
+From: Krishnasamy, Somasundaram <Somasundaram.Krishnasamy@lsi.com>
+Date: Mon, 28 Feb 2011 18:13:22 -0500
+Subject: [SCSI] ses: Avoid kernel panic when lun 0 is not mapped
+
+From: Krishnasamy, Somasundaram <Somasundaram.Krishnasamy@lsi.com>
+
+commit d1e12de804f9d8ad114786ca7c2ce593cba79891 upstream.
+
+During device discovery, scsi mid layer sends INQUIRY command to LUN
+0. If the LUN 0 is not mapped to host, it creates a temporary
+scsi_device with LUN id 0 and sends REPORT_LUNS command to it. After
+the REPORT_LUNS succeeds, it walks through the LUN table and adds each
+LUN found to sysfs. At the end of REPORT_LUNS lun table scan, it will
+delete the temporary scsi_device of LUN 0.
+
+When scsi devices are added to sysfs, it calls add_dev function of all
+the registered class interfaces. If ses driver has been registered,
+ses_intf_add() of ses module will be called. This function calls
+scsi_device_enclosure() to check the inquiry data for EncServ
+bit. Since inquiry was not allocated for temporary LUN 0 scsi_device,
+it will cause NULL pointer exception.
+
+To fix the problem, sdev->inquiry is checked for NULL before reading it.
+
+Signed-off-by: Somasundaram Krishnasamy <Somasundaram.Krishnasamy@lsi.com>
+Signed-off-by: Babu Moger <babu.moger@lsi.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/scsi/scsi_device.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/scsi/scsi_device.h
++++ b/include/scsi/scsi_device.h
+@@ -461,7 +461,7 @@ static inline int scsi_device_qas(struct
+ }
+ static inline int scsi_device_enclosure(struct scsi_device *sdev)
+ {
+- return sdev->inquiry[6] & (1<<6);
++ return sdev->inquiry ? (sdev->inquiry[6] & (1<<6)) : 1;
+ }
+
+ static inline int scsi_device_protection(struct scsi_device *sdev)
--- /dev/null
+From 877a55979c189c590e819a61cbbe2b7947875f17 Mon Sep 17 00:00:00 2001
+From: John Hughes <john@Calva.COM>
+Date: Wed, 4 Nov 2009 19:01:22 +0100
+Subject: [SCSI] ses: show devices for enclosures with no page 7
+
+From: John Hughes <john@Calva.COM>
+
+commit 877a55979c189c590e819a61cbbe2b7947875f17 upstream.
+
+enclosure page 7 gives us the "pretty" names of the enclosure slots.
+Without a page 7, we can still use the enclosure code as long as we
+make up numeric names for the slots. Unfortunately, the current code
+fails to add any devices because the check for page 10 is in the wrong
+place if we have no page 7. Fix it so that devices show up even if
+the enclosure has no page 7.
+
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/scsi/ses.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/ses.c
++++ b/drivers/scsi/ses.c
+@@ -390,9 +390,9 @@ static void ses_enclosure_data_process(s
+ len = (desc_ptr[2] << 8) + desc_ptr[3];
+ /* skip past overall descriptor */
+ desc_ptr += len + 4;
+- if (ses_dev->page10)
+- addl_desc_ptr = ses_dev->page10 + 8;
+ }
++ if (ses_dev->page10)
++ addl_desc_ptr = ses_dev->page10 + 8;
+ type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11];
+ components = 0;
+ for (i = 0; i < types; i++, type_ptr += 4) {
--- /dev/null
+From 4d00135a680727f6c3be78f8befaac009030e4df Mon Sep 17 00:00:00 2001
+From: Dan Rosenberg <drosenberg@vsecurity.com>
+Date: Wed, 23 Mar 2011 11:42:57 -0400
+Subject: sound/oss/opl3: validate voice and channel indexes
+
+From: Dan Rosenberg <drosenberg@vsecurity.com>
+
+commit 4d00135a680727f6c3be78f8befaac009030e4df upstream.
+
+User-controllable indexes for voice and channel values may cause reading
+and writing beyond the bounds of their respective arrays, leading to
+potentially exploitable memory corruption. Validate these indexes.
+
+Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/oss/opl3.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/sound/oss/opl3.c
++++ b/sound/oss/opl3.c
+@@ -849,6 +849,10 @@ static int opl3_load_patch(int dev, int
+
+ static void opl3_panning(int dev, int voice, int value)
+ {
++
++ if (voice < 0 || voice >= devc->nr_voice)
++ return;
++
+ devc->voc[voice].panning = value;
+ }
+
+@@ -1066,8 +1070,15 @@ static int opl3_alloc_voice(int dev, int
+
+ static void opl3_setup_voice(int dev, int voice, int chn)
+ {
+- struct channel_info *info =
+- &synth_devs[dev]->chn_info[chn];
++ struct channel_info *info;
++
++ if (voice < 0 || voice >= devc->nr_voice)
++ return;
++
++ if (chn < 0 || chn > 15)
++ return;
++
++ info = &synth_devs[dev]->chn_info[chn];
+
+ opl3_set_instr(dev, voice, info->pgm_num);
+