On Thu, 30 May 2019 23:00:10 +0200, Pierre-Louis Bossart wrote: > > > > On 5/30/19 3:18 PM, Ranjani Sridharan wrote: > > Calling snd_device_new() makes the codec devices managed by the card. > > So, when the card is removed, the refcount for the codec > > device is decremented and results in the codec device's kobject > > being cleaned up if the refcount is 0. But, this leads to a NULL > > pointer exception while attempting to remove the symlinks when the > > codec driver is released later on. Therefore, increment the codec > > device's refcount before adding it to the card to prevent this. > > Ranjani, you should add a bit of context for the rest of the list... > > This patch suggest a solution to a set of sightings occurring when > removing/adding modules in a loop, and the current analysis points to > a difference between the way the HDMI and HDaudio codecs are handled. > > https://github.com/thesofproject/linux/issues/981 > https://github.com/thesofproject/linux/issues/966 > https://github.com/thesofproject/linux/pull/988 > > Since it's not SOF specific it's better to get feedback directly from > the large ALSA community/maintainers. We probably want to focus on the > platform-specific/vendor-specific stuff on GitHub and use the mailing > list for such framework-level changes. Hm, I still wonder why this doens't happen with the HDA legacy. What is the shortest way to trigger the bug manually without a script? thanks, Takashi > > Signed-off-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx> > > --- > > sound/pci/hda/hda_codec.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c > > index b20eb7fc83eb..0d5d95b07e19 100644 > > --- a/sound/pci/hda/hda_codec.c > > +++ b/sound/pci/hda/hda_codec.c > > @@ -985,6 +985,14 @@ int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card, > > codec->core.subsystem_id, codec->core.revision_id); > > snd_component_add(card, component); > > + /* > > + * snd_device_new() makes the codec device managed by the card. > > + * When the card is removed, the device reference count is > > + * decremented. Therefore, increment it here to prevent removing > > + * the codec device's kobject when the card is removed. > > + */ > > + get_device(hda_codec_dev(codec)); > > + > > err = snd_device_new(card, SNDRV_DEV_CODEC, codec, &dev_ops); > > if (err < 0) > > goto error; > > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel