From: sashiko-bot@kernel.org
To: "Joonho Lee" <mynameisjune111@gmail.com>, linux-sound@vger.kernel.org
Cc: virtualization@lists.linux.dev,
"Michael S. Tsirkin" <mst@redhat.com>,
"Eugenio Perez" <eperezma@redhat.com>
Subject: Re: [PATCH v7 11/16] ALSA: virtio-snd: fix dsnoop capture with staged buffers
Date: Wed, 28 Oct 2026 10:20:51 +0000 [thread overview]
Message-ID: <sashiko-outbox-187742@kernel.org> (raw)
In-Reply-To: <20261028094132.20364-12-mynameisjune111@gmail.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] ALSA: virtio-snd: incomplete XRUN handling in virtsnd_pcm_trigger()
--
commit aaa1fb5901e460bfc006edef14710cb64e262e44
Author: Joonho Lee <mynameisjune111@gmail.com>
ALSA: virtio-snd: fix dsnoop capture with staged buffers
This commit adds free-running staged capture policy support when
stop_threshold equals the prepared boundary so dsnoop capture streams do not
fail capacity checks. It also reconstructs unread occupancy when returning to
bounded capture and handles XRUN state transitions across paused streams.
> diff --git a/sound/virtio/virtio_pcm_ops.c b/sound/virtio/virtio_pcm_ops.c
> index d50924b792f65..cbf4e479d295f 100644
> --- a/sound/virtio/virtio_pcm_ops.c
> +++ b/sound/virtio/virtio_pcm_ops.c
[ ... ]
> @@ -893,6 +905,13 @@ static int virtsnd_pcm_trigger(struct snd_pcm_substream *substream, int command)
> if (rc) {
> vss->stopped = true;
> substream->runtime->stop_operating = true;
> + if (vss->capture_staging &&
> + vss->direction == SNDRV_PCM_STREAM_CAPTURE &&
> + command == SNDRV_PCM_TRIGGER_PAUSE_RELEASE) {
> + /* Pause undo leaves ALSA paused; wake its readers. */
> + vss->xfer_xrun = true;
> + virtsnd_pcm_schedule_period_elapsed(vss);
> + }
> return rc;
> }
> vss->xfer_enabled = true;
[Severity: Medium]
What happens in virtsnd_pcm_trigger() if a staged capture stream using native
pause (with virtsnd_capture_pause_restart disabled) hits another failure or
prior XRUN during SNDRV_PCM_TRIGGER_PAUSE_RELEASE?
Unlike virtsnd_pcm_pause_restart_start(), the native trigger path in
virtsnd_pcm_trigger() does not check vss->xfer_xrun under vss->lock before
queueing requests:
sound/virtio/virtio_pcm_ops.c:virtsnd_pcm_trigger() {
case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
queue = virtsnd_pcm_queue(vss);
scoped_guard(spinlock_irqsave, &queue->lock) {
guard(spinlock)(&vss->lock);
if (vss->stopped) {
substream->runtime->stop_operating = true;
return -EBADFD;
}
if (vss->direction == SNDRV_PCM_STREAM_CAPTURE) {
if (vss->capture_staging) {
if (!vss->runtime_active)
rc = -EBADFD;
else
rc = virtsnd_pcm_capture_send(vss);
If vss->xfer_xrun was already latched before SNDRV_PCM_TRIGGER_PAUSE_PUSH
while virtsnd_pcm_period_elapsed() was waiting on the PCM stream lock, won't
SNDRV_PCM_TRIGGER_PAUSE_RELEASE succeed, set vss->xfer_enabled = true, and
send VIRTIO_SND_R_PCM_START on a stream that is already in XRUN (causing
subsequent completions in virtsnd_pcm_capture_complete() to be dropped)?
Additionally, if virtsnd_pcm_capture_send() succeeds during
SNDRV_PCM_TRIGGER_PAUSE_RELEASE, but virtsnd_pcm_ctl_msg_alloc() or
virtsnd_ctl_msg_send_sync() fails afterwards, virtsnd_pcm_trigger() calls
virtsnd_pcm_start_failed(vss, false):
sound/virtio/virtio_pcm_ops.c:virtsnd_pcm_start_failed() {
scoped_guard(spinlock_irqsave, &vss->lock) {
vss->xfer_enabled = false;
vss->stopped = true;
if (pause_restart)
vss->xfer_xrun = true;
}
vss->substream->runtime->stop_operating = true;
}
Because pause_restart is false here (and the early vss->stopped check also
returns -EBADFD directly), neither path sets vss->xfer_xrun = true or calls
virtsnd_pcm_schedule_period_elapsed(vss). When ALSA undoes the failed pause
release and leaves runtime->state in SNDRV_PCM_STATE_PAUSED with
vss->stopped == true, could readers blocked in wait_for_avail() or
snd_pcm_poll() be left sleeping without virtsnd_pcm_period_elapsed() ever
moving the stream to SNDRV_PCM_STATE_XRUN?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261028094132.20364-1-mynameisjune111@gmail.com?part=11
next prev parent reply other threads:[~2026-10-28 10:20 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 9:41 [PATCH v7 00/16] ALSA: virtio: staged capture and dsnoop recovery Joonho Lee
2026-10-28 9:41 ` [PATCH v7 01/16] ALSA: virtio: Propagate PCM send failures through ACK Joonho Lee
2026-10-28 10:07 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 02/16] ALSA: virtio: Recover PCM state after a failed start Joonho Lee
2026-10-28 10:18 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 03/16] ALSA: virtio: Retain queued messages through device reset Joonho Lee
2026-10-28 10:15 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 04/16] ALSA: virtio: Keep PCM DMA buffers alive through device ownership Joonho Lee
2026-10-28 10:12 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 05/16] ALSA: virtio: Keep control payloads alive through DMA completion Joonho Lee
2026-10-28 9:54 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 06/16] ALSA: virtio: wait through signals for PCM teardown Joonho Lee
2026-10-28 10:07 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 07/16] ALSA: virtio: stage VZ capture and restart paused streams Joonho Lee
2026-10-28 10:14 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 08/16] ALSA: virtio: account staged capture reads before RX refill Joonho Lee
2026-10-28 9:54 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 09/16] ALSA: virtio: prioritize staged capture period work Joonho Lee
2026-10-28 10:04 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 10/16] ALSA: pcm: mark stop-threshold accesses for capture policy sampling Joonho Lee
2026-10-28 9:47 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 11/16] ALSA: virtio-snd: fix dsnoop capture with staged buffers Joonho Lee
2026-10-28 10:20 ` sashiko-bot [this message]
2026-10-28 9:41 ` [PATCH v7 12/16] ALSA: virtio: complete control transitions and preserve drain tail Joonho Lee
2026-10-28 9:57 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 13/16] ALSA: virtio: fence staged capture state and recovery Joonho Lee
2026-10-28 10:09 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 14/16] docs: describe virtio-sound capture options Joonho Lee
2026-10-28 9:51 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 15/16] ALSA: pcm: synchronize stopped paused streams Joonho Lee
2026-10-28 10:21 ` sashiko-bot
2026-10-28 9:41 ` [PATCH v7 16/16] ALSA: virtio: serialize capture lifecycle and reset state Joonho Lee
2026-10-28 10:26 ` sashiko-bot
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=sashiko-outbox-187742@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=eperezma@redhat.com \
--cc=linux-sound@vger.kernel.org \
--cc=mst@redhat.com \
--cc=mynameisjune111@gmail.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=virtualization@lists.linux.dev \
/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.