Hi Takashi, This revision addresses the v12 review and Randy's formatting comments. It replaces v12 and includes the unmerged prerequisites. Apply patches 1-12 to sound.git for-next at a4311e9447bbb219044db38897f95be112f46a8a. Targeting 7.5 or later still works for me.
Previous series: https://lore.kernel.org/linux-sound/[email protected]/T/ Randy's review: https://lore.kernel.org/linux-sound/[email protected]/ ACK now checks the PCM state before changing transfer state. A raw SYNC_PTR racing with DROP previously changed SETUP to XRUN and re-armed stop_operating. The correction preserves SETUP and rejects that ACK with -EBADFD. Event callback admission is protected by the event queue lock, so a callback pending at disable cannot dispatch into freed ALSA objects. Enable and pending-event draining use the same lock. The prepare gate is cleared on failure and device reset. A successful hw_params clears the suspend flag, avoiding a second SET_PARAMS during prepare. Staged pointer queries reject unavailable epochs while retaining the released paused compatibility case. Playback pointer and ACK paths honor latched device XRUNs, and TX completion preserves the latch. The pause compatibility START path reports a latched XRUN as -EPIPE. Staged ACK retains an unconsumed sub-byte frame for the next complete byte, including appl_ptr boundary wrap. Capture RESET completes the private cursor rebase on error paths, retaining the XRUN latch and notification. Synchronous teardown owns a balanced work disable until the next successful prepare, preventing RX completions from requeuing period work after cancellation. The last completion always wakes the release waiter. Playback RESET changes behavior when TX requests remain device-owned: it returns -EBUSY before changing the pointers or queue accounting. With no outstanding TX, it rebases every indirect offset and clears partial message fills together. DROP/PREPARE retires a busy generation. This affects playback callers with capture_staging disabled as well. I would appreciate review of this busy-TX RESET policy. The refined partial-period test demonstrated why the accounting matters: a 64-frame partial write before RESET caused a later 960-frame write to submit a 1024-frame period. The correction waits for the remaining 64 frames. Linked RESET retains first-error and partial-completion behavior; both member orders and group prepare recovery were tested. Full-ring capture overwrite protection remains enabled. Delaying RX observation can overwrite the ring before drain. The candidate still returns -EPIPE in that case and returns the correct 64-frame tail for a normal drain. The post-cancellation worker issue is handled separately through work lifetime management. The suspend-flag findings share one correction. The playback state finding overlaps the ACK/DROP correction; its remaining XRUN handling is included here. Capture compatibility options stay opt-in and default to false. Every patch includes a diffstat, and the virtio_snd parameter entries follow virtio_mmio in the documentation. The series layout remains twelve patches: request and DMA lifetime in 1-6, core stop-threshold access in 7, partial-progress notification in 8, the optional PCM reset operation in 9, capture/lifecycle/RESET handling in 10, work priority in 11 and parameter documentation in 12. The core source is unchanged from v12. Validation selected 19 ARM64 QEMU runs with KASAN/lockdep and separate KCSAN_STRICT tests, including expected-failing original comparisons. The correction passed native and pause-compatibility lifecycle tests, prepare recovery, reconfiguration, XRUN delivery, repeated teardown and both linked RESET orders. The staged 4-bit ACK and pointer/error-reset checks call the real driver functions with isolated kernel fixtures. They do not establish negotiated hardware IMA_ADPCM capture support. The suspend test models the flag before real hw_params calls. Uninstrumented ordinary and staged capture each passed 70-second RW and MMAP recordings with RESET, pause/resume and reopen. All 14 segments, 14,208,000 mono S16 frames at 48 kHz, matched independent sequence hashes. These results cover ARM64 QEMU TCG with two vCPUs and 512 MiB. Physical VZ/MOTU, host sleep/resume and broader format, channel and architecture coverage remain pending. No general high-load scheduling improvement is claimed. LLM assistance was used for analysis, implementation, fixtures and this explanation. The patches carry Assisted-by: LLM. Thanks, Joonho base-commit: a4311e9447bbb219044db38897f95be112f46a8a
