diff options
| author | David S. Miller <davem@davemloft.net> | 2013-02-19 22:24:50 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-02-19 22:24:50 -0500 |
| commit | c6b538079723efd21b5fd7e3091dc47dbd0436c4 (patch) | |
| tree | 778a14480d95c1d118c188ab69ebc482f9d8f357 | |
| parent | 4aa896c4baaab2b4f499c7434f85457f9f3d9fe4 (diff) | |
| parent | 0b7164458fc184455239ea3676af1b362df1ce1d (diff) | |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
John W. Linville says:
====================
One last batch of stragglers intended for 3.9...
For the iwlwifi pull, Johannes says:
"I hadn't expected to ask you to pull iwlwifi-next again, but I have a
number of fixes most of which I'd also send in after rc1, so here it is.
The first commit is a merge error between mac80211-next and
iwlwifi-next; in addition I have fixes for P2P scanning and MVM driver
MAC (virtual interface) management from Ilan, a CT-kill (critical
temperature) fix from Eytan, and myself fixed three different little but
annoying bugs in the MVM driver.
The only ones I might not send for -rc1 are Emmanuel's debug patch, but
OTOH it should help greatly if there are any issues, and my own time
event debugging patch that I used to find the race condition but we
decided to keep it for the future."
For the mac80211 pull, Johannes says:
"Like iwlwifi-next, this would almost be suitable for rc1.
I have a fix for station management on non-TDLS drivers, a CAB queue
crash fix for mesh, a fix for an annoying (but harmless) warning, a
tracing fix and a documentation fix. Other than that, only a few mesh
cleanups."
Along with that is a fix for memory corruption in rtlwifi, an
orinoco_usb fix to avoid allocating a DMA buffer on the stack, an a
hostap fix to return -ENOMEM instead of -1 after a memory allocation
failure. The remaining bits implement 802.11ac support for the mwifiex
driver -- I think that is still worth getting into 3.9.
Please let me know if there are problems!
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
45 files changed, 1297 insertions, 444 deletions
diff --git a/Documentation/DocBook/80211.tmpl b/Documentation/DocBook/80211.tmpl index 42e7f030cb16..284ced7a228f 100644 --- a/Documentation/DocBook/80211.tmpl +++ b/Documentation/DocBook/80211.tmpl | |||
| @@ -107,8 +107,8 @@ | |||
| 107 | !Finclude/net/cfg80211.h key_params | 107 | !Finclude/net/cfg80211.h key_params |
| 108 | !Finclude/net/cfg80211.h survey_info_flags | 108 | !Finclude/net/cfg80211.h survey_info_flags |
| 109 | !Finclude/net/cfg80211.h survey_info | 109 | !Finclude/net/cfg80211.h survey_info |
| 110 | !Finclude/net/cfg80211.h beacon_parameters | 110 | !Finclude/net/cfg80211.h cfg80211_beacon_data |
| 111 | !Finclude/net/cfg80211.h plink_actions | 111 | !Finclude/net/cfg80211.h cfg80211_ap_settings |
| 112 | !Finclude/net/cfg80211.h station_parameters | 112 | !Finclude/net/cfg80211.h station_parameters |
| 113 | !Finclude/net/cfg80211.h station_info_flags | 113 | !Finclude/net/cfg80211.h station_info_flags |
| 114 | !Finclude/net/cfg80211.h rate_info_flags | 114 | !Finclude/net/cfg80211.h rate_info_flags |
diff --git a/drivers/net/wireless/hostap/hostap_ap.c b/drivers/net/wireless/hostap/hostap_ap.c index c6ea995750db..dd9a18f8dbca 100644 --- a/drivers/net/wireless/hostap/hostap_ap.c +++ b/drivers/net/wireless/hostap/hostap_ap.c | |||
| @@ -376,7 +376,7 @@ int ap_control_add_mac(struct mac_restrictions *mac_restrictions, u8 *mac) | |||
| 376 | 376 | ||
| 377 | entry = kmalloc(sizeof(struct mac_entry), GFP_KERNEL); | 377 | entry = kmalloc(sizeof(struct mac_entry), GFP_KERNEL); |
| 378 | if (entry == NULL) | 378 | if (entry == NULL) |
| 379 | return -1; | 379 | return -ENOMEM; |
| 380 | 380 | ||
| 381 | memcpy(entry->addr, mac, ETH_ALEN); | 381 | memcpy(entry->addr, mac, ETH_ALEN); |
| 382 | 382 | ||
diff --git a/drivers/net/wireless/iwlwifi/dvm/commands.h b/drivers/net/wireless/iwlwifi/dvm/commands.h index 02c9ebb3b340..84e2c0fcfef6 100644 --- a/drivers/net/wireless/iwlwifi/dvm/commands.h +++ b/drivers/net/wireless/iwlwifi/dvm/commands.h | |||
| @@ -1403,6 +1403,7 @@ enum { | |||
| 1403 | 1403 | ||
| 1404 | #define AGG_TX_STATUS_MSK 0x00000fff /* bits 0:11 */ | 1404 | #define AGG_TX_STATUS_MSK 0x00000fff /* bits 0:11 */ |
| 1405 | #define AGG_TX_TRY_MSK 0x0000f000 /* bits 12:15 */ | 1405 | #define AGG_TX_TRY_MSK 0x0000f000 /* bits 12:15 */ |
| 1406 | #define AGG_TX_TRY_POS 12 | ||
| 1406 | 1407 | ||
| 1407 | #define AGG_TX_STATE_LAST_SENT_MSK (AGG_TX_STATE_LAST_SENT_TTL_MSK | \ | 1408 | #define AGG_TX_STATE_LAST_SENT_MSK (AGG_TX_STATE_LAST_SENT_TTL_MSK | \ |
| 1408 | AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK | \ | 1409 | AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK | \ |
diff --git a/drivers/net/wireless/iwlwifi/dvm/tt.c b/drivers/net/wireless/iwlwifi/dvm/tt.c index 67e2e1321b40..03f9bc01c0cc 100644 --- a/drivers/net/wireless/iwlwifi/dvm/tt.c +++ b/drivers/net/wireless/iwlwifi/dvm/tt.c | |||
| @@ -471,8 +471,8 @@ static void iwl_advance_tt_handler(struct iwl_priv *priv, s32 temp, bool force) | |||
| 471 | set_bit(STATUS_CT_KILL, &priv->status); | 471 | set_bit(STATUS_CT_KILL, &priv->status); |
| 472 | iwl_perform_ct_kill_task(priv, true); | 472 | iwl_perform_ct_kill_task(priv, true); |
| 473 | } else { | 473 | } else { |
| 474 | iwl_prepare_ct_kill_task(priv); | ||
| 475 | tt->state = old_state; | 474 | tt->state = old_state; |
| 475 | iwl_prepare_ct_kill_task(priv); | ||
| 476 | } | 476 | } |
| 477 | } else if (old_state == IWL_TI_CT_KILL && | 477 | } else if (old_state == IWL_TI_CT_KILL && |
| 478 | tt->state != IWL_TI_CT_KILL) { | 478 | tt->state != IWL_TI_CT_KILL) { |
diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c index d1dccb361391..6aec2df3bb27 100644 --- a/drivers/net/wireless/iwlwifi/dvm/tx.c +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c | |||
| @@ -908,6 +908,12 @@ static void iwlagn_count_agg_tx_err_status(struct iwl_priv *priv, u16 status) | |||
| 908 | } | 908 | } |
| 909 | } | 909 | } |
| 910 | 910 | ||
| 911 | static inline u32 iwlagn_get_scd_ssn(struct iwlagn_tx_resp *tx_resp) | ||
| 912 | { | ||
| 913 | return le32_to_cpup((__le32 *)&tx_resp->status + | ||
| 914 | tx_resp->frame_count) & MAX_SN; | ||
| 915 | } | ||
| 916 | |||
| 911 | static void iwl_rx_reply_tx_agg(struct iwl_priv *priv, | 917 | static void iwl_rx_reply_tx_agg(struct iwl_priv *priv, |
| 912 | struct iwlagn_tx_resp *tx_resp) | 918 | struct iwlagn_tx_resp *tx_resp) |
| 913 | { | 919 | { |
| @@ -942,9 +948,15 @@ static void iwl_rx_reply_tx_agg(struct iwl_priv *priv, | |||
| 942 | if (tx_resp->frame_count == 1) | 948 | if (tx_resp->frame_count == 1) |
| 943 | return; | 949 | return; |
| 944 | 950 | ||
| 951 | IWL_DEBUG_TX_REPLY(priv, "TXQ %d initial_rate 0x%x ssn %d frm_cnt %d\n", | ||
| 952 | agg->txq_id, | ||
| 953 | le32_to_cpu(tx_resp->rate_n_flags), | ||
| 954 | iwlagn_get_scd_ssn(tx_resp), tx_resp->frame_count); | ||
| 955 | |||
| 945 | /* Construct bit-map of pending frames within Tx window */ | 956 | /* Construct bit-map of pending frames within Tx window */ |
| 946 | for (i = 0; i < tx_resp->frame_count; i++) { | 957 | for (i = 0; i < tx_resp->frame_count; i++) { |
| 947 | u16 fstatus = le16_to_cpu(frame_status[i].status); | 958 | u16 fstatus = le16_to_cpu(frame_status[i].status); |
| 959 | u8 retry_cnt = (fstatus & AGG_TX_TRY_MSK) >> AGG_TX_TRY_POS; | ||
| 948 | 960 | ||
| 949 | if (status & AGG_TX_STATUS_MSK) | 961 | if (status & AGG_TX_STATUS_MSK) |
| 950 | iwlagn_count_agg_tx_err_status(priv, fstatus); | 962 | iwlagn_count_agg_tx_err_status(priv, fstatus); |
| @@ -952,6 +964,14 @@ static void iwl_rx_reply_tx_agg(struct iwl_priv *priv, | |||
| 952 | if (status & (AGG_TX_STATE_FEW_BYTES_MSK | | 964 | if (status & (AGG_TX_STATE_FEW_BYTES_MSK | |
| 953 | AGG_TX_STATE_ABORT_MSK)) | 965 | AGG_TX_STATE_ABORT_MSK)) |
| 954 | continue; | 966 | continue; |
| 967 | |||
| 968 | if (status & AGG_TX_STATUS_MSK || retry_cnt > 1) | ||
| 969 | IWL_DEBUG_TX_REPLY(priv, | ||
| 970 | "%d: status %s (0x%04x), try-count (0x%01x)\n", | ||
| 971 | i, | ||
| 972 | iwl_get_agg_tx_fail_reason(fstatus), | ||
