| From 6c97817e20598e5473094e0e38d1f51f1cf4dfff Mon Sep 17 00:00:00 2001 |
| From: Runyu Xiao <runyu.xiao@seu.edu.cn> |
| Date: Tue, 18 Aug 2026 22:47:17 +0800 |
| Subject: ALSA: pcxhr: initialize mutexes before requesting threaded IRQ |
| |
| From: Runyu Xiao <runyu.xiao@seu.edu.cn> |
| |
| commit 6c97817e20598e5473094e0e38d1f51f1cf4dfff upstream. |
| |
| pcxhr_probe() requests pcxhr_threaded_irq() before initializing |
| mgr->lock, even though the threaded handler takes that mutex. |
| |
| Initialize the manager locks before request_threaded_irq() so an |
| early interrupt cannot run against uninitialized mutex state during |
| probe. |
| |
| Fixes: 9bef72bdb26e ("ALSA: pcxhr: Use nonatomic PCM ops") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn> |
| Link: https://patch.msgid.link/20260818144717.2269918-1-runyu.xiao@seu.edu.cn |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/pci/pcxhr/pcxhr.c | 14 +++++++------- |
| 1 file changed, 7 insertions(+), 7 deletions(-) |
| |
| --- a/sound/pci/pcxhr/pcxhr.c |
| +++ b/sound/pci/pcxhr/pcxhr.c |
| @@ -1551,6 +1551,13 @@ static int pcxhr_probe(struct pci_dev *p |
| mgr->pci = pci; |
| mgr->irq = -1; |
| |
| + /* ISR lock */ |
| + mutex_init(&mgr->lock); |
| + mutex_init(&mgr->msg_lock); |
| + |
| + /* init setup mutex*/ |
| + mutex_init(&mgr->setup_mutex); |
| + |
| if (request_threaded_irq(pci->irq, pcxhr_interrupt, |
| pcxhr_threaded_irq, IRQF_SHARED, |
| KBUILD_MODNAME, mgr)) { |
| @@ -1564,13 +1571,6 @@ static int pcxhr_probe(struct pci_dev *p |
| "Digigram at 0x%lx & 0x%lx, 0x%lx irq %i", |
| mgr->port[0], mgr->port[1], mgr->port[2], mgr->irq); |
| |
| - /* ISR lock */ |
| - mutex_init(&mgr->lock); |
| - mutex_init(&mgr->msg_lock); |
| - |
| - /* init setup mutex*/ |
| - mutex_init(&mgr->setup_mutex); |
| - |
| mgr->prmh = kmalloc(sizeof(*mgr->prmh) + |
| sizeof(u32) * (PCXHR_SIZE_MAX_LONG_STATUS - |
| PCXHR_SIZE_MAX_STATUS), |