Patch "wifi: ath11k: fix deinitialization of firmware resources" has been added to the 6.1-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: ath11k: fix deinitialization of firmware resources

to the 6.1-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-ath11k-fix-deinitialization-of-firmware-resourc.patch
and it can be found in the queue-6.1 subdirectory.

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



commit f6332b97e540a5287cc766b6fd68685ce437d1da
Author: Aditya Kumar Singh <quic_adisi@xxxxxxxxxxx>
Date:   Thu Mar 9 15:23:08 2023 +0530

    wifi: ath11k: fix deinitialization of firmware resources
    
    [ Upstream commit 5a78ac33e3cb8822da64dd1af196e83664b332b0 ]
    
    Currently, in ath11k_ahb_fw_resources_init(), iommu domain
    mapping is done only for the chipsets having fixed firmware
    memory. Also, for such chipsets, mapping is done only if it
    does not have TrustZone support.
    
    During deinitialization, only if TrustZone support is not there,
    iommu is unmapped back. However, for non fixed firmware memory
    chipsets, TrustZone support is not there and this makes the
    condition check to true and it tries to unmap the memory which
    was not mapped during initialization.
    
    This leads to the following trace -
    
    [   83.198790] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
    [   83.259537] Modules linked in: ath11k_ahb ath11k qmi_helpers
    .. snip ..
    [   83.280286] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [   83.287228] pc : __iommu_unmap+0x30/0x140
    [   83.293907] lr : iommu_unmap+0x5c/0xa4
    [   83.298072] sp : ffff80000b3abad0
    .. snip ..
    [   83.369175] Call trace:
    [   83.376282]  __iommu_unmap+0x30/0x140
    [   83.378541]  iommu_unmap+0x5c/0xa4
    [   83.382360]  ath11k_ahb_fw_resource_deinit.part.12+0x2c/0xac [ath11k_ahb]
    [   83.385666]  ath11k_ahb_free_resources+0x140/0x17c [ath11k_ahb]
    [   83.392521]  ath11k_ahb_shutdown+0x34/0x40 [ath11k_ahb]
    [   83.398248]  platform_shutdown+0x20/0x2c
    [   83.403455]  device_shutdown+0x16c/0x1c4
    [   83.407621]  kernel_restart_prepare+0x34/0x3c
    [   83.411529]  kernel_restart+0x14/0x74
    [   83.415781]  __do_sys_reboot+0x1c4/0x22c
    [   83.419427]  __arm64_sys_reboot+0x1c/0x24
    [   83.423420]  invoke_syscall+0x44/0xfc
    [   83.427326]  el0_svc_common.constprop.3+0xac/0xe8
    [   83.430974]  do_el0_svc+0xa0/0xa8
    [   83.435659]  el0_svc+0x1c/0x44
    [   83.438957]  el0t_64_sync_handler+0x60/0x144
    [   83.441910]  el0t_64_sync+0x15c/0x160
    [   83.446343] Code: aa0103f4 f9400001 f90027a1 d2800001 (f94006a0)
    [   83.449903] ---[ end trace 0000000000000000 ]---
    
    This can be reproduced by probing an AHB chipset which is not
    having a fixed memory region. During reboot (or rmmod) trace
    can be seen.
    
    Fix this issue by adding a condition check on firmware fixed memory
    hw_param as done in the counter initialization function.
    
    Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
    
    Fixes: f9eec4947add ("ath11k: Add support for targets without trustzone")
    Signed-off-by: Aditya Kumar Singh <quic_adisi@xxxxxxxxxxx>
    Signed-off-by: Kalle Valo <quic_kvalo@xxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20230309095308.24937-1-quic_adisi@xxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c
index f70a119bb5c87..76f275ca53e9c 100644
--- a/drivers/net/wireless/ath/ath11k/ahb.c
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
@@ -1063,6 +1063,12 @@ static int ath11k_ahb_fw_resource_deinit(struct ath11k_base *ab)
 	struct iommu_domain *iommu;
 	size_t unmapped_size;
 
+	/* Chipsets not requiring MSA would have not initialized
+	 * MSA resources, return success in such cases.
+	 */
+	if (!ab->hw_params.fixed_fw_mem)
+		return 0;
+
 	if (ab_ahb->fw.use_tz)
 		return 0;
 



[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