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)
committerTakashi Iwai <tiwai@suse.de>
Mon, 2 Jun 2025 14:48:55 +0000 (16:48 +0200)
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>
sound/pci/hda/hda_bind.c

index 1fef350d821ef07865b7e4f2dedc0f575cbf6acb..df8f88beddd0738b108be129b2a136141b3eae6b 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 */