FAILED: patch "[PATCH] ALSA: pcxhr: initialize mutexes before requesting threaded" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x 6c97817e20598e5473094e0e38d1f51f1cf4dfff
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090309-dimly-regulator-21d3@gregkh' --subject-prefix 'PATCH 5.10.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6c97817e20598e5473094e0e38d1f51f1cf4dfff Mon Sep 17 00:00:00 2001
From: Runyu Xiao <[email protected]>
Date: Tue, 18 Aug 2026 22:47:17 +0800
Subject: [PATCH] ALSA: pcxhr: initialize mutexes before requesting threaded
IRQ
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.
sound/pci/pcxhr/pcxhr.c +7 -7
@@ -1535,6 +1535,13 @@ static int pcxhr_probe(struct pci_dev *pci, 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)) {
@@ -1548,13 +1555,6 @@ static int pcxhr_probe(struct pci_dev *pci,"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),
Sasha Levin
maintainerPATCH 1/2 ALSA: pcxhr: use __func__ to get funcion's name in an output message
From: Jason Wang <[email protected]>
[ Upstream commit fac24b0f34c179c6ca863f5205fad42a676caf9a ]
Prefer using '"%s...", __func__' to get current function's name in an output message.
Stable-dep-of: 6c97817e2059 ("ALSA: pcxhr: initialize mutexes before requesting threaded IRQ")
--- sound/pci/pcxhr/pcxhr.c | 47 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 24 deletions(-)
sound/pci/pcxhr/pcxhr.c +23 -24
@@ -367,7 +367,7 @@ static int pcxhr_sub_set_clock(struct pcxhr_mgr *mgr, mgr->codec_speed = speed;/* save new codec speed */ } -dev_dbg (&mgr->pci->dev,"pcxhr_sub_set_clock to %dHz (realfreq=%d)\n" , +dev_dbg (&mgr->pci->dev,"%s to %dHz (realfreq=%d)\n" , __func__, rate, realfreq);return 0 ; }
@@ -500,7 +500,7 @@ static int pcxhr_set_stream_state(struct snd_pcxhr *chip,else {if (stream->status !=PCXHR_STREAM_STATUS_SCHEDULE_STOP ) {dev_err (chip->card->dev, -"pcxhr_set_stream_state CANNOT be stopped\n" ); +"%s CANNOT be stopped\n" , __func__);return -EINVAL ; } start =0 ;
@@ -525,7 +525,7 @@ static int pcxhr_set_stream_state(struct snd_pcxhr *chip, err =pcxhr_send_msg (chip->mgr, &rmh);if (err)dev_err (chip->card->dev, -"ERROR pcxhr_set_stream_state err=%x;\n" , err); +"ERROR %s err=%x;\n" , __func__, err); stream->status = start ?PCXHR_STREAM_STATUS_STARTED :PCXHR_STREAM_STATUS_STOPPED ;return err;
@@ -571,7 +571,7 @@ static int pcxhr_set_format(struct pcxhr_stream *stream)break ;default :dev_err (chip->card->dev, -"error pcxhr_set_format() : unknown format\n" ); +"error %s() : unknown format\n" , __func__);return -EINVAL ; }
@@ -616,7 +616,7 @@ static int pcxhr_set_format(struct pcxhr_stream *stream) err =pcxhr_send_msg (chip->mgr, &rmh);if (err)dev_err (chip->card->dev, -"ERROR pcxhr_set_format err=%x;\n" , err); +"ERROR %s err=%x;\n" , __func__, err);return err; }
@@ -631,7 +631,7 @@ static int pcxhr_update_r_buffer(struct pcxhr_stream *stream) stream_num = is_capture ?0 : subs->number;dev_dbg (chip->card->dev, -"pcxhr_update_r_buffer(pcm%c%d) : addr(%p) bytes(%zx) subs(%d)\n" , +"%s(pcm%c%d) : addr(%p) bytes(%zx) subs(%d)\n" , __func__, is_capture ?'c' :'p' , chip->chip_idx, (void *)(long )subs->runtime->dma_addr, subs->runtime->dma_bytes, subs->number);
@@ -722,21 +722,20 @@ static void pcxhr_start_linked_stream(struct pcxhr_mgr *mgr) }if (capture_mask ==0 && playback_mask ==0 ) {mutex_unlock (&mgr->setup_mutex); -dev_err (&mgr->pci->dev,"pcxhr_start_linked_stream : no pipes\n" ); +dev_err (&mgr->pci->dev,"%s : no pipes\n" , __func__);return ; } -dev_dbg (&mgr->pci->dev,"pcxhr_start_linked_stream : " -"playback_mask=%x capture_mask=%x\n" , - playback_mask, capture_mask); +dev_dbg (&mgr->pci->dev,"%s : playback_mask=%x capture_mask=%x\n" , + __func__, playback_mask, capture_mask);/* synchronous stop of all the pipes concerned */ err =pcxhr_set_pipe_state (mgr, playback_mask, capture_mask,0 );if (err) {mutex_unlock (&mgr->setup_mutex); -dev_err (&mgr->pci->dev,"pcxhr_start_linked_stream : " +dev_err (&mgr->pci->dev,"%s : " "error stop pipes (P%x C%x)\n" , - playback_mask, capture_mask); + __func__, playback_mask, capture_mask);return ; }
@@ -779,9 +778,9 @@ static void pcxhr_start_linked_stream(struct pcxhr_mgr *mgr) err =pcxhr_set_pipe_state (mgr, playback_mask, capture_mask,1 );if (err) {mutex_unlock (&mgr->setup_mutex); -dev_err (&mgr->pci->dev,"pcxhr_start_linked_stream : " +dev_err (&mgr->pci->dev,"%s : " "error start pipes (P%x C%x)\n" , - playback_mask, capture_mask); + __func__, playback_mask, capture_mask);return ; }
@@ -890,7 +889,7 @@ static int pcxhr_hardware_timer(struct pcxhr_mgr *mgr, int start) } err =pcxhr_send_msg (mgr, &rmh);if (err <0 ) -dev_err (&mgr->pci->dev,"error pcxhr_hardware_timer err(%x)\n" , +dev_err (&mgr->pci->dev,"error %s err(%x)\n" , __func__, err);return err; }
@@ -905,7 +904,7 @@ static int pcxhr_prepare(struct snd_pcm_substream *subs)int err =0 ;dev_dbg (chip->card->dev, -"pcxhr_prepare : period_size(%lx) periods(%x) buffer_size(%lx)\n" , +"%s : period_size(%lx) periods(%x) buffer_size(%lx)\n" , __func__, subs->runtime->period_size, subs->runtime->periods, subs->runtime->buffer_size);
@@ -998,12 +997,12 @@ static int pcxhr_open(struct snd_pcm_substream *subs) runtime->hw = pcxhr_caps;if ( subs->stream ==SNDRV_PCM_STREAM_PLAYBACK ) { -dev_dbg (chip->card->dev,"pcxhr_open playback chip%d subs%d\n" , - chip->chip_idx, subs->number); +dev_dbg (chip->card->dev,"%s playback chip%d subs%d\n" , + __func__, chip->chip_idx, subs->number); stream = &chip->playback_stream[subs->number]; }else { -dev_dbg (chip->card->dev,"pcxhr_open capture chip%d subs%d\n" , - chip->chip_idx, subs->number); +dev_dbg (chip->card->dev,"%s capture chip%d subs%d\n" , + __func__, chip->chip_idx, subs->number);if (mgr->mono_capture) runtime->hw.channels_max =1 ;else
@@ -1012,8 +1011,8 @@ static int pcxhr_open(struct snd_pcm_substream *subs) }if (stream->status !=PCXHR_STREAM_STATUS_FREE ){/* streams in use */ -dev_err (chip->card->dev,"pcxhr_open chip%d subs%d in use\n" , - chip->chip_idx, subs->number); +dev_err (chip->card->dev,"%s chip%d subs%d in use\n" , + __func__, chip->chip_idx, subs->number);mutex_unlock (&mgr->setup_mutex);return -EBUSY ; }
@@ -1078,7 +1077,7 @@ static int pcxhr_close(struct snd_pcm_substream *subs)mutex_lock (&mgr->setup_mutex); -dev_dbg (chip->card->dev,"pcxhr_close chip%d subs%d\n" , +dev_dbg (chip->card->dev,"%s chip%d subs%d\n" , __func__, chip->chip_idx, subs->number);/* sample rate released */
@@ -1569,7 +1568,7 @@ static int pcxhr_probe(struct pci_dev *pci,/* init setup mutex*/ mutex_init (&mgr->setup_mutex); - mgr->prmh =kmalloc (sizeof (*mgr->prmh) + + mgr->prmh =kmalloc (sizeof (*mgr->prmh) +sizeof (u32) * (PCXHR_SIZE_MAX_LONG_STATUS -PCXHR_SIZE_MAX_STATUS ),GFP_KERNEL );
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 ALSA: pcxhr: initialize mutexes before requesting threaded IRQ
From: Runyu Xiao <[email protected]>
[ Upstream commit 6c97817e20598e5473094e0e38d1f51f1cf4dfff ]
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.
--- sound/pci/pcxhr/pcxhr.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
sound/pci/pcxhr/pcxhr.c +7 -7
@@ -1548,6 +1548,13 @@ static int pcxhr_probe(struct pci_dev *pci, 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)) {
@@ -1561,13 +1568,6 @@ static int pcxhr_probe(struct pci_dev *pci,"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),
Signature · 1 line
2.53.0