59 lines
2.0 KiB
Diff
59 lines
2.0 KiB
Diff
From sgruszka@redhat.com Mon Jun 20 10:14:55 2011
|
|
From: Stanislaw Gruszka <sgruszka@redhat.com>
|
|
To: kernel@lists.fedoraproject.org
|
|
Subject: [PATCH 2.6.35 2/3] iwlagn: fix "Received BA when not expected"
|
|
Date: Mon, 20 Jun 2011 16:15:13 +0200
|
|
Message-Id: <1308579314-19348-3-git-send-email-sgruszka@redhat.com>
|
|
|
|
commit bfd36103ec26599557c2bd3225a1f1c9267f8fcb upstream.
|
|
|
|
Need to use broadcast sta_id for management frames, otherwise we broke
|
|
BA session in the firmware and get messages like that:
|
|
|
|
"Received BA when not expected"
|
|
|
|
or (on older kernels):
|
|
|
|
"BA scd_flow 0 does not match txq_id 10"
|
|
|
|
This fix regression introduced in 2.6.35 during station management
|
|
code rewrite by:
|
|
|
|
commit 2a87c26bbe9587baeb9e56d3ce0b4971bd777643
|
|
Author: Johannes Berg <johannes.berg@intel.com>
|
|
Date: Fri Apr 30 11:30:45 2010 -0700
|
|
|
|
iwlwifi: use iwl_find_station less
|
|
|
|
Patch partially resolve:
|
|
https://bugzilla.kernel.org/show_bug.cgi?id=16691
|
|
However, there are still 11n performance problems on 4965 and 5xxx
|
|
devices that need to be investigated.
|
|
|
|
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
|
|
---
|
|
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 5 +++--
|
|
1 files changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
|
|
index cf64575..6df61b4 100644
|
|
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
|
|
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
|
|
@@ -548,10 +548,11 @@ int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
|
|
|
|
hdr_len = ieee80211_hdrlen(fc);
|
|
|
|
- /* Find index into station table for destination station */
|
|
- if (!info->control.sta)
|
|
+ /* For management frames use broadcast id to do not break aggregation */
|
|
+ if (!ieee80211_is_data(fc) || !info->control.sta)
|
|
sta_id = priv->hw_params.bcast_sta_id;
|
|
else
|
|
+ /* Find index into station table for destination station */
|
|
sta_id = iwl_sta_id(info->control.sta);
|
|
if (sta_id == IWL_INVALID_STATION) {
|
|
IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n",
|
|
--
|
|
1.7.1
|
|
|