Re: [PATCH] ALSA: als4000: Fix capture trigger chip->mode race
From: Takashi Iwai
Date: Mon Apr 20 2026 - 03:08:58 EST
On Fri, 17 Apr 2026 22:30:18 +0200,
Cássio Gabriel wrote:
>
> snd_als4000_capture_trigger() updates chip->mode under mixer_lock,
> while snd_als4000_set_rate() and snd_als4000_playback_trigger()
> serialize the same rate-lock state with reg_lock.
>
> The PCM core serializes callbacks only per acted-on substream, or for an
> explicitly linked group, so unlinked playback and capture streams can
> run concurrently.
>
> That leaves two races on ALS4000 rate-lock state:
> - playback and capture trigger callbacks can concurrently update
> chip->mode and lose one of the SB_RATE_LOCK bits
> - snd_als4000_set_rate() can observe chip->mode without the capture
> lock bit set and reprogram the shared sample rate while capture is
> being started
>
> Fix this by taking reg_lock as the outer lock in
> snd_als4000_capture_trigger() and nesting mixer_lock only for the CR1E
> write. This keeps chip->mode serialized with the rest of the ALS4000
> rate-lock users while preserving the existing CR1E programming
> sequence.
>
> Signed-off-by: Cássio Gabriel <cassiogabrielcontato@xxxxxxxxx>
Applied now. Thanks.
Takashi