From ccda276e2037456edc80918d3d8ccee95a8a6df8 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Mar 30 2024 08:56:40 +0000 Subject: wifi: ath11k: decrease MHI channel buffer length to 8KB (bsc#1207948). --- diff --git a/patches.suse/wifi-ath11k-decrease-MHI-channel-buffer-length-to-8K.patch b/patches.suse/wifi-ath11k-decrease-MHI-channel-buffer-length-to-8K.patch new file mode 100644 index 0000000..6d0312e --- /dev/null +++ b/patches.suse/wifi-ath11k-decrease-MHI-channel-buffer-length-to-8K.patch @@ -0,0 +1,92 @@ +From 1cca1bddf9ef080503c15378cecf4877f7510015 Mon Sep 17 00:00:00 2001 +From: Baochen Qiang +Date: Fri, 23 Feb 2024 13:31:11 +0800 +Subject: [PATCH] wifi: ath11k: decrease MHI channel buffer length to 8KB +Git-commit: 1cca1bddf9ef080503c15378cecf4877f7510015 +Patch-mainline: v6.9-rc1 +References: bsc#1207948 + +Currently buf_len field of ath11k_mhi_config_qca6390 is assigned +with 0, making MHI use a default size, 64KB, to allocate channel +buffers. This is likely to fail in some scenarios where system +memory is highly fragmented and memory compaction or reclaim is +not allowed. + +There is a fail report which is caused by it: +kworker/u32:45: page allocation failure: order:4, mode:0x40c00(GFP_NOIO|__GFP_COMP), nodemask=(null),cpuset=/,mems_allowed=0 +Cpu: 0 PID: 19318 Comm: kworker/u32:45 Not tainted 6.8.0-rc3-1.gae4495f-default #1 openSUSE Tumbleweed (unreleased) 493b6d5b382c603654d7a81fc3c144d59a1dfceb +Workqueue: events_unbound async_run_entry_fn +Call Trace: + + dump_stack_lvl+0x47/0x60 + warn_alloc+0x13a/0x1b0 + ? srso_alias_return_thunk+0x5/0xfbef5 + ? __alloc_pages_direct_compact+0xab/0x210 + __alloc_pages_slowpath.constprop.0+0xd3e/0xda0 + __alloc_pages+0x32d/0x350 + ? mhi_prepare_channel+0x127/0x2d0 [mhi 40df44e07c05479f7a6e7b90fba9f0e0031a7814] + __kmalloc_large_node+0x72/0x110 + __kmalloc+0x37c/0x480 + ? mhi_map_single_no_bb+0x77/0xf0 [mhi 40df44e07c05479f7a6e7b90fba9f0e0031a7814] + ? mhi_prepare_channel+0x127/0x2d0 [mhi 40df44e07c05479f7a6e7b90fba9f0e0031a7814] + mhi_prepare_channel+0x127/0x2d0 [mhi 40df44e07c05479f7a6e7b90fba9f0e0031a7814] + __mhi_prepare_for_transfer+0x44/0x80 [mhi 40df44e07c05479f7a6e7b90fba9f0e0031a7814] + ? __pfx_____mhi_prepare_for_transfer+0x10/0x10 [mhi 40df44e07c05479f7a6e7b90fba9f0e0031a7814] + device_for_each_child+0x5c/0xa0 + ? __pfx_pci_pm_resume+0x10/0x10 + ath11k_core_resume+0x65/0x100 [ath11k a5094e22d7223135c40d93c8f5321cf09fd85e4e] + ? srso_alias_return_thunk+0x5/0xfbef5 + ath11k_pci_pm_resume+0x32/0x60 [ath11k_pci 830b7bfc3ea80ebef32e563cafe2cb55e9cc73ec] + ? srso_alias_return_thunk+0x5/0xfbef5 + dpm_run_callback+0x8c/0x1e0 + device_resume+0x104/0x340 + ? __pfx_dpm_watchdog_handler+0x10/0x10 + async_resume+0x1d/0x30 + async_run_entry_fn+0x32/0x120 + process_one_work+0x168/0x330 + worker_thread+0x2f5/0x410 + ? __pfx_worker_thread+0x10/0x10 + kthread+0xe8/0x120 + ? __pfx_kthread+0x10/0x10 + ret_from_fork+0x34/0x50 + ? __pfx_kthread+0x10/0x10 + ret_from_fork_asm+0x1b/0x30 + + +Actually those buffers are used only by QMI target -> host communication. +And for WCN6855 and QCA6390, the largest packet size for that is less +than 6KB. So change buf_len field to 8KB, which results in order 1 +allocation if page size is 4KB. In this way, we can at least save some +memory, and as well as decrease the possibility of allocation failure +in those scenarios. + +Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30 + +Reported-by: Vlastimil Babka +Closes: https://lore.kernel.org/ath11k/96481a45-3547-4d23-ad34-3a8f1d90c1cd@suse.cz/ +Signed-off-by: Baochen Qiang +Acked-by: Jeff Johnson +Signed-off-by: Kalle Valo +Link: https://msgid.link/20240223053111.29170-1-quic_bqiang@quicinc.com +Acked-by: Takashi Iwai + +--- + drivers/net/wireless/ath/ath11k/mhi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/wireless/ath/ath11k/mhi.c b/drivers/net/wireless/ath/ath11k/mhi.c +index 3de7fa6f88d0..522175aac5e7 100644 +--- a/drivers/net/wireless/ath/ath11k/mhi.c ++++ b/drivers/net/wireless/ath/ath11k/mhi.c +@@ -78,7 +78,7 @@ static struct mhi_controller_config ath11k_mhi_config_qca6390 = { + .max_channels = 128, + .timeout_ms = 2000, + .use_bounce_buf = false, +- .buf_len = 0, ++ .buf_len = 8192, + .num_channels = ARRAY_SIZE(ath11k_mhi_channels_qca6390), + .ch_cfg = ath11k_mhi_channels_qca6390, + .num_events = ARRAY_SIZE(ath11k_mhi_events_qca6390), +-- +2.43.0 + diff --git a/series.conf b/series.conf index 504e6f4..edd1b03 100644 --- a/series.conf +++ b/series.conf @@ -45717,6 +45717,7 @@ patches.suse/wifi-ath9k-delay-all-of-ath9k_wmi_event_tasklet-unti.patch patches.suse/wifi-ath11k-initialize-rx_mcs_80-and-rx_mcs_160-befo.patch patches.suse/wifi-rtw88-8821c-Fix-false-alarm-count.patch + patches.suse/wifi-ath11k-decrease-MHI-channel-buffer-length-to-8K.patch patches.suse/Bluetooth-Remove-HCI_POWER_OFF_TIMEOUT.patch patches.suse/Bluetooth-mgmt-Remove-leftover-queuing-of-power_off-.patch patches.suse/Bluetooth-Remove-superfluous-call-to-hci_conn_check_.patch