[PATCH v4 0/3] ALSA: opl3: Fix sequencer timer and channel lifetimes
From: Cen Zhang
Date: Sat Oct 24 2026 - 12:50:04 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, key off active voices and
clear their aliases before freeing each channel set, and shut down the
shared timer after client deletion has drained both event producers.
Retire higher-numbered partners before their 4-op primaries so no active
hardware KEYON is skipped when the primary changes its partner's state.
This series applies to tiwai/sound.git for-next at d74eb09af56b.
---
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_midi.c | 15 +++++++++++++++
sound/drivers/opl3/opl3_oss.c | 1 +
sound/drivers/opl3/opl3_seq.c | 13 ++++++++-----
sound/drivers/opl3/opl3_voice.h | 1 +
4 files changed, 25 insertions(+), 5 deletions(-)
Changes in v4:
- Retire higher-numbered paired voices before 4-op primaries in patch 2 so
primary cleanup cannot hide an independently active partner from hardware
key-off.
- Explain the initial SYNTH-mode direct NOTEON/program-change sequence which
can activate both members of a pair.
- Keep the code in patches 1 and 3 unchanged.
Link to v1: https://lore.kernel.org/r/pm-pmb-4552c4e605507d8d9b16-v4-213af356c0046331c8ff@xxxxxxxxx
Link to v2: https://lore.kernel.org/r/pm-pmb-4552c4e605507d8d9b16-v6-f3fa18aca2c7d18be670-0@xxxxxxxxx
Link to v3: https://lore.kernel.org/r/pm-pmb-4552c4e605507d8d9b16-v8-8b61497d9bd754defcda-0@xxxxxxxxx