diff options
author | John W. Linville <linville@tuxdriver.com> | 2014-07-18 12:55:45 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-07-18 12:55:45 -0400 |
commit | 7fc942722209208241b7e676e80b5e8a3efd2960 (patch) | |
tree | 0dbee495f95f0ea0c9b84c70fe7fa0cf6cd01941 /net | |
parent | 2c4db12ec469b9fcdad9f6bfd6fa20e65a563ac5 (diff) | |
parent | 8c26d458394be44e135d1c6bd4557e1c4e1a0535 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/tx.c | 20 | ||||
-rw-r--r-- | net/wireless/trace.h | 3 |
2 files changed, 12 insertions, 11 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 5214686d9fd1..1a252c606ad0 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -414,6 +414,9 @@ ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx) | |||
414 | if (ieee80211_has_order(hdr->frame_control)) | 414 | if (ieee80211_has_order(hdr->frame_control)) |
415 | return TX_CONTINUE; | 415 | return TX_CONTINUE; |
416 | 416 | ||
417 | if (ieee80211_is_probe_req(hdr->frame_control)) | ||
418 | return TX_CONTINUE; | ||
419 | |||
417 | if (tx->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL) | 420 | if (tx->local->hw.flags & IEEE80211_HW_QUEUE_CONTROL) |
418 | info->hw_queue = tx->sdata->vif.cab_queue; | 421 | info->hw_queue = tx->sdata->vif.cab_queue; |
419 | 422 | ||
@@ -463,6 +466,7 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx) | |||
463 | { | 466 | { |
464 | struct sta_info *sta = tx->sta; | 467 | struct sta_info *sta = tx->sta; |
465 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); | 468 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); |
469 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; | ||
466 | struct ieee80211_local *local = tx->local; | 470 | struct ieee80211_local *local = tx->local; |
467 | 471 | ||
468 | if (unlikely(!sta)) | 472 | if (unlikely(!sta)) |
@@ -473,6 +477,12 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx) | |||
473 | !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { | 477 | !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { |
474 | int ac = skb_get_queue_mapping(tx->skb); | 478 | int ac = skb_get_queue_mapping(tx->skb); |
475 | 479 | ||
480 | if (ieee80211_is_mgmt(hdr->frame_control) && | ||
481 | !ieee80211_is_bufferable_mmpdu(hdr->frame_control)) { | ||
482 | info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; | ||
483 | return TX_CONTINUE; | ||
484 | } | ||
485 | |||
476 | ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", | 486 | ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", |
477 | sta->sta.addr, sta->sta.aid, ac); | 487 | sta->sta.addr, sta->sta.aid, ac); |
478 | if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) | 488 | if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER) |
@@ -531,19 +541,9 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx) | |||
531 | static ieee80211_tx_result debug_noinline | 541 | static ieee80211_tx_result debug_noinline |
532 | ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) | 542 | ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) |
533 | { | 543 | { |
534 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); | ||
535 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; | ||
536 | |||
537 | if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) | 544 | if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) |
538 | return TX_CONTINUE; | 545 | return TX_CONTINUE; |
539 | 546 | ||
540 | if (ieee80211_is_mgmt(hdr->frame_control) && | ||
541 | !ieee80211_is_bufferable_mmpdu(hdr->frame_control)) { | ||
542 | if (tx->flags & IEEE80211_TX_UNICAST) | ||
543 | info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; | ||
544 | return TX_CONTINUE; | ||
545 | } | ||
546 | |||
547 | if (tx->flags & IEEE80211_TX_UNICAST) | 547 | if (tx->flags & IEEE80211_TX_UNICAST) |
548 | return ieee80211_tx_h_unicast_ps_buf(tx); | 548 | return ieee80211_tx_h_unicast_ps_buf(tx); |
549 | else | 549 | else |
diff --git a/net/wireless/trace.h b/net/wireless/trace.h index 560ed77084e9..7cc887f9da11 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h | |||
@@ -2094,7 +2094,8 @@ TRACE_EVENT(cfg80211_michael_mic_failure, | |||
2094 | MAC_ASSIGN(addr, addr); | 2094 | MAC_ASSIGN(addr, addr); |
2095 | __entry->key_type = key_type; | 2095 | __entry->key_type = key_type; |
2096 | __entry->key_id = key_id; | 2096 | __entry->key_id = key_id; |
2097 | memcpy(__entry->tsc, tsc, 6); | 2097 | if (tsc) |
2098 | memcpy(__entry->tsc, tsc, 6); | ||
2098 | ), | 2099 | ), |
2099 | TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT ", key type: %d, key id: %d, tsc: %pm", | 2100 | TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT ", key type: %d, key id: %d, tsc: %pm", |
2100 | NETDEV_PR_ARG, MAC_PR_ARG(addr), __entry->key_type, | 2101 | NETDEV_PR_ARG, MAC_PR_ARG(addr), __entry->key_type, |