Re: [PATCH v3] ALSA: pcm: Drain proc callbacks at device disconnect

From: Takashi Iwai

Date: Fri Oct 23 2026 - 09:43:47 EST


On Thu, 22 Oct 2026 12:58:20 +0200,
Cen Zhang wrote:
>
> Disconnecting an individual PCM leaves its proc files accessible until
> snd_pcm_free_stream(). HDA codec-only sysfs unbind can take this path
> while the controller and card remain registered. An open proc file pins
> the card module, but does not hold a codec PCM reference.
>
> With CONFIG_SND_VERBOSE_PROCFS, a prealloc write is buffered until file
> release. Without an attached PCM runtime, its release can replace the
> DMA buffer after final PCM cleanup has already freed the preallocation:
>
> HDA codec unbind prealloc file release
> ---------------- ---------------------
> hda_codec_driver_remove()
> snd_hda_codec_disconnect_pcms()
> snd_device_disconnect()
> snd_pcm_dev_disconnect()
> /* proc nodes remain */
> snd_hda_codec_cleanup_for_unbind()
> codec_release_pcms()
> snd_device_free()
> snd_pcm_free()
> free preallocated buffer
> snd_info_text_entry_release()
> snd_pcm_lib_preallocate_proc_write()
> replace DMA buffer
> remove stream proc nodes
> free substream
>
> The later proc rundown can itself invoke this buffered write and leave
> the replacement allocation without a final free. A concurrent release
> can also overlap the earlier buffer cleanup.
>
> Extract snd_info_disconnect_entry() from snd_info_free_entry() to remove
> proc nodes and drain callbacks without freeing the info entry objects.
> Use it for both stream directions at PCM disconnect. Finish the existing
> PCM state and device disconnection under open_mutex, then drop that lock
> before proc rundown: even an otherwise idle proc file can run its
> buffered release callback, which takes open_mutex, during proc_remove().
>
> Keep entry ownership and final cleanup unchanged, including the saved
> OSS child entries. As with existing info entry teardown, callers must
> serialize registration with disconnection and release.
>
> Suggested-by: Takashi Iwai <tiwai@xxxxxxx>
> Assisted-by: LLM
> Signed-off-by: Cen Zhang <zzzccc427@xxxxxxxxx>

Applied now. Although we still may have some issues about the
concurrent codec release and probe, this should be treated better in
the upper layer.


thanks,

Takashi