From: Joonho Lee <mynameisjune111@gmail.com>
To: linux-sound@vger.kernel.org
Cc: tiwai@suse.com, perex@perex.cz, anton.yakovlev@opensynergy.com,
mst@redhat.com, virtualization@lists.linux.dev,
linux-kernel@vger.kernel.org, corbet@lwn.net,
skhan@linuxfoundation.org, rdunlap@infradead.org,
linux-doc@vger.kernel.org, Joonho Lee <mynameisjune111@gmail.com>
Subject: [PATCH v18 09/12] ALSA: virtio: wait through signals for PCM teardown
Date: Fri, 6 Nov 2026 09:06:41 +0900 [thread overview]
Message-ID: <20261106000644.20460-10-mynameisjune111@gmail.com> (raw)
In-Reply-To: <20261106000644.20460-1-mynameisjune111@gmail.com>
A signal can end the interruptible wait while a STOP or RELEASE request
is still pending. A later teardown may then submit another RELEASE
before the first request completes.
Keep both waits non-interruptible and use the existing message timeout.
Other control requests remain interruptible. Device reset still cancels
the pending request and wakes the waiter.
Keep timeout and wait results in the types returned by the kernel wait APIs.
Signed-off-by: Joonho Lee <mynameisjune111@gmail.com>
---
sound/virtio/virtio_ctl_msg.c | 19 ++++++++++++++++---
sound/virtio/virtio_ctl_msg.h | 3 +++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/sound/virtio/virtio_ctl_msg.c b/sound/virtio/virtio_ctl_msg.c
--- a/sound/virtio/virtio_ctl_msg.c
+++ b/sound/virtio/virtio_ctl_msg.c
@@ -265,7 +265,7 @@
{
struct virtio_device *vdev = snd->vdev;
struct virtio_snd_queue *queue = virtsnd_control_queue(snd);
- unsigned int js = msecs_to_jiffies(virtsnd_msg_timeout_ms);
+ unsigned long js = msecs_to_jiffies(virtsnd_msg_timeout_ms);
struct virtio_snd_hdr *request = virtsnd_ctl_msg_request(msg);
struct virtio_snd_hdr *response = virtsnd_ctl_msg_response(msg);
unsigned int nouts = 0;
@@ -273,7 +273,7 @@
struct scatterlist *psgs[4];
bool notify = false;
unsigned long flags;
- int rc;
+ long rc;
virtsnd_ctl_msg_ref(msg);
/* This reference stays with the queue until completion or teardown. */
@@ -314,7 +314,20 @@
*/
virtsnd_ctl_msg_unref(msg);
} else if (!nowait) {
- rc = wait_for_completion_interruptible_timeout(&msg->notify, js);
+ /*
+ * Teardown must observe completion even with a pending signal.
+ * Otherwise a subsequent open can retry RELEASE while the device
+ * is still processing the previous teardown request.
+ */
+ switch (le32_to_cpu(request->code)) {
+ case VIRTIO_SND_R_PCM_STOP:
+ case VIRTIO_SND_R_PCM_RELEASE:
+ rc = wait_for_completion_timeout(&msg->notify, js);
+ break;
+ default:
+ rc = wait_for_completion_interruptible_timeout(&msg->notify, js);
+ break;
+ }
if (!rc) {
dev_err(&vdev->dev,
"control message (0x%08x) timeout\n",
diff --git a/sound/virtio/virtio_ctl_msg.h b/sound/virtio/virtio_ctl_msg.h
--- a/sound/virtio/virtio_ctl_msg.h
+++ b/sound/virtio/virtio_ctl_msg.h
@@ -47,6 +47,9 @@
* The msg_timeout_ms module parameter defines the message completion timeout.
* If the message is not completed within this time, the function will return an
* error.
+ * PCM STOP and RELEASE wait through pending signals within this timeout.
+ * Other requests remain interruptible. Device reset cancels and wakes either
+ * kind of waiter.
*
* Context: Any context that permits to sleep.
* Return: 0 on success, -errno on failure.
next prev parent reply other threads:[~2026-11-06 0:07 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 0:06 [PATCH v18 00/12] ALSA: virtio: fix capture lifetime and accounting Joonho Lee
2026-11-06 0:06 ` [PATCH v18 01/12] ALSA: pcm: mark stop-threshold accesses for capture policy sampling Joonho Lee
2026-11-06 0:06 ` [PATCH v18 02/12] ALSA: pcm: report partial progress under the stream lock Joonho Lee
2026-11-06 0:06 ` [PATCH v18 03/12] ALSA: pcm: add an optional reset operation " Joonho Lee
2026-11-06 0:06 ` [PATCH v18 04/12] ALSA: virtio: Propagate PCM send failures through ACK Joonho Lee
2026-11-06 0:06 ` [PATCH v18 05/12] ALSA: virtio: Recover PCM state after a failed start Joonho Lee
2026-11-06 0:06 ` [PATCH v18 06/12] ALSA: virtio: Retain queued messages through device reset Joonho Lee
2026-11-06 0:06 ` [PATCH v18 07/12] ALSA: virtio: retain PCM DMA pages and validate capture ring ownership Joonho Lee
2026-11-06 0:06 ` [PATCH v18 08/12] ALSA: virtio: Keep control payloads alive through DMA completion Joonho Lee
2026-11-06 0:06 ` Joonho Lee [this message]
2026-11-06 0:06 ` [PATCH v18 10/12] ALSA: virtio: serialize staged capture lifecycle and defer paused XRUNs Joonho Lee
2026-11-06 0:06 ` [PATCH v18 11/12] ALSA: virtio: prioritize staged capture period work Joonho Lee
2026-11-06 0:06 ` [PATCH v18 12/12] docs: describe virtio-sound capture options Joonho Lee
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=20261106000644.20460-10-mynameisjune111@gmail.com \
--to=mynameisjune111@gmail.com \
--cc=anton.yakovlev@opensynergy.com \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=mst@redhat.com \
--cc=perex@perex.cz \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.org \
--cc=tiwai@suse.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®