mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Joonho Lee <mynameisjune111@gmail.com>
Cc: linux-sound@vger.kernel.org, perex@perex.cz, tiwai@suse.com,
	anton.yakovlev@opensynergy.com, mst@redhat.com,
	virtualization@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 0/2] ALSA: virtio-snd: fix dsnoop capture with staged buffers
Date: Tue, 27 Oct 2026 10:15:01 +0100	[thread overview]
Message-ID: <87cxsv33oq.wl-tiwai@suse.de> (raw)
In-Reply-To: <20261025064038.81674-1-mynameisjune111@gmail.com>

On Sun, 25 Oct 2026 07:40:36 +0100,
Joonho Lee wrote:
> 
> Hi,
> 
> Changes in v4:
> * Arm synchronous stop before paused capture enters XRUN through ACK or
>   period work, so recovery releases pending RX requests before prepare.
> * Add read/forward ACK regressions for first-prepare recovery and direct
>   close/reopen, with native pause and pause-restart on one and two vCPUs.
> * Keep patch 1 and the prerequisite metadata unchanged.
> 
> Sashiko identified a missing cleanup path in v3 patch 2:
> https://sashiko.dev/#/patchset/20261025055702.69259-1-mynameisjune111%40gmail.com?part=2
> 
> Previous version:
> https://lore.kernel.org/all/20261025055702.69259-1-mynameisjune111@gmail.com/
> 
> This series fixes dsnoop capture on top of the staged-capture virtio-snd
> changes. dsnoop configures its slave with stop_threshold == boundary and
> can keep capture running without advancing the slave application pointer as
> an ordinary reader would. The staged-capture accounting currently exhausts
> its bounded unread capacity in this configuration.
> 
> The first patch marks stop_threshold accesses used by the driver's policy
> sampling. READ_ONCE/WRITE_ONCE provide single-access annotations; the
> virtio-snd state transitions remain protected by the substream lock.
> 
> The second patch caches the prepared boundary and samples the stop policy
> under that lock. A completion uses one sampled policy for validation,
> copying and queue refill. Free-running capture keeps requests queued and
> retains the existing frame, payload and pointer-window checks. Returning to
> bounded capture restores unread accounting from the monotonic counters. If
> the outstanding data already fills the ring, the policy helper returns
> -EPIPE without changing the cached mode or counters. The detecting RX,
> pointer or ACK path then reports XRUN through its existing error path.
> Native pause-release refill failures schedule the period worker to move a
> paused stream to XRUN and wake capture waiters.
> This does not guarantee a synchronous error from the sw_params ioctl.
> 
> The ACK accounting and subsequent queue refill each sample the policy under
> the appropriate locks. Prepare and teardown reset the cached state. The
> existing ACK-race and priority changes are prerequisites to this series and
> are excluded from these two diffs.
> 
> New testing for v4:
> 
> * v3 reproduced -EPIPE from paused read/forward ACK, followed by -EBADFD
>   on the first prepare in both native pause and pause-restart modes.
> * The corrected module passed 16 combinations of ACK operation, recovery
>   route, pause mode and vCPU count under ARM64 QEMU with KASAN/lockdep.
>   Prepare recovery uses the first prepare without an intervening drop.
>   Recovery and reopening each capture 48,000 frames.
> * The native-pause regression and 13-case mode suite also passed.
>   No KASAN or lockdep diagnostics were recorded in the six final VM runs.
> * Direct close/reopen succeeded even on v3 in this fixture; these results
>   establish the prepare regression, without establishing a persistent
>   buffer leak across close. Forced RX/pause interleaving, new physical
>   microphone tests and KCSAN reruns were not performed for v4.
> 
> Earlier testing for v3:
> 
> * ARM64 QEMU with KASAN and lockdep, native pause: v2 returned -EPIPE
>   but stayed PAUSED, and a waiting poll timed out. The corrected module
>   reached XRUN, woke poll with POLLERR and returned -EPIPE from read.
>   Prepare recovery and reopening each captured 48,000 frames. The
>   corrected case passed with both one and two vCPUs.
> * The 13-case mode suite passed with the corrected module, including
>   direct and mmap capture, policy transitions, delayed-reader recovery,
>   reopening, mixed-rate dsnoop readers and client departure. KASAN and
>   lockdep reported no diagnostics in these runs.
> 
> The following testing was performed on v2 before this focused change:
> 
> * ARM64 QEMU synthetic dsnoop capture: 12 files and 2,160,000 frames
>   matched the reference sequence from each client's observed starting
>   position. All 48 corruption, loss, duplication and reordering controls
>   were detected.
> * Default KCSAN: 13/13 cases and 619 policy transitions passed without
>   race or lockdep reports. Forced RX/ACK policy changes and four isolated
>   policy-helper branches passed under KASAN and KCSAN.
> * macOS VZ with MOTU UltraLite-mk5 at 48 kHz: comparisons used one or two
>   vCPUs and idle or CPU-saturated guests. The baseline failed all 32
>   shared-client captures. The candidate passed 48 captures and eight
>   recovery diagnostics, including mixed-rate sharing, client departure,
>   reopening and recovery after an intentionally delayed reader.
>   Loaded shared captures ran for 70 seconds. All eight accepted VM runs
>   shut down on the first request.
> 
> The physical tests checked frame counts and nonzero input. Exact sample
> continuity was checked with the QEMU synthetic source. VZ exposed mono;
> these tests do not establish physical input-channel routing or multichannel
> support. Aggressive KCSAN still produced dsnoop client-threshold XRUNs with
> a 160 ms buffer. Further isolation supports a deadline sensitivity, but
> does not exclude every kernel timing contribution. Separate generic KCSAN
> reports remain recorded in the test evidence.
> 
> This series depends on the staged-capture prerequisite stack below. The
> tested local base is 8d0d4c1a6c4bcb81ae9f52d1c0d979fafb2e22f2, consisting
> of nine prerequisite patches above sound.git commit
> 5618f6837ef3314e2c581d4c05ec13b7ed975cb4.
> 
> Prerequisites, in application order:
> 
> 1-5. Lifetime and error recovery v3:
> https://lore.kernel.org/all/cover.1791881787.git.mynameisjune111@gmail.com/
> 6. Generic teardown/control wait v2:
> https://lore.kernel.org/all/rfc-v2-generic-control-wait-0.2eddd58a796e497f@gmail.com/
> 7. VZ staged capture v2:
> https://lore.kernel.org/all/rfc-v2-vz-capture-compat-1.b9ab4c1540dc4691@gmail.com/
> 8-9. ACK accounting and high-priority period work:
> https://lore.kernel.org/all/rfc-virtio-snd-capture-followups-1.f2737c95c12e45b4@gmail.com/
> https://lore.kernel.org/all/rfc-virtio-snd-capture-followups-2.f2737c95c12e45b4@gmail.com/
> 
> This fixes the staged-capture accounting introduced by that prerequisite
> stack. The reproductions do not establish the same failure in an unmodified
> upstream kernel.
> 
> The policy uses the existing stop_threshold == boundary convention.
> Sampling it under the driver lock avoids introducing a PCM stream lock into
> RX completion. A completion overlapping a policy update may finish with the
> previous policy; its accounting and refill use that same sample. Rejecting
> a transition whose bounded accounting cannot be restored preserves
> explicit overflow detection and lets the caller recover the stream.
> 
> Patches:
>   ALSA: pcm: mark stop-threshold accesses for capture policy sampling
>   ALSA: virtio-snd: fix dsnoop capture with staged buffers

The patch2 doesn't seem cleanly applicable to the latest sound git
tree.  Could you verify and rebase/submit?  I think it'll be a
material for 7.5, as it's no regression fix, though.


thanks,

Takashi

      parent reply	other threads:[~2026-10-27  9:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-25  6:40 Joonho Lee
2026-10-25  6:40 ` [PATCH v4 1/2] ALSA: pcm: mark stop-threshold accesses for capture policy sampling Joonho Lee
2026-10-25  6:40 ` [PATCH v4 2/2] ALSA: virtio-snd: fix dsnoop capture with staged buffers Joonho Lee
2026-10-27  9:15 ` 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=87cxsv33oq.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=anton.yakovlev@opensynergy.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=mynameisjune111@gmail.com \
    --cc=perex@perex.cz \
    --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®