Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211

+14 -11
+1 -1
drivers/net/wireless/mac80211_hwsim.c
··· 2011 2011 (hwsim_flags & HWSIM_TX_STAT_ACK)) { 2012 2012 if (skb->len >= 16) { 2013 2013 hdr = (struct ieee80211_hdr *) skb->data; 2014 - mac80211_hwsim_monitor_ack(txi->rate_driver_data[0], 2014 + mac80211_hwsim_monitor_ack(data2->channel, 2015 2015 hdr->addr2); 2016 2016 } 2017 2017 txi->flags |= IEEE80211_TX_STAT_ACK;
+13 -10
net/mac80211/tx.c
··· 463 463 { 464 464 struct sta_info *sta = tx->sta; 465 465 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); 466 - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; 467 466 struct ieee80211_local *local = tx->local; 468 467 469 468 if (unlikely(!sta)) ··· 472 473 test_sta_flag(sta, WLAN_STA_PS_DRIVER)) && 473 474 !(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) { 474 475 int ac = skb_get_queue_mapping(tx->skb); 475 - 476 - /* only deauth, disassoc and action are bufferable MMPDUs */ 477 - if (ieee80211_is_mgmt(hdr->frame_control) && 478 - !ieee80211_is_deauth(hdr->frame_control) && 479 - !ieee80211_is_disassoc(hdr->frame_control) && 480 - !ieee80211_is_action(hdr->frame_control)) { 481 - info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; 482 - return TX_CONTINUE; 483 - } 484 476 485 477 ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n", 486 478 sta->sta.addr, sta->sta.aid, ac); ··· 515 525 static ieee80211_tx_result debug_noinline 516 526 ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx) 517 527 { 528 + struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); 529 + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data; 530 + 518 531 if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED)) 519 532 return TX_CONTINUE; 533 + 534 + /* only deauth, disassoc and action are bufferable MMPDUs */ 535 + if (ieee80211_is_mgmt(hdr->frame_control) && 536 + !ieee80211_is_deauth(hdr->frame_control) && 537 + !ieee80211_is_disassoc(hdr->frame_control) && 538 + !ieee80211_is_action(hdr->frame_control)) { 539 + if (tx->flags & IEEE80211_TX_UNICAST) 540 + info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; 541 + return TX_CONTINUE; 542 + } 520 543 521 544 if (tx->flags & IEEE80211_TX_UNICAST) 522 545 return ieee80211_tx_h_unicast_ps_buf(tx);