Re: [RFC PATCH] ath11k: add ath11k_mac_op_flush_sta to properly flush pending packets
Jeff Johnson <[email protected]>
| Newsgroups | org.infradead.lists.ath11k,org.kernel.vger.linux-wireless |
|---|---|
| Message-ID | <[email protected]> |
On 10/7/2025 1:11 AM, Florian Maurer wrote: > When a STA is marked as no longer authorized, if the driver doesn't > implement flush_sta(), mac80211 calls ieee80211_flush_queues() to > flush hardware queues to avoid sending unencrypted frames. > > This has became a problem for ath11k because ieee80211_flush_queues() > will stop all traffic and call ath11k_flush, which waits until the > whole HW queue is empty. In a busy environment this will trigger a > timeout warning and stalls other STAs. > > Fix this by implementing flush_sta method using WMI command to flush > frames of a specific STA. > Flushed frames will be marked as discard in tx complete indication. > > warning print "ath11k c000000.wifi: failed to flush transmit queue 0" > was observed on various openwrt devices, and is fixed through this patch. > > Signed-off-by: Florian Maurer <[email protected]> Your SOB should be the last tag in the list of tags since you need to sign off on the other tags you have added > Tested-by: Florian Maurer <[email protected]> > Co-authored-by: Benjamin Berg <[email protected]> This is not an upstream kernel tag. Perhaps you meant: Co-developed-by: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#when-to-use-acked-by-cc-and-co-developed-by Note that a Signed-off-by: tag is needed for all contributors > Tested-by: Flole <[email protected]> > --- > We tested this patch and it solved the problem of flushing the transmit > queues taking too long when the AP is busy. > We did not confirm if this flush is implemented to guarantee that no > unencrypted frames are sent out on station removal. > Could someone with more knowledge about the firmware behavior check > wether this approach is feasible or if a different approach should be > taken. > It is not clear to me if the approach taken in "wifi: ath10k: Flush > only requested txq in ath10k_flush()" might be better. > https://lore.kernel.org/linux-wireless/01d859e8e574a1f5d0b916333fe0b5cda859af9b.1732293922.git.repk@triplefau.lt/ > > Regards > Florian > > drivers/net/wireless/ath/ath11k/mac.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c > index 106e2530b64e..a94649edd4ed 100644 > --- a/drivers/net/wireless/ath/ath11k/mac.c > +++ b/drivers/net/wireless/ath/ath11k/mac.c > @@ -8330,6 +8330,24 @@ static void ath11k_mac_op_flush(struct ieee80211_hw *hw, struct ieee80211_vif *v > ath11k_mac_flush_tx_complete(ar); > } > > +static void ath11k_mac_op_flush_sta(struct ieee80211_hw *hw, > + struct ieee80211_vif *vif, CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis > + struct ieee80211_sta *sta) ERROR:CODE_INDENT: code indent should use tabs where possible WARNING:SPACE_BEFORE_TAB: please, no space before tabs > +{ > + struct ath11k_vif *arvif = (void *)vif->drv_priv; use = ath11k_vif_to_arvif(vif) > + struct ath11k *ar = hw->priv; > + struct peer_flush_params params = { > + .peer_tid_bitmap = 0xFF, > + .vdev_id = arvif->vdev_id, > + }; > + int ret = 0; unnecessary initializer that is always overwritten > + > + ret = ath11k_wmi_send_peer_flush_tids_cmd(ar, sta->addr, ¶ms); > + if (ret) > + ath11k_warn(ar->ab, "failed to flush sta (sta %pM)\n", avoid unnecessary parenthesis, and include the error code, i.e.: "failed to flush sta %pM: %d", sta->addr, ret > + sta->addr); > +} > + > static bool > ath11k_mac_has_single_legacy_rate(struct ath11k *ar, > enum nl80211_band band, > @@ -9920,6 +9938,7 @@ static const struct ieee80211_ops ath11k_ops = { > .set_bitrate_mask = ath11k_mac_op_set_bitrate_mask, > .get_survey = ath11k_mac_op_get_survey, > .flush = ath11k_mac_op_flush, > + .flush_sta = ath11k_mac_op_flush_sta, > .sta_statistics = ath11k_mac_op_sta_statistics, > CFG80211_TESTMODE_CMD(ath11k_tm_cmd) > These are just cosmetic comments. I've asked both the infrastructure and the mobile teams to validate this proposal for technical correctness. /jeff