ath11k_nss: mac80211 fix pending airtime

On platforms using ath10k with mac80211 'nss_redirect' enabled,
a warning `ieee80211_sta_update_pending_airtime` is observered
whenever traffic load is high (iperf3).

Don't offload if pending queue > 1000

Signed-off-by: Sean Khan <datapronix@protonmail.com>
This commit is contained in:
Sean Khan 2024-06-02 18:50:37 -04:00
parent 08362e886f
commit ebdd70c9cb

View File

@ -136,7 +136,7 @@ Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
return 0;
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2569,6 +2569,54 @@ static bool ieee80211_frame_allowed(stru
@@ -2569,6 +2569,58 @@ static bool ieee80211_frame_allowed(stru
return true;
}
@ -154,6 +154,10 @@ Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
+ case_rtn_string(NSS_TX_FAILURE_TOO_SHORT);
+ case_rtn_string(NSS_TX_FAILURE_NOT_SUPPORTED);
+ case_rtn_string(NSS_TX_FAILURE_BAD_PARAM);
+ case_rtn_string(NSS_TX_FAILURE_NOT_ENABLED);
+ case_rtn_string(NSS_TX_FAILURE_SYNC_BAD_PARAM);
+ case_rtn_string(NSS_TX_FAILURE_SYNC_TIMEOUT);
+ case_rtn_string(NSS_TX_FAILURE_SYNC_FW_ERR);
+ default:
+ return "Unknown NSS TX status";
+ }
@ -191,7 +195,7 @@ Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
static void ieee80211_deliver_skb_to_local_stack(struct sk_buff *skb,
struct ieee80211_rx_data *rx)
{
@@ -2608,11 +2656,15 @@ static void ieee80211_deliver_skb_to_loc
@@ -2608,11 +2660,15 @@ static void ieee80211_deliver_skb_to_loc
!ether_addr_equal(ehdr->h_dest, sdata->vif.addr)))
ether_addr_copy(ehdr->h_dest, sdata->vif.addr);
@ -209,7 +213,25 @@ Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -4504,6 +4504,35 @@ static void ieee80211_mlo_multicast_tx(s
@@ -1726,7 +1726,16 @@ static bool ieee80211_tx_frags(struct ie
return true;
}
} else {
-
+#ifdef CPTCFG_MAC80211_NSS_SUPPORT
+ if (skb_queue_len(&local->pending[q]) >= 1000) {
+ spin_unlock_irqrestore(
+ &local->queue_stop_reason_lock,
+ flags);
+ ieee80211_purge_tx_queue(&local->hw,
+ skbs);
+ return false;
+ }
+#endif
/*
* Since queue is stopped, queue up frames for
* later transmission from the tx-pending
@@ -4504,6 +4513,35 @@ static void ieee80211_mlo_multicast_tx(s
kfree_skb(skb);
}
@ -245,7 +267,7 @@ Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
/**
* ieee80211_subif_start_xmit - netif start_xmit function for 802.3 vifs
* @skb: packet to be sent
@@ -4517,6 +4546,10 @@ netdev_tx_t ieee80211_subif_start_xmit(s
@@ -4517,6 +4555,10 @@ netdev_tx_t ieee80211_subif_start_xmit(s
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
const struct ethhdr *eth = (void *)skb->data;
@ -256,7 +278,7 @@ Signed-off-by: Sowmiya Sree Elavalagan <ssreeela@codeaurora.org>
if (likely(!is_multicast_ether_addr(eth->h_dest)))
goto normal;
@@ -4703,6 +4736,9 @@ netdev_tx_t ieee80211_subif_start_xmit_8
@@ -4703,6 +4745,9 @@ netdev_tx_t ieee80211_subif_start_xmit_8
struct ieee80211_key *key;
struct sta_info *sta;