From: Sujith Manoharan <sujith@msujith.org>
To: John Linville <linville@tuxdriver.com>
Cc: linux-wireless@vger.kernel.org, ath9k-devel@qca.qualcomm.com
Subject: [PATCH v2 23/23] ath9k: Do not start BA when scanning
Date: Fri, 17 Oct 2014 07:40:30 +0530 [thread overview]
Message-ID: <1413511830-5536-24-git-send-email-sujith@msujith.org> (raw)
In-Reply-To: <1413511830-5536-1-git-send-email-sujith@msujith.org>
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
mac80211 currently has a race which can be hit
with this sequence:
* Start a scan operation.
* TX BA is initiated by ieee80211_start_tx_ba_session().
* Driver sets up internal state and calls
ieee80211_start_tx_ba_cb_irqsafe().
* mac80211 adds a packet to sdata->skb_queue with
type IEEE80211_SDATA_QUEUE_AGG_START.
* ieee80211_iface_work() doesn't process the
packet because scan is in progress.
* ADDBA response timer expires and the sta/tid is
torn down.
* Driver receives BA stop notification and calls
ieee80211_stop_tx_ba_cb_irqsafe().
* This is also added to the queue by mac80211.
* Now, scan finishes.
At this point, the queued up packets might be processed
if some other operation schedules the sdata work. Since
the tids have been cleaned up already, warnings are hit.
If this doesn't happen, the packets are left in the queue
until the interface is torn down.
Since initiating a BA session when scan is in progress
leads to flaky connections, especially in MCC mode, we
can drop the TX BA request. This improves connectivity
with legacy clients in MCC mode.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath9k/main.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 961a388..68c5670 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -1885,6 +1885,7 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw,
u16 tid, u16 *ssn, u8 buf_size)
{
struct ath_softc *sc = hw->priv;
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
bool flush = false;
int ret = 0;
@@ -1896,6 +1897,12 @@ static int ath9k_ampdu_action(struct ieee80211_hw *hw,
case IEEE80211_AMPDU_RX_STOP:
break;
case IEEE80211_AMPDU_TX_START:
+ if (ath9k_is_chanctx_enabled()) {
+ if (test_bit(ATH_OP_SCANNING, &common->op_flags)) {
+ ret = -EBUSY;
+ break;
+ }
+ }
ath9k_ps_wakeup(sc);
ret = ath_tx_aggr_start(sc, sta, tid, ssn);
if (!ret)
--
2.1.2
next prev parent reply other threads:[~2014-10-17 2:11 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-17 2:10 [PATCH v2 00/23] ath9k patches Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 01/23] ath9k: Use sta_state() callback Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 02/23] ath9k: Enable multi-channel properly Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 03/23] ath9k: Process beacons properly Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 04/23] ath9k: Unify reset API Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 05/23] ath9k: Set ATH_OP_HW_RESET before HW reset Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 06/23] ath9k: Disable beacon tasklet during reset Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 07/23] ath9k: Clear NoA schedule properly Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 08/23] ath9k: Use configurable timeout for flush Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 09/23] ath9k: Fix MCC flush timeout Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 10/23] ath9k: Fix offchannel " Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 11/23] ath9k: Check for pending frames properly Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 12/23] ath9k: Send AUTHORIZED event only for station mode Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 13/23] ath9k: Fix address management Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 14/23] ath9k: Add a function to check for an active GO Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 15/23] ath9k: Check for active GO in mgd_prepare_tx() Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 16/23] ath9k: Use a helper function for offchannel NoA Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 17/23] ath9k: Use a helper function to set NoA Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 18/23] ath9k: Use a helper function for bmiss Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 19/23] ath9k: Fix RoC expiration Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 20/23] ath9k: Send oneshot NoA Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 21/23] ath9k: Fix HW scan abort Sujith Manoharan
2014-10-17 2:10 ` [PATCH v2 22/23] ath9k: Improve flush() in mcc mode Sujith Manoharan
2014-10-17 2:10 ` Sujith Manoharan [this message]
2014-10-20 9:30 ` [PATCH v2 23/23] ath9k: Do not start BA when scanning Johannes Berg
2014-10-20 9:39 ` Sujith Manoharan
2014-10-20 10:38 ` Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1413511830-5536-24-git-send-email-sujith@msujith.org \
--to=sujith@msujith.org \
--cc=ath9k-devel@qca.qualcomm.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox