diff options
Diffstat (limited to 'package/kernel/mac80211/patches/311-ath10k-disable-wake_tx_queue-for-older-devices.patch')
-rw-r--r-- | package/kernel/mac80211/patches/311-ath10k-disable-wake_tx_queue-for-older-devices.patch | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/package/kernel/mac80211/patches/311-ath10k-disable-wake_tx_queue-for-older-devices.patch b/package/kernel/mac80211/patches/311-ath10k-disable-wake_tx_queue-for-older-devices.patch deleted file mode 100644 index 4cf26a6..0000000 --- a/package/kernel/mac80211/patches/311-ath10k-disable-wake_tx_queue-for-older-devices.patch +++ /dev/null @@ -1,73 +0,0 @@ -From: Michal Kazior <michal.kazior@tieto.com> -Date: Tue, 17 May 2016 14:47:01 +0200 -Subject: [PATCH] ath10k: disable wake_tx_queue for older devices - -Some setups suffer performance regressions with -current wake_tx_queue implementation. - -Signed-off-by: Michal Kazior <michal.kazior@tieto.com> ---- - ---- a/drivers/net/wireless/ath/ath10k/core.h -+++ b/drivers/net/wireless/ath/ath10k/core.h -@@ -667,6 +667,7 @@ struct ath10k_fw_components { - struct ath10k { - struct ath_common ath_common; - struct ieee80211_hw *hw; -+ struct ieee80211_ops *ops; - struct device *dev; - u8 mac_addr[ETH_ALEN]; - ---- a/drivers/net/wireless/ath/ath10k/mac.c -+++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -7497,21 +7497,32 @@ static const struct ieee80211_channel at - struct ath10k *ath10k_mac_create(size_t priv_size) - { - struct ieee80211_hw *hw; -+ struct ieee80211_ops *ops; - struct ath10k *ar; - -- hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, &ath10k_ops); -- if (!hw) -+ ops = kmemdup(&ath10k_ops, sizeof(ath10k_ops), GFP_KERNEL); -+ if (!ops) -+ return NULL; -+ -+ hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, ops); -+ if (!hw) { -+ kfree(ops); - return NULL; -+ } - - ar = hw->priv; - ar->hw = hw; -+ ar->ops = ops; - - return ar; - } - - void ath10k_mac_destroy(struct ath10k *ar) - { -+ struct ieee80211_ops *ops = ar->ops; -+ - ieee80211_free_hw(ar->hw); -+ kfree(ops); - } - - static const struct ieee80211_iface_limit ath10k_if_limits[] = { -@@ -7945,6 +7956,15 @@ int ath10k_mac_register(struct ath10k *a - ath10k_warn(ar, "failed to initialise DFS pattern detector\n"); - } - -+ /* Current wake_tx_queue implementation imposes a significant -+ * performance penalty in some setups. The tx scheduling code needs -+ * more work anyway so disable the wake_tx_queue unless firmware -+ * supports the pull-push mechanism. -+ */ -+ if (!test_bit(ATH10K_FW_FEATURE_PEER_FLOW_CONTROL, -+ ar->running_fw->fw_file.fw_features)) -+ ar->ops->wake_tx_queue = NULL; -+ - ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy, - ath10k_reg_notifier); - if (ret) { |