Hi John,
I have two fixes for 3.14.
Johannes fixes a long standing bug in the AMPDU status reporting.
Max fixes the listen time which was way too long and causes trouble to several APs.
Please pull - thanks
emmanuel
The following changes since commit ec6f678c74dbdb06a6a775bbb00f1d26c17c404b:
iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails (2014-02-20 19:16:27 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git master
for you to fetch changes up to d8105a24fce48b7b016e868923000871f4196e63:
iwlwifi: mvm: fix TX status for aggregated packets (2014-02-27 08:50:32 +0200)
----------------------------------------------------------------
Johannes Berg (1):
iwlwifi: mvm: fix TX status for aggregated packets
Max Stepanov (1):
iwlmvm: change of listen interval from 70 to 10
drivers/net/wireless/iwlwifi/dvm/tx.c | 14 +++++++++-----
drivers/net/wireless/iwlwifi/mvm/mvm.h | 2 +-
drivers/net/wireless/iwlwifi/mvm/tx.c | 18 +++++++++---------
3 files changed, 19 insertions(+), 15 deletions(-)
On Thu, Feb 27, 2014 at 08:53:30AM +0200, Emmanuel Grumbach wrote:
> Hi John,
>
> I have two fixes for 3.14.
> Johannes fixes a long standing bug in the AMPDU status reporting.
> Max fixes the listen time which was way too long and causes trouble to several APs.
>
> Please pull - thanks
>
> emmanuel
>
> The following changes since commit ec6f678c74dbdb06a6a775bbb00f1d26c17c404b:
>
> iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails (2014-02-20 19:16:27 +0200)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git master
>
> for you to fetch changes up to d8105a24fce48b7b016e868923000871f4196e63:
>
> iwlwifi: mvm: fix TX status for aggregated packets (2014-02-27 08:50:32 +0200)
Pulling now...
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.
On 02/27/2014 09:01 AM, Emmanuel Grumbach wrote:
>
>
> On 02/27/2014 08:53 AM, Emmanuel Grumbach wrote:
>> Hi John,
>>
>> I have two fixes for 3.14.
>> Johannes fixes a long standing bug in the AMPDU status reporting.
>> Max fixes the listen time which was way too long and causes trouble to several APs.
>>
>> Please pull - thanks
>>
>> emmanuel
>>
>> The following changes since commit ec6f678c74dbdb06a6a775bbb00f1d26c17c404b:
>>
>> iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails (2014-02-20 19:16:27 +0200)
>>
>> are available in the git repository at:
>>
>> git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git master
>>
>> for you to fetch changes up to d8105a24fce48b7b016e868923000871f4196e63:
>>
>
> Made a minor change in the commit message of one of the patches - new HEAD:082e29cb547474aa19c028d75d81bc5d873774f4.
>
>
yet another one - new HEAD: 143582c6847cb285b361804c613127c25de60ca4
On 02/27/2014 08:53 AM, Emmanuel Grumbach wrote:
> Hi John,
>
> I have two fixes for 3.14.
> Johannes fixes a long standing bug in the AMPDU status reporting.
> Max fixes the listen time which was way too long and causes trouble to several APs.
>
> Please pull - thanks
>
> emmanuel
>
> The following changes since commit ec6f678c74dbdb06a6a775bbb00f1d26c17c404b:
>
> iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails (2014-02-20 19:16:27 +0200)
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git master
>
> for you to fetch changes up to d8105a24fce48b7b016e868923000871f4196e63:
>
Made a minor change in the commit message of one of the patches - new HEAD:082e29cb547474aa19c028d75d81bc5d873774f4.
From: Johannes Berg <[email protected]>
Only the first packet is currently handled correctly, but then
all others are assumed to have failed which is problematic. Fix
this, marking them all successful instead (since if they're not
then the firmware will have transmitted them as single frames.)
This fixes the lost packet reporting.
Also do a tiny variable scoping cleanup.
Cc: <[email protected]>
Signed-off-by: Johannes Berg <[email protected]>
[Add the dvm part]
Signed-off-by: Emmanuel Grumbach <[email protected]>
---
drivers/net/wireless/iwlwifi/dvm/tx.c | 14 +++++++++-----
drivers/net/wireless/iwlwifi/mvm/tx.c | 18 +++++++++---------
2 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
index a6839df..398dd096 100644
--- a/drivers/net/wireless/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
@@ -1291,8 +1291,6 @@ int iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
struct iwl_compressed_ba_resp *ba_resp = (void *)pkt->data;
struct iwl_ht_agg *agg;
struct sk_buff_head reclaimed_skbs;
- struct ieee80211_tx_info *info;
- struct ieee80211_hdr *hdr;
struct sk_buff *skb;
int sta_id;
int tid;
@@ -1379,22 +1377,28 @@ int iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
freed = 0;
skb_queue_walk(&reclaimed_skbs, skb) {
- hdr = (struct ieee80211_hdr *)skb->data;
+ struct ieee80211_hdr *hdr = (void *)skb->data;
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
if (ieee80211_is_data_qos(hdr->frame_control))
freed++;
else
WARN_ON_ONCE(1);
- info = IEEE80211_SKB_CB(skb);
iwl_trans_free_tx_cmd(priv->trans, info->driver_data[1]);
+ memset(&info->status, 0, sizeof(info->status));
+ /* Packet was transmitted successfully, failures come as single
+ * frames because before failing a frame the firmware transmits
+ * it without aggregation at least once.
+ */
+ info->flags |= IEEE80211_TX_STAT_ACK;
+
if (freed == 1) {
/* this is the first skb we deliver in this batch */
/* put the rate scaling data there */
info = IEEE80211_SKB_CB(skb);
memset(&info->status, 0, sizeof(info->status));
- info->flags |= IEEE80211_TX_STAT_ACK;
info->flags |= IEEE80211_TX_STAT_AMPDU;
info->status.ampdu_ack_len = ba_resp->txed_2_done;
info->status.ampdu_len = ba_resp->txed;
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
index 4df12fa..76ee486 100644
--- a/drivers/net/wireless/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
@@ -822,16 +822,12 @@ int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
struct iwl_mvm_ba_notif *ba_notif = (void *)pkt->data;
struct sk_buff_head reclaimed_skbs;
struct iwl_mvm_tid_data *tid_data;
- struct ieee80211_tx_info *info;
struct ieee80211_sta *sta;
struct iwl_mvm_sta *mvmsta;
- struct ieee80211_hdr *hdr;
struct sk_buff *skb;
int sta_id, tid, freed;
-
/* "flow" corresponds to Tx queue */
u16 scd_flow = le16_to_cpu(ba_notif->scd_flow);
-
/* "ssn" is start of block-ack Tx window, corresponds to index
* (in Tx queue's circular buffer) of first TFD/frame in window */
u16 ba_resp_scd_ssn = le16_to_cpu(ba_notif->scd_ssn);
@@ -888,22 +884,26 @@ int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
freed = 0;
skb_queue_walk(&reclaimed_skbs, skb) {
- hdr = (struct ieee80211_hdr *)skb->data;
+ struct ieee80211_hdr *hdr = (void *)skb->data;
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
if (ieee80211_is_data_qos(hdr->frame_control))
freed++;
else
WARN_ON_ONCE(1);
- info = IEEE80211_SKB_CB(skb);
iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
+ memset(&info->status, 0, sizeof(info->status));
+ /* Packet was transmitted successfully, failures come as single
+ * frames because before failing a frame the firmware transmits
+ * it without aggregation at least once.
+ */
+ info->flags |= IEEE80211_TX_STAT_ACK;
+
if (freed == 1) {
/* this is the first skb we deliver in this batch */
/* put the rate scaling data there */
- info = IEEE80211_SKB_CB(skb);
- memset(&info->status, 0, sizeof(info->status));
- info->flags |= IEEE80211_TX_STAT_ACK;
info->flags |= IEEE80211_TX_STAT_AMPDU;
info->status.ampdu_ack_len = ba_notif->txed_2_done;
info->status.ampdu_len = ba_notif->txed;
--
1.8.3.2
From: Max Stepanov <[email protected]>
Some APs reject STA association request if a listen interval value exceeds
a threshold of 10. Thus, for example, Cisco APs may deny STA associations
returning status code 12 (Association denied due to reason outside the scope
of 802.11 standard) in the association response frame.
Fixing the issue by setting the default IWL_CONN_MAX_LISTEN_INTERVAL value
from 70 to 10.
Cc: <[email protected]> [3.10+]
Signed-off-by: Max Stepanov <[email protected]>
Reviewed-by: Alexander Bondar <[email protected]>
Signed-off-by: Emmanuel Grumbach <[email protected]>
---
drivers/net/wireless/iwlwifi/mvm/mvm.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index e4ead86..2b0ba1f 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -152,7 +152,7 @@ enum iwl_power_scheme {
IWL_POWER_SCHEME_LP
};
-#define IWL_CONN_MAX_LISTEN_INTERVAL 70
+#define IWL_CONN_MAX_LISTEN_INTERVAL 10
#define IWL_UAPSD_AC_INFO (IEEE80211_WMM_IE_STA_QOSINFO_AC_VO |\
IEEE80211_WMM_IE_STA_QOSINFO_AC_VI |\
IEEE80211_WMM_IE_STA_QOSINFO_AC_BK |\
--
1.8.3.2