Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
This commit is contained in:
@@ -2011,7 +2011,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
|
|||||||
(hwsim_flags & HWSIM_TX_STAT_ACK)) {
|
(hwsim_flags & HWSIM_TX_STAT_ACK)) {
|
||||||
if (skb->len >= 16) {
|
if (skb->len >= 16) {
|
||||||
hdr = (struct ieee80211_hdr *) skb->data;
|
hdr = (struct ieee80211_hdr *) skb->data;
|
||||||
mac80211_hwsim_monitor_ack(txi->rate_driver_data[0],
|
mac80211_hwsim_monitor_ack(data2->channel,
|
||||||
hdr->addr2);
|
hdr->addr2);
|
||||||
}
|
}
|
||||||
txi->flags |= IEEE80211_TX_STAT_ACK;
|
txi->flags |= IEEE80211_TX_STAT_ACK;
|
||||||
|
@@ -463,7 +463,6 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
|
|||||||
{
|
{
|
||||||
struct sta_info *sta = tx->sta;
|
struct sta_info *sta = tx->sta;
|
||||||
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
|
|
||||||
struct ieee80211_local *local = tx->local;
|
struct ieee80211_local *local = tx->local;
|
||||||
|
|
||||||
if (unlikely(!sta))
|
if (unlikely(!sta))
|
||||||
@@ -474,15 +473,6 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
|
|||||||
!(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) {
|
!(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER))) {
|
||||||
int ac = skb_get_queue_mapping(tx->skb);
|
int ac = skb_get_queue_mapping(tx->skb);
|
||||||
|
|
||||||
/* only deauth, disassoc and action are bufferable MMPDUs */
|
|
||||||
if (ieee80211_is_mgmt(hdr->frame_control) &&
|
|
||||||
!ieee80211_is_deauth(hdr->frame_control) &&
|
|
||||||
!ieee80211_is_disassoc(hdr->frame_control) &&
|
|
||||||
!ieee80211_is_action(hdr->frame_control)) {
|
|
||||||
info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
|
|
||||||
return TX_CONTINUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n",
|
ps_dbg(sta->sdata, "STA %pM aid %d: PS buffer for AC %d\n",
|
||||||
sta->sta.addr, sta->sta.aid, ac);
|
sta->sta.addr, sta->sta.aid, ac);
|
||||||
if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER)
|
if (tx->local->total_ps_buffered >= TOTAL_MAX_TX_BUFFER)
|
||||||
@@ -525,9 +515,22 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
|
|||||||
static ieee80211_tx_result debug_noinline
|
static ieee80211_tx_result debug_noinline
|
||||||
ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx)
|
ieee80211_tx_h_ps_buf(struct ieee80211_tx_data *tx)
|
||||||
{
|
{
|
||||||
|
struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb);
|
||||||
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx->skb->data;
|
||||||
|
|
||||||
if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED))
|
if (unlikely(tx->flags & IEEE80211_TX_PS_BUFFERED))
|
||||||
return TX_CONTINUE;
|
return TX_CONTINUE;
|
||||||
|
|
||||||
|
/* only deauth, disassoc and action are bufferable MMPDUs */
|
||||||
|
if (ieee80211_is_mgmt(hdr->frame_control) &&
|
||||||
|
!ieee80211_is_deauth(hdr->frame_control) &&
|
||||||
|
!ieee80211_is_disassoc(hdr->frame_control) &&
|
||||||
|
!ieee80211_is_action(hdr->frame_control)) {
|
||||||
|
if (tx->flags & IEEE80211_TX_UNICAST)
|
||||||
|
info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER;
|
||||||
|
return TX_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (tx->flags & IEEE80211_TX_UNICAST)
|
if (tx->flags & IEEE80211_TX_UNICAST)
|
||||||
return ieee80211_tx_h_unicast_ps_buf(tx);
|
return ieee80211_tx_h_unicast_ps_buf(tx);
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user