• Takashi Iwai's avatar
    ALSA: hda - Fix cancel_work_sync() stall from jackpoll work · 16037643
    Takashi Iwai authored
    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: default avatarTakashi Iwai <tiwai@suse.de>
    16037643
hda_codec.c 107 KB