linux/sound
Dylan Reid d17344b354 ALSA: hda - Fix hang caused by race during suspend.
There was a race condition when the system suspends while hda_power_work
is running in the work queue.  If system suspend (snd_hda_suspend)
happens after the work queue releases power_lock but before it calls
hda_call_codec_suspend,  codec_suspend runs with power_on=0, causing the
codec to power up for register reads, and hanging when it calls
cancel_delayed_work_sync from the running work queue.

The call chain from the work queue will look like this:
hda_power_work <<- power_on = 1, unlock, then power_on cleard by suspend
  hda_call_codec_suspend
    hda_set_power_state
      snd_hda_codec_read
        codec_exec_verb
          snd_hda_power_up
	    snd_hda_power_save
	      __snd_hda_power_up
	        cancel_delayed_work_sync <<-- cancelling executing wq

Fix this by waiting for the work queue to finish before starting suspend
if suspend is not happening on the work queue.

Signed-off-by: Dylan Reid <dgreid@chromium.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2012-10-06 16:49:30 +02:00
..
aoa sound/aoa: Adapt to new i2c probing scheme 2012-07-11 18:22:48 +10:00
arm ALSA: platform: Check CONFIG_PM_SLEEP instead of CONFIG_PM 2012-08-09 15:47:15 +02:00
atmel ALSA: sound/atmel/ac97c.c: fix error return code 2012-08-20 10:56:01 +02:00
core ALSA: Make snd_sgbuf_get_{ptr|addr}() available for non-SG cases 2012-09-23 11:24:42 +02:00
drivers sound: Remove unnecessary semicolon 2012-10-06 16:47:53 +02:00
firewire IEEE 1394 (FireWire) subsystem updates post v3.4: 2012-05-24 12:57:47 -07:00
i2c [media] snd_tea575x: Add a cannot_mute flag 2012-07-30 17:57:01 -03:00
isa sound: Remove unnecessary semicolon 2012-10-06 16:47:53 +02:00
mips
oss sound: Remove unnecessary semicolon 2012-10-06 16:47:53 +02:00
parisc
pci ALSA: hda - Fix hang caused by race during suspend. 2012-10-06 16:49:30 +02:00
pcmcia ALSA: pdaudiocf: Remove superfluous pm_message_t argument from suspend 2012-07-03 08:23:08 +02:00
ppc ALSA: sound/ppc/snd_ps3.c: fix error return code 2012-08-20 11:01:14 +02:00
sh ALSA: Add missing .owner=THIS_MODULE to platform_driver definitions 2012-07-02 17:50:05 +02:00
soc ASoC: Additional updates for v3.7 2012-10-06 16:33:52 +02:00
sparc sound: Remove unnecessary semicolon 2012-10-06 16:47:53 +02:00
spi
synth
usb ALSA: usb - disable broken hw volume for Tenx TP6911 2012-09-20 10:48:47 +02:00
Kconfig
Makefile
ac97_bus.c
last.c ALSA: Remove the last mention of SNDRV_MAIN_OBJECT_FILE 2012-09-03 10:07:23 +02:00
sound_core.c sound: allow the unit search until 256 in sound_core.c 2012-05-08 17:27:03 +02:00
sound_firmware.c sound_firmware: don't pass crap to filp_close() 2012-07-29 21:24:22 +04:00