android_kernel_samsung_sm8650/sound/pci
Takashi Iwai 222bde0388 ALSA: hda - Fix mutex deadlock at HDMI/DP hotplug
The recent change in HD-audio HDMI/DP codec driver for allowing the
dynamic PCM binding introduced a new spec->pcm_mutex.  One of the
protected area by this mutex is hdmi_present_sense().  As reported by
Intel CI tests, unfortunately, the new mutex causes a deadlock when
the hotplug/unplug is triggered during the codec is in runtime
suspend.  The buggy code path is like the following:

  hdmi_unsol_event() -> ...
    -> hdmi_present_sense()
==>     ** here taking pcm_mutex
      -> hdmi_present_sense_via_verbs()
        -> snd_hda_power_up_pm() -> ... (runtime resume calls)
          -> generic_hdmi_resume()
            -> hdmi_present_sense()
==>           ** here taking pcm_mutex again!

As we can see here, the problem is that the mutex is taken before
snd_hda_power_up_pm() call that triggers the runtime resume.  That is,
the obvious solution is to move the power up/down call outside the
mutex; it is exactly what this patch provides.

The patch also clarifies why this bug wasn't caught beforehand.  We
used to have the i915 audio component for hotplug for all Intel chips,
and in that code path, there is no power up required but the
information is taken directly from the graphics side.  However, we
recently switched back to the old method for some old Intel chips due
to regressions, and now the deadlock issue is surfaced.

Fixes: a76056f2e5 ('ALSA: hda - hdmi dynamically bind PCM to pin when monitor hotplug')
Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Tested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-03-17 15:38:35 +01:00
..
ac97
ali5451
asihpi
au88x0
aw2
ca0106
cs46xx
cs5535audio
ctxfi
echoaudio
emu10k1 ALSA: emu10k1: correctly handling failed thread creation 2016-01-29 17:30:25 +01:00
hda ALSA: hda - Fix mutex deadlock at HDMI/DP hotplug 2016-03-17 15:38:35 +01:00
ice1712
korg1212
lola
lx6464es
mixart ALSA: mixart: silence an uninitialized variable warning 2016-03-16 16:35:16 +01:00
nm256
oxygen
pcxhr
riptide
rme9652 ALSA: hdsp: Fix wrong boolean ctl value accesses 2016-02-29 18:13:34 +01:00
trident
vx222
ymfpci
ad1889.c
ad1889.h
ak4531_codec.c
als300.c
als4000.c
atiixp_modem.c
atiixp.c
azt3328.c
azt3328.h
bt87x.c
cmipci.c
cs4281.c
cs5530.c
ens1370.c
ens1371.c
es1938.c
es1968.c
fm801.c sound updates for 4.5-rc1 2016-01-17 12:05:31 -08:00
intel8x0.c ALSA: intel8x0: Add clock quirk entry for AD1981B on IBM ThinkPad X41. 2016-03-14 08:24:25 +01:00
intel8x0m.c
Kconfig ALSA: jack: Allow building the jack layer without input device 2016-02-23 09:03:07 +01:00
maestro3.c
Makefile
rme32.c
rme96.c
sis7019.c
sis7019.h
sonicvibes.c
via82xx_modem.c
via82xx.c