[PATCH v2 0/3] ALSA: opl3: Fix sequencer timer and channel lifetimes

From: Cen Zhang

Date: Thu Oct 22 2026 - 10:58:00 EST


OPL3 can receive a fixed-duration note before its timer is initialized,
and the card-owned voice array can retain channel pointers after either
sequencer port has freed its channel set. The delayed-note timer can also
remain queued after the sequencer client has been deleted.

Initialize the timer before publishing ports, clear voice aliases before
each channel set is freed, and shut down the shared timer after client
deletion has drained both event producers.

The first two patches address existing initialization and rebind issues
identified by Sashiko. The third replaces the earlier native-port-only
timer shutdown with shutdown after all sequencer ports have been drained.

---
Cen Zhang (3):
ALSA: opl3: Initialize the timer before publishing a sequencer port
ALSA: opl3: Clear voice channels before freeing their sets
ALSA: opl3: Shut down the timer after draining sequencer ports

sound/drivers/opl3/opl3_oss.c | 1 +
sound/drivers/opl3/opl3_seq.c | 25 ++++++++++++++++++++-----
sound/drivers/opl3/opl3_voice.h | 1 +
3 files changed, 22 insertions(+), 5 deletions(-)

Changes in v2:
- Split the initialization-order and stale-channel issues into separate
patches preceding the timer lifetime fix.
- Clear voice channel pointers, state and delayed-note flags under
voice_lock in both native and OSS port cleanup callbacks.
- Shut down the shared timer after client deletion has drained every port,
replacing the native-port-only shutdown.

Link to v1: https://lore.kernel.org/r/pm-pmb-4552c4e605507d8d9b16-v4-213af356c0046331c8ff@xxxxxxxxx