[OpenWrt-Devel] [PATCH] kernel: ath10k-ct: provide a build variant for small RAM devices
Ben Greear
greearb at candelatech.com
Wed Dec 11 13:06:26 EST 2019
On 12/11/19 6:44 AM, Paul Fertser wrote:
> 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 might 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.
>
> [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
I am fine with this approach.
And also if you want to just have the makefile pass a -DBUILD_ATH10K_SMALL or something
like that and #ifdef code in the ath10k-ct driver, then I'd apply that patch to ath10k-ct
so that you don't need the patches.
Thanks,
Ben
>
> Signed-off-by: Paul Fertser <fercerpav at gmail.com>
> ---
> package/kernel/ath10k-ct/Makefile | 30 +++++++-
> ...0-0010-ath10k-limit-htt-rx-ring-size.patch | 22 ++++++
> ...60-0011-ath10k-limit-pci-buffer-size.patch | 76 +++++++++++++++++++
> 3 files changed, 127 insertions(+), 1 deletion(-)
> create mode 100644 package/kernel/ath10k-ct/patches-smallbuffers/960-0010-ath10k-limit-htt-rx-ring-size.patch
> create mode 100644 package/kernel/ath10k-ct/patches-smallbuffers/960-0011-ath10k-limit-pci-buffer-size.patch
>
> diff --git a/package/kernel/ath10k-ct/Makefile b/package/kernel/ath10k-ct/Makefile
> index dbf75fe174..d5726a1c88 100644
> --- a/package/kernel/ath10k-ct/Makefile
> +++ b/package/kernel/ath10k-ct/Makefile
> @@ -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,17 @@ 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 to work on low-RAM devices)
> + VARIANT:=smallbuffers
> +endef
> +
> +define KernelPackage/ath10k-ct-smallbuffers/config
> +$(call KernelPackage/ath10k-ct/config)
> endef
>
> NOSTDINC_FLAGS = \
> @@ -90,6 +101,22 @@ ifeq ($(CONFIG_ATH10K-CT_LEDS),y)
> NOSTDINC_FLAGS += -DCONFIG_ATH10K_LEDS
> endif
>
> +define Build/Patch
> + $(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches)
> + $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),)
> +ifeq ($(BUILD_VARIANT),smallbuffers)
> + $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)-smallbuffers,patches-smallbuffers)
> +endif
> + $(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used)
> +endef
> +
> +define Quilt/Refresh/Package
> + $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),)
> +ifeq ($(BUILD_VARIANT),smallbuffers)
> + $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)-smallbuffers,patches-smallbuffers)
> +endif
> +endef
> +
> define Build/Configure
> cp $(STAGING_DIR)/usr/include/mac80211/ath/*.h $(PKG_BUILD_DIR)
> endef
> @@ -107,3 +134,4 @@ define Build/Compile
> endef
>
> $(eval $(call KernelPackage,ath10k-ct))
> +$(eval $(call KernelPackage,ath10k-ct-smallbuffers))
> diff --git a/package/kernel/ath10k-ct/patches-smallbuffers/960-0010-ath10k-limit-htt-rx-ring-size.patch b/package/kernel/ath10k-ct/patches-smallbuffers/960-0010-ath10k-limit-htt-rx-ring-size.patch
> new file mode 100644
> index 0000000000..f73b02e5ef
> --- /dev/null
> +++ b/package/kernel/ath10k-ct/patches-smallbuffers/960-0010-ath10k-limit-htt-rx-ring-size.patch
> @@ -0,0 +1,22 @@
> +--- a/ath10k-4.19/htt.h
> ++++ b/ath10k-4.19/htt.h
> +@@ -226,7 +226,7 @@ enum htt_rx_ring_flags {
> + };
> +
> + #define HTT_RX_RING_SIZE_MIN 128
> +-#define HTT_RX_RING_SIZE_MAX 2048
> ++#define HTT_RX_RING_SIZE_MAX 512
> + #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
> +@@ -226,7 +226,7 @@ enum htt_rx_ring_flags {
> + };
> +
> + #define HTT_RX_RING_SIZE_MIN 128
> +-#define HTT_RX_RING_SIZE_MAX 2048
> ++#define HTT_RX_RING_SIZE_MAX 512
> + #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)
> diff --git a/package/kernel/ath10k-ct/patches-smallbuffers/960-0011-ath10k-limit-pci-buffer-size.patch b/package/kernel/ath10k-ct/patches-smallbuffers/960-0011-ath10k-limit-pci-buffer-size.patch
> new file mode 100644
> index 0000000000..27c0032bfb
> --- /dev/null
> +++ b/package/kernel/ath10k-ct/patches-smallbuffers/960-0011-ath10k-limit-pci-buffer-size.patch
> @@ -0,0 +1,76 @@
> +--- a/ath10k-4.19/pci.c
> ++++ b/ath10k-4.19/pci.c
> +@@ -131,7 +131,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 2048,
> +- .dest_nentries = 512,
> ++ .dest_nentries = 128,
> + .recv_cb = ath10k_pci_htt_htc_rx_cb,
> + },
> +
> +@@ -140,7 +140,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 2048,
> +- .dest_nentries = 128,
> ++ .dest_nentries = 64,
> + .recv_cb = ath10k_pci_htc_rx_cb,
> + },
> +
> +@@ -167,7 +167,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 512,
> +- .dest_nentries = 512,
> ++ .dest_nentries = 128,
> + .recv_cb = ath10k_pci_htt_rx_cb,
> + },
> +
> +@@ -192,7 +192,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 2048,
> +- .dest_nentries = 128,
> ++ .dest_nentries = 96,
> + .recv_cb = ath10k_pci_pktlog_rx_cb,
> + },
> +
> +--- a/ath10k-5.2/pci.c
> ++++ b/ath10k-5.2/pci.c
> +@@ -131,7 +131,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 2048,
> +- .dest_nentries = 512,
> ++ .dest_nentries = 128,
> + .recv_cb = ath10k_pci_htt_htc_rx_cb,
> + },
> +
> +@@ -140,7 +140,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 2048,
> +- .dest_nentries = 128,
> ++ .dest_nentries = 64,
> + .recv_cb = ath10k_pci_htc_rx_cb,
> + },
> +
> +@@ -167,7 +167,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 512,
> +- .dest_nentries = 512,
> ++ .dest_nentries = 128,
> + .recv_cb = ath10k_pci_htt_rx_cb,
> + },
> +
> +@@ -192,7 +192,7 @@ static struct ce_attr host_ce_config_wla
> + .flags = CE_ATTR_FLAGS,
> + .src_nentries = 0,
> + .src_sz_max = 2048,
> +- .dest_nentries = 128,
> ++ .dest_nentries = 96,
> + .recv_cb = ath10k_pci_pktlog_rx_cb,
> + },
> +
>
--
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc http://www.candelatech.com
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list