diff options
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index db25fa9ef135..2cb77267f733 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -513,6 +513,8 @@ ieee80211_tx_h_select_key(struct ieee80211_tx_data *tx) | |||
513 | else if (tx->sta && (key = rcu_dereference(tx->sta->key))) | 513 | else if (tx->sta && (key = rcu_dereference(tx->sta->key))) |
514 | tx->key = key; | 514 | tx->key = key; |
515 | else if (ieee80211_is_mgmt(hdr->frame_control) && | 515 | else if (ieee80211_is_mgmt(hdr->frame_control) && |
516 | is_multicast_ether_addr(hdr->addr1) && | ||
517 | ieee80211_is_robust_mgmt_frame(hdr) && | ||
516 | (key = rcu_dereference(tx->sdata->default_mgmt_key))) | 518 | (key = rcu_dereference(tx->sdata->default_mgmt_key))) |
517 | tx->key = key; | 519 | tx->key = key; |
518 | else if ((key = rcu_dereference(tx->sdata->default_key))) | 520 | else if ((key = rcu_dereference(tx->sdata->default_key))) |
@@ -1142,13 +1144,12 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata, | |||
1142 | 1144 | ||
1143 | if (tx->sta && ieee80211_is_data_qos(hdr->frame_control) && | 1145 | if (tx->sta && ieee80211_is_data_qos(hdr->frame_control) && |
1144 | (local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION)) { | 1146 | (local->hw.flags & IEEE80211_HW_AMPDU_AGGREGATION)) { |
1145 | unsigned long flags; | ||
1146 | struct tid_ampdu_tx *tid_tx; | 1147 | struct tid_ampdu_tx *tid_tx; |
1147 | 1148 | ||
1148 | qc = ieee80211_get_qos_ctl(hdr); | 1149 | qc = ieee80211_get_qos_ctl(hdr); |
1149 | tid = *qc & IEEE80211_QOS_CTL_TID_MASK; | 1150 | tid = *qc & IEEE80211_QOS_CTL_TID_MASK; |
1150 | 1151 | ||
1151 | spin_lock_irqsave(&tx->sta->lock, flags); | 1152 | spin_lock(&tx->sta->lock); |
1152 | /* | 1153 | /* |
1153 | * XXX: This spinlock could be fairly expensive, but see the | 1154 | * XXX: This spinlock could be fairly expensive, but see the |
1154 | * comment in agg-tx.c:ieee80211_agg_tx_operational(). | 1155 | * comment in agg-tx.c:ieee80211_agg_tx_operational(). |
@@ -1173,7 +1174,7 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata, | |||
1173 | info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; | 1174 | info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING; |
1174 | __skb_queue_tail(&tid_tx->pending, skb); | 1175 | __skb_queue_tail(&tid_tx->pending, skb); |
1175 | } | 1176 | } |
1176 | spin_unlock_irqrestore(&tx->sta->lock, flags); | 1177 | spin_unlock(&tx->sta->lock); |
1177 | 1178 | ||
1178 | if (unlikely(queued)) | 1179 | if (unlikely(queued)) |
1179 | return TX_QUEUED; | 1180 | return TX_QUEUED; |