kernel: ath10k-ct: provide a build variant for small RAM devices
According to many bugreports [0][1][2] the default ath10k-ct kernel
module is unusable on devices with just 64 MiB RAM or with 128 MiB and
dual ath10k cards. The target boards boot but eventually oom-killer
starts to interfere with normal operation, so the current state is
effectively broken.
Since the two patches in question have a performance impact (and
possibly some other unexpected side-effects) a dedicated build variant
is added so that users of the low RAM devices can still benefit from all
the ath10k-ct advantages.
According to testing [3] results, the issue can be experienced even with
"a 256MB device with three radios". Measured performance impact of
implementing small buffers was lowering "the maximum 5 GHz throughput on
an IPQ40xx device without RPS/XPS optimizations from 494/432 Mbit/s for
TCP transfers (download/upload) to 438/343 Mbit/s"
The patches were apparently inspired by QSDK tweaks used by ODMs for the
affected devices.
[0] http://lists.infradead.org/pipermail/openwrt-devel/2019-December/020573.html
[1] https://github.com/openwrt/openwrt/pull/1077
[2] https://bugs.openwrt.org/index.php?do=details&task_id=2664
[3] https://github.com/freifunk-gluon/gluon/pull/1440#issue-195607701
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
[Remove double CONFIG_ATH10K-CT_LEDS entry]
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 1ac627024d)
			
			
This commit is contained in:
		 Paul Fertser
					Paul Fertser
				
			
				
					committed by
					
						 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			 Hauke Mehrtens
						Hauke Mehrtens
					
				
			
						parent
						
							e50d44d985
						
					
				
				
					commit
					450b306e54
				
			| @@ -35,6 +35,7 @@ define KernelPackage/ath10k-ct | ||||
| 	$(PKG_BUILD_DIR)/ath10k$(CT_KVER)/ath10k_core.ko | ||||
|   AUTOLOAD:=$(call AutoProbe,ath10k_pci) | ||||
|   PROVIDES:=kmod-ath10k | ||||
|   VARIANT:=regular | ||||
| endef | ||||
|  | ||||
| define KernelPackage/ath10k-ct/config | ||||
| @@ -42,7 +43,13 @@ define KernelPackage/ath10k-ct/config | ||||
|        config ATH10K-CT_LEDS | ||||
|                bool "Enable LED support" | ||||
|                default y | ||||
|                depends on PACKAGE_kmod-ath10k-ct | ||||
|                depends on PACKAGE_kmod-ath10k-ct || PACKAGE_kmod-ath10k-ct-smallbuffers | ||||
| endef | ||||
|  | ||||
| define KernelPackage/ath10k-ct-smallbuffers | ||||
| $(call KernelPackage/ath10k-ct) | ||||
|   TITLE+= (small buffers for low-RAM devices) | ||||
|   VARIANT:=smallbuffers | ||||
| endef | ||||
|  | ||||
| NOSTDINC_FLAGS = \ | ||||
| @@ -90,6 +97,10 @@ ifeq ($(CONFIG_ATH10K-CT_LEDS),y) | ||||
|   NOSTDINC_FLAGS += -DCONFIG_ATH10K_LEDS | ||||
| endif | ||||
|  | ||||
| ifeq ($(BUILD_VARIANT),smallbuffers) | ||||
|   NOSTDINC_FLAGS += -DCONFIG_ATH10K_SMALLBUFFERS | ||||
| endif | ||||
|  | ||||
| define Build/Configure | ||||
| 	cp $(STAGING_DIR)/usr/include/mac80211/ath/*.h $(PKG_BUILD_DIR) | ||||
| endef | ||||
| @@ -107,3 +118,4 @@ define Build/Compile | ||||
| endef | ||||
|  | ||||
| $(eval $(call KernelPackage,ath10k-ct)) | ||||
| $(eval $(call KernelPackage,ath10k-ct-smallbuffers)) | ||||
|   | ||||
| @@ -0,0 +1,28 @@ | ||||
| --- a/ath10k-4.19/htt.h | ||||
| +++ b/ath10k-4.19/htt.h | ||||
| @@ -237,7 +237,11 @@ enum htt_rx_ring_flags { | ||||
|  }; | ||||
|   | ||||
|  #define HTT_RX_RING_SIZE_MIN 128 | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  #define HTT_RX_RING_SIZE_MAX 2048 | ||||
| +#else | ||||
| +#define HTT_RX_RING_SIZE_MAX 512 | ||||
| +#endif | ||||
|  #define HTT_RX_RING_SIZE HTT_RX_RING_SIZE_MAX | ||||
|  #define HTT_RX_RING_FILL_LEVEL (((HTT_RX_RING_SIZE) / 2) - 1) | ||||
|  #define HTT_RX_RING_FILL_LEVEL_DUAL_MAC (HTT_RX_RING_SIZE - 1) | ||||
| --- a/ath10k-5.2/htt.h | ||||
| +++ b/ath10k-5.2/htt.h | ||||
| @@ -225,7 +225,11 @@ enum htt_rx_ring_flags { | ||||
|  }; | ||||
|   | ||||
|  #define HTT_RX_RING_SIZE_MIN 128 | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  #define HTT_RX_RING_SIZE_MAX 2048 | ||||
| +#else | ||||
| +#define HTT_RX_RING_SIZE_MAX 512 | ||||
| +#endif | ||||
|  #define HTT_RX_RING_SIZE HTT_RX_RING_SIZE_MAX | ||||
|  #define HTT_RX_RING_FILL_LEVEL (((HTT_RX_RING_SIZE) / 2) - 1) | ||||
|  #define HTT_RX_RING_FILL_LEVEL_DUAL_MAC (HTT_RX_RING_SIZE - 1) | ||||
| @@ -0,0 +1,100 @@ | ||||
| --- a/ath10k-4.19/pci.c | ||||
| +++ b/ath10k-4.19/pci.c | ||||
| @@ -142,7 +142,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 2048, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 512, | ||||
| +#else | ||||
| +		.dest_nentries = 128, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_htt_htc_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| @@ -151,7 +155,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 2048, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 128, | ||||
| +#else | ||||
| +		.dest_nentries = 64, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_htc_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| @@ -178,7 +186,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 512, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 512, | ||||
| +#else | ||||
| +		.dest_nentries = 128, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_htt_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| @@ -203,7 +215,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 2048, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 128, | ||||
| +#else | ||||
| +		.dest_nentries = 96, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_pktlog_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| --- a/ath10k-5.2/pci.c | ||||
| +++ b/ath10k-5.2/pci.c | ||||
| @@ -131,7 +131,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 2048, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 512, | ||||
| +#else | ||||
| +		.dest_nentries = 128, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_htt_htc_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| @@ -140,7 +144,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 2048, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 128, | ||||
| +#else | ||||
| +		.dest_nentries = 64, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_htc_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| @@ -167,7 +175,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 512, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 512, | ||||
| +#else | ||||
| +		.dest_nentries = 128, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_htt_rx_cb, | ||||
|  	}, | ||||
|   | ||||
| @@ -192,7 +204,11 @@ static struct ce_attr host_ce_config_wla | ||||
|  		.flags = CE_ATTR_FLAGS, | ||||
|  		.src_nentries = 0, | ||||
|  		.src_sz_max = 2048, | ||||
| +#ifndef CONFIG_ATH10K_SMALLBUFFERS | ||||
|  		.dest_nentries = 128, | ||||
| +#else | ||||
| +		.dest_nentries = 96, | ||||
| +#endif | ||||
|  		.recv_cb = ath10k_pci_pktlog_rx_cb, | ||||
|  	}, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user