All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Cen Zhang <zzzccc427@gmail.com>
Cc: perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org,
	linux-kernel@vger.kernel.org, baijiaju1990@gmail.com,
	jjzuming@gmail.com
Subject: Re: [PATCH] ALSA: aloop: Keep shared timer callbacks alive through close
Date: Mon, 19 Oct 2026 20:05:50 +0200	[thread overview]
Message-ID: <87v76xin0h.wl-tiwai@suse.de> (raw)
In-Reply-To: <pm-pmb-275c4399f517e09d7188-v2-2f64c1328529ef7a8fec@gmail.com>

On Mon, 19 Oct 2026 11:05:21 +0200,
Cen Zhang wrote:
> 
> The shared sound-timer callback must finish using the selected PCM
> runtimes before a close can detach them. loopback_snd_timer_period_elapsed()
> saves the active substreams under cable->lock, then drops the lock before
> calling snd_pcm_period_elapsed() or snd_pcm_stop_xrun(). The sound-timer
> backend has no per-stream close drain, and free_cable() keeps the timer
> open when the paired endpoint remains attached.
> 
> With both directions running on a shared sound timer, playback can be
> dropped and closed while a notification is pending. Capture keeps the
> timer alive, allowing this order:
> 
>   Timer callback                       Playback owner
>   --------------                       --------------
>   select playback under cable->lock
>   unlock; delay notification
>                                        DROP; HW_FREE -> OPEN
>                                        close: snd_pcm_drop(); unlock
>                                        free_cable(); peer stays alive
>   snd_pcm_period_elapsed()
>     lock stream; cache runtime
>                                        snd_pcm_detach_substream()
>                                          free runtime and its fasync
>     read runtime->fasync
> 
> The stream lock taken by snd_pcm_drop() cannot protect a notification
> that starts after it returns, and detach does not take it. The callback
> can therefore read runtime->fasync after the runtime has been freed, and
> an escaped notification can also reach a replacement runtime if the same
> substream slot is reopened before the notification resumes.
> 
> Take the existing cable->stop_count reference under cable->lock when
> selecting the targets and release it after the PCM callbacks finish,
> including the XRUN path. free_cable() already removes the closing
> endpoint under that lock and waits for stop_count before returning, so
> runtime detach and slot reuse cannot overtake the notification.
> 
> Fixes: 26c53379f98d ("ALSA: aloop: Support selection of snd_timer instead of jiffies")
> Signed-off-by: Cen Zhang <zzzccc427@gmail.com>
> Assisted-by: LLM

Applied now.  Thanks.


Takashi

      reply	other threads:[~2026-10-19 18:05 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-19  9:05 [PATCH] ALSA: aloop: Keep shared timer callbacks alive through close Cen Zhang
2026-10-19 18:05 ` Takashi Iwai [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87v76xin0h.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=baijiaju1990@gmail.com \
    --cc=jjzuming@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=perex@perex.cz \
    --cc=tiwai@suse.com \
    --cc=zzzccc427@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.