Patch "ALSA: hda: Fix hang during shutdown due to link reset" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ALSA: hda: Fix hang during shutdown due to link reset

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     alsa-hda-fix-hang-during-shutdown-due-to-link-reset.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cbc9bfc7cade9012522fe793b1cfe5db12379c08
Author: Imre Deak <imre.deak@xxxxxxxxx>
Date:   Mon Aug 16 20:42:59 2021 +0300

    ALSA: hda: Fix hang during shutdown due to link reset
    
    [ Upstream commit 0165c4e19f6ec76b535de090e4bd145c73810c51 ]
    
    During system shutdown codecs may be still active, and resetting the
    controller->codec HW link in this state - based on the bug reporter's
    tests - leads to the shutdown sequence to get stuck. This happens at
    least on the reporter's KBL system with an ALC662 codec.
    
    For now fix the issue by skipping the link reset step.
    
    Fixes: 472e18f63c42 ("ALSA: hda: Release controller display power during shutdown/reboot")
    References: https://bugzilla.kernel.org/show_bug.cgi?id=214045
    References: https://gitlab.freedesktop.org/drm/intel/-/issues/3618#note_1024665
    Reported-and-tested-by: youling257@xxxxxxxxx
    Cc: youling257@xxxxxxxxx
    Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20210816174259.2759103-1-imre.deak@xxxxxxxxx
    Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index e31eafe73661f..a0955e17adee9 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -936,10 +936,11 @@ static unsigned int azx_get_pos_skl(struct azx *chip, struct azx_dev *azx_dev)
 	return azx_get_pos_posbuf(chip, azx_dev);
 }
 
-static void azx_shutdown_chip(struct azx *chip)
+static void __azx_shutdown_chip(struct azx *chip, bool skip_link_reset)
 {
 	azx_stop_chip(chip);
-	azx_enter_link_reset(chip);
+	if (!skip_link_reset)
+		azx_enter_link_reset(chip);
 	azx_clear_irq_pending(chip);
 	display_power(chip, false);
 }
@@ -948,6 +949,11 @@ static void azx_shutdown_chip(struct azx *chip)
 static DEFINE_MUTEX(card_list_lock);
 static LIST_HEAD(card_list);
 
+static void azx_shutdown_chip(struct azx *chip)
+{
+	__azx_shutdown_chip(chip, false);
+}
+
 static void azx_add_card_list(struct azx *chip)
 {
 	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
@@ -2461,7 +2467,7 @@ static void azx_shutdown(struct pci_dev *pci)
 		return;
 	chip = card->private_data;
 	if (chip && chip->running)
-		azx_shutdown_chip(chip);
+		__azx_shutdown_chip(chip, true);
 }
 
 /* PCI IDs */



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux