]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
ALSA: hda - Fix cancel_work_sync() stall from jackpoll work
authorTakashi Iwai <tiwai@suse.de>
Thu, 30 Aug 2018 13:13:16 +0000 (15:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Sep 2018 20:41:23 +0000 (22:41 +0200)
commita4db12abb871762dc0cd785f68af789e732ebcac
tree75e95e833a8063c9e9f7c05214d803b45edc71dc
parentce987db2b52fd8ce551bb728f0a865dedff6fc83
ALSA: hda - Fix cancel_work_sync() stall from jackpoll work

commit 16037643969e095509cd8446a3f8e406a6dc3a2c upstream.

On AMD/ATI controllers, the HD-audio controller driver allows a bus
reset upon the error recovery, and its procedure includes the
cancellation of pending jack polling work as found in
snd_hda_bus_codec_reset().  This works usually fine, but it becomes a
problem when the reset happens from the jack poll work itself; then
calling cancel_work_sync() from the work being processed tries to wait
the finish endlessly.

As a workaround, this patch adds the check of current_work() and
applies the cancel_work_sync() only when it's not from the
jackpoll_work.

This doesn't fix the root cause of the reported error below, but at
least, it eases the unexpected stall of the whole system.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=200937
Cc: <stable@vger.kernel.org>
Cc: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/pci/hda/hda_codec.c