Patch "wifi: ath12k: fix soft lockup on 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

    wifi: ath12k: fix soft lockup on 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:
     wifi-ath12k-fix-soft-lockup-on-suspend.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 5521caebc9a852dc766087df59c2f38e85e63e48
Author: Johan Hovold <johan+linaro@xxxxxxxxxx>
Date:   Tue Jul 9 09:31:32 2024 +0200

    wifi: ath12k: fix soft lockup on suspend
    
    [ Upstream commit a47f3320bb4ba6714abe8dddb36399367b491358 ]
    
    The ext interrupts are enabled when the firmware has been started, but
    this may never happen, for example, if the board configuration file is
    missing.
    
    When the system is later suspended, the driver unconditionally tries to
    disable interrupts, which results in an irq disable imbalance and causes
    the driver to spin indefinitely in napi_synchronize().
    
    Make sure that the interrupts have been enabled before attempting to
    disable them.
    
    Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
    Cc: stable@xxxxxxxxxxxxxxx      # 6.3
    Signed-off-by: Johan Hovold <johan+linaro@xxxxxxxxxx>
    Acked-by: Jeff Johnson <quic_jjohnson@xxxxxxxxxxx>
    Link: https://patch.msgid.link/20240709073132.9168-1-johan+linaro@xxxxxxxxxx
    Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/ath/ath12k/pci.c b/drivers/net/wireless/ath/ath12k/pci.c
index f27b93c20a349..041a9602f0e15 100644
--- a/drivers/net/wireless/ath/ath12k/pci.c
+++ b/drivers/net/wireless/ath/ath12k/pci.c
@@ -434,7 +434,8 @@ static void __ath12k_pci_ext_irq_disable(struct ath12k_base *ab)
 {
 	int i;
 
-	clear_bit(ATH12K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags);
+	if (!test_and_clear_bit(ATH12K_FLAG_EXT_IRQ_ENABLED, &ab->dev_flags))
+		return;
 
 	for (i = 0; i < ATH12K_EXT_IRQ_GRP_NUM_MAX; i++) {
 		struct ath12k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];




[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