Patch "ASoC: SOF: Intel: hda-dsp: Make sure that no irq handler is pending before suspend" has been added to the 6.6-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ASoC: SOF: Intel: hda-dsp: Make sure that no irq handler is pending before suspend

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     asoc-sof-intel-hda-dsp-make-sure-that-no-irq-handler.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e3f3231a3e2c63a589706153a55eb7257658738f
Author: Peter Ujfalusi <peter.ujfalusi@xxxxxxxxxxxxxxx>
Date:   Thu Oct 12 15:18:48 2023 -0400

    ASoC: SOF: Intel: hda-dsp: Make sure that no irq handler is pending before suspend
    
    [ Upstream commit 576a0b71b5b479008dacb3047a346625040f5ac6 ]
    
    In the existing IPC support, the reply to each IPC message is handled in
    an IRQ thread. The assumption is that the IRQ thread is scheduled without
    significant delays.
    
    On an experimental (iow, buggy) kernel, the IRQ thread dealing with the
    reply to the last IPC message before powering-down the DSP can be delayed
    by several seconds. The IRQ thread will proceed with register accesses
    after the DSP is powered-down which results in a kernel crash.
    
    While the bug which causes the delay is not in the audio stack, we must
    handle such cases with defensive programming to avoid such crashes.
    
    Call synchronize_irq() before proceeding to power down the DSP to make
    sure that no irq thread is pending execution.
    
    Closes: https://github.com/thesofproject/linux/issues/4608
    Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@xxxxxxxxxxxxxxx>
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@xxxxxxxxxxxxxxx>
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20231012191850.147140-3-pierre-louis.bossart@xxxxxxxxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/soc/sof/intel/hda-dsp.c b/sound/soc/sof/intel/hda-dsp.c
index e80a2a5ec56a1..1506982a56c30 100644
--- a/sound/soc/sof/intel/hda-dsp.c
+++ b/sound/soc/sof/intel/hda-dsp.c
@@ -709,6 +709,9 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend)
 	if (ret < 0)
 		return ret;
 
+	/* make sure that no irq handler is pending before shutdown */
+	synchronize_irq(sdev->ipc_irq);
+
 	hda_codec_jack_wake_enable(sdev, runtime_suspend);
 
 	/* power down all hda links */




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux