linux/sound/hda
Takashi Iwai fc4f000bf8 ALSA: hda - Fix unexpected resume through regmap code path
HD-audio driver has a mechanism to trigger the runtime resume
automatically at accessing the verbs.  This auto-resume, however,
causes the mutex deadlock when invoked from the regmap handler since
the regmap keeps the mutex while auto-resuming.  For avoiding that,
there is some tricky check in the HDA regmap handler to return -EAGAIN
error to back-off when the codec is powered down.  Then the caller of
regmap r/w will retry after properly turning on the codec power.

This works in most cases, but there seems a slight race between the
codec power check and the actual on-demand auto-resume trigger.  This
resulted in the lockdep splat, eventually leading to a real deadlock.

This patch tries to address the race window by getting the runtime PM
refcount at the check time using pm_runtime_get_if_in_use().  With
this call, we can keep the power on only when the codec has been
already turned on, and back off if not.

For keeping the code consistency, the code touching the runtime PM is
stored in hdac_device.c although it's used only locally in
hdac_regmap.c.

Reported-by: Jiri Slaby <jslaby@suse.cz>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-08 10:49:02 +01:00
..
ext ALSA: hdac: add snd_hdac_ext_bus_link_power_up_all 2016-01-10 12:02:47 +00:00
array.c ALSA: hda - Move generic array helpers to core lib 2015-03-23 13:19:35 +01:00
hda_bus_type.c ALSA: hda - Advertise MODALIAS in uevent 2015-10-20 10:15:53 +02:00
hdac_bus.c ALSA: hda - Add / fix kernel doc comments 2015-10-28 12:37:29 +01:00
hdac_controller.c ALSA: hda - Loop interrupt handling until really cleared 2016-02-26 08:50:31 +01:00
hdac_device.c ALSA: hda - Fix unexpected resume through regmap code path 2016-03-08 10:49:02 +01:00
hdac_i915.c ALSA: hda - Degrade i915 binding failure message 2016-01-20 15:00:26 +01:00
hdac_regmap.c ALSA: hda - Fix unexpected resume through regmap code path 2016-03-08 10:49:02 +01:00
hdac_stream.c ALSA: hda - Add / fix kernel doc comments 2015-10-28 12:37:29 +01:00
hdac_sysfs.c ALSA: hda - Add hdaudio bus modalias support 2015-10-20 10:15:09 +02:00
Kconfig ALSA: HDAC: move SND_HDA_PREALLOC_SIZE to core 2015-06-16 17:40:38 +02:00
local.h ALSA: hda - Add widget sysfs tree 2015-03-23 13:17:27 +01:00
Makefile ALSA: hdac_ext: add extended HDA bus 2015-06-11 11:57:54 +02:00
trace.c ALSA: hda - Re-add tracepoints to HD-audio core driver 2015-03-23 13:17:58 +01:00
trace.h ALSA: hda - add hdac stream trace 2015-05-18 10:06:20 +02:00