]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ALSA: hda: Ignore unsol events for cards being shut down
authorCezary Rojewski <cezary.rojewski@intel.com>
Fri, 30 May 2025 14:13:09 +0000 (16:13 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Jul 2025 16:27:37 +0000 (18:27 +0200)
[ Upstream commit 3f100f524e75586537e337b34d18c8d604b398e7 ]

For the classic snd_hda_intel driver, codec->card and bus->card point to
the exact same thing. When snd_card_diconnect() fires, bus->shutdown is
set thanks to azx_dev_disconnect(). card->shutdown is already set when
that happens but both provide basically the same functionality.

For the DSP snd_soc_avs driver where multiple codecs are located on
multiple cards, bus->shutdown 'shortcut' is not sufficient. One codec
card may be unregistered while other codecs are still operational.
Proper check in form of card->shutdown must be used to verify whether
the codec's card is being shut down.

Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://patch.msgid.link/20250530141309.2943404-1-cezary.rojewski@intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/pci/hda/hda_bind.c

index 0a83afa5f373c96d36c1d4359dbe12edd5a55412..6625643f333e8d839c4cc9ac19d51cabd08f8fa0 100644 (file)
@@ -44,7 +44,7 @@ static void hda_codec_unsol_event(struct hdac_device *dev, unsigned int ev)
        struct hda_codec *codec = container_of(dev, struct hda_codec, core);
 
        /* ignore unsol events during shutdown */
-       if (codec->bus->shutdown)
+       if (codec->card->shutdown || codec->bus->shutdown)
                return;
 
        /* ignore unsol events during system suspend/resume */