mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-10 11:01:33 -04:00
ALSA: harmony: initialize locks before requesting IRQ
snd_harmony_create() registers the IRQ before initializing h->lock and
h->mixer_lock. A pending interrupt can invoke the handler while these
locks are uninitialized.
Initialize both locks before requesting the IRQ so the handler always
sees valid lock state.
Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Assisted-by: Codex:GPT-5
Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn>
Link: https://patch.msgid.link/20260830063411.2215691-1-runyu.xiao@seu.edu.cn
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
@@ -868,6 +868,9 @@ snd_harmony_create(struct snd_card *card,
|
||||
goto free_and_ret;
|
||||
}
|
||||
|
||||
spin_lock_init(&h->mixer_lock);
|
||||
spin_lock_init(&h->lock);
|
||||
|
||||
err = request_irq(padev->irq, snd_harmony_interrupt, 0,
|
||||
"harmony", h);
|
||||
if (err) {
|
||||
@@ -877,9 +880,6 @@ snd_harmony_create(struct snd_card *card,
|
||||
}
|
||||
h->irq = padev->irq;
|
||||
|
||||
spin_lock_init(&h->mixer_lock);
|
||||
spin_lock_init(&h->lock);
|
||||
|
||||
err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, h, &ops);
|
||||
if (err < 0)
|
||||
goto free_and_ret;
|
||||
|
||||
Reference in New Issue
Block a user