diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
commit | 0cb7bf61b1e9f05027de58c80f9b46a714d24e35 (patch) | |
tree | 41fb55cf62d07b425122f9a8b96412c0d8eb99c5 /net/mac80211 | |
parent | aa877175e7a9982233ed8f10cb4bfddd78d82741 (diff) | |
parent | 3eab887a55424fc2c27553b7bfe32330df83f7b8 (diff) |
Merge branch 'linus' into smp/hotplug
Apply upstream changes to avoid conflicts with pending patches.
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/cfg.c | 2 | ||||
-rw-r--r-- | net/mac80211/driver-ops.h | 2 | ||||
-rw-r--r-- | net/mac80211/mesh.c | 10 | ||||
-rw-r--r-- | net/mac80211/rx.c | 2 | ||||
-rw-r--r-- | net/mac80211/status.c | 14 | ||||
-rw-r--r-- | net/mac80211/tx.c | 6 |
6 files changed, 19 insertions, 17 deletions
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 47e99ab8d97a..543b1d4fc33d 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
@@ -869,7 +869,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev) | |||
869 | 869 | ||
870 | /* free all potentially still buffered bcast frames */ | 870 | /* free all potentially still buffered bcast frames */ |
871 | local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf); | 871 | local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps.bc_buf); |
872 | skb_queue_purge(&sdata->u.ap.ps.bc_buf); | 872 | ieee80211_purge_tx_queue(&local->hw, &sdata->u.ap.ps.bc_buf); |
873 | 873 | ||
874 | mutex_lock(&local->mtx); | 874 | mutex_lock(&local->mtx); |
875 | ieee80211_vif_copy_chanctx_to_vlans(sdata, true); | 875 | ieee80211_vif_copy_chanctx_to_vlans(sdata, true); |
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index 184473c257eb..ba5fc1f01e53 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h | |||
@@ -1094,7 +1094,7 @@ static inline u32 drv_get_expected_throughput(struct ieee80211_local *local, | |||
1094 | 1094 | ||
1095 | trace_drv_get_expected_throughput(sta); | 1095 | trace_drv_get_expected_throughput(sta); |
1096 | if (local->ops->get_expected_throughput) | 1096 | if (local->ops->get_expected_throughput) |
1097 | ret = local->ops->get_expected_throughput(sta); | 1097 | ret = local->ops->get_expected_throughput(&local->hw, sta); |
1098 | trace_drv_return_u32(local, ret); | 1098 | trace_drv_return_u32(local, ret); |
1099 | 1099 | ||
1100 | return ret; | 1100 | return ret; |
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index c66411df9863..42120d965263 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c | |||
@@ -881,20 +881,22 @@ void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata) | |||
881 | 881 | ||
882 | netif_carrier_off(sdata->dev); | 882 | netif_carrier_off(sdata->dev); |
883 | 883 | ||
884 | /* flush STAs and mpaths on this iface */ | ||
885 | sta_info_flush(sdata); | ||
886 | mesh_path_flush_by_iface(sdata); | ||
887 | |||
884 | /* stop the beacon */ | 888 | /* stop the beacon */ |
885 | ifmsh->mesh_id_len = 0; | 889 | ifmsh->mesh_id_len = 0; |
886 | sdata->vif.bss_conf.enable_beacon = false; | 890 | sdata->vif.bss_conf.enable_beacon = false; |
887 | clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); | 891 | clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); |
888 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); | 892 | ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED); |
893 | |||
894 | /* remove beacon */ | ||
889 | bcn = rcu_dereference_protected(ifmsh->beacon, | 895 | bcn = rcu_dereference_protected(ifmsh->beacon, |
890 | lockdep_is_held(&sdata->wdev.mtx)); | 896 | lockdep_is_held(&sdata->wdev.mtx)); |
891 | RCU_INIT_POINTER(ifmsh->beacon, NULL); | 897 | RCU_INIT_POINTER(ifmsh->beacon, NULL); |
892 | kfree_rcu(bcn, rcu_head); | 898 | kfree_rcu(bcn, rcu_head); |
893 | 899 | ||
894 | /* flush STAs and mpaths on this iface */ | ||
895 | sta_info_flush(sdata); | ||
896 | mesh_path_flush_by_iface(sdata); | ||
897 | |||
898 | /* free all potentially still buffered group-addressed frames */ | 900 | /* free all potentially still buffered group-addressed frames */ |
899 | local->total_ps_buffered -= skb_queue_len(&ifmsh->ps.bc_buf); | 901 | local->total_ps_buffered -= skb_queue_len(&ifmsh->ps.bc_buf); |
900 | skb_queue_purge(&ifmsh->ps.bc_buf); | 902 | skb_queue_purge(&ifmsh->ps.bc_buf); |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 2e8a9024625a..9dce3b157908 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -1268,7 +1268,7 @@ static void sta_ps_start(struct sta_info *sta) | |||
1268 | for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) { | 1268 | for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) { |
1269 | struct txq_info *txqi = to_txq_info(sta->sta.txq[tid]); | 1269 | struct txq_info *txqi = to_txq_info(sta->sta.txq[tid]); |
1270 | 1270 | ||
1271 | if (!txqi->tin.backlog_packets) | 1271 | if (txqi->tin.backlog_packets) |
1272 | set_bit(tid, &sta->txq_buffered_tids); | 1272 | set_bit(tid, &sta->txq_buffered_tids); |
1273 | else | 1273 | else |
1274 | clear_bit(tid, &sta->txq_buffered_tids); | 1274 | clear_bit(tid, &sta->txq_buffered_tids); |
diff --git a/net/mac80211/status.c b/net/mac80211/status.c index c6d5c724e032..a2a68269675d 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c | |||
@@ -771,6 +771,13 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
771 | clear_sta_flag(sta, WLAN_STA_SP); | 771 | clear_sta_flag(sta, WLAN_STA_SP); |
772 | 772 | ||
773 | acked = !!(info->flags & IEEE80211_TX_STAT_ACK); | 773 | acked = !!(info->flags & IEEE80211_TX_STAT_ACK); |
774 | |||
775 | /* mesh Peer Service Period support */ | ||
776 | if (ieee80211_vif_is_mesh(&sta->sdata->vif) && | ||
777 | ieee80211_is_data_qos(fc)) | ||
778 | ieee80211_mpsp_trigger_process( | ||
779 | ieee80211_get_qos_ctl(hdr), sta, true, acked); | ||
780 | |||
774 | if (!acked && test_sta_flag(sta, WLAN_STA_PS_STA)) { | 781 | if (!acked && test_sta_flag(sta, WLAN_STA_PS_STA)) { |
775 | /* | 782 | /* |
776 | * The STA is in power save mode, so assume | 783 | * The STA is in power save mode, so assume |
@@ -781,13 +788,6 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
781 | return; | 788 | return; |
782 | } | 789 | } |
783 | 790 | ||
784 | /* mesh Peer Service Period support */ | ||
785 | if (ieee80211_vif_is_mesh(&sta->sdata->vif) && | ||
786 | ieee80211_is_data_qos(fc)) | ||
787 | ieee80211_mpsp_trigger_process( | ||
788 | ieee80211_get_qos_ctl(hdr), | ||
789 | sta, true, acked); | ||
790 | |||
791 | if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) && | 791 | if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) && |
792 | (ieee80211_is_data(hdr->frame_control)) && | 792 | (ieee80211_is_data(hdr->frame_control)) && |
793 | (rates_idx != -1)) | 793 | (rates_idx != -1)) |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 91461c415525..502396694f47 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -368,7 +368,7 @@ static void purge_old_ps_buffers(struct ieee80211_local *local) | |||
368 | skb = skb_dequeue(&ps->bc_buf); | 368 | skb = skb_dequeue(&ps->bc_buf); |
369 | if (skb) { | 369 | if (skb) { |
370 | purged++; | 370 | purged++; |
371 | dev_kfree_skb(skb); | 371 | ieee80211_free_txskb(&local->hw, skb); |
372 | } | 372 | } |
373 | total += skb_queue_len(&ps->bc_buf); | 373 | total += skb_queue_len(&ps->bc_buf); |
374 | } | 374 | } |
@@ -451,7 +451,7 @@ ieee80211_tx_h_multicast_ps_buf(struct ieee80211_tx_data *tx) | |||
451 | if (skb_queue_len(&ps->bc_buf) >= AP_MAX_BC_BUFFER) { | 451 | if (skb_queue_len(&ps->bc_buf) >= AP_MAX_BC_BUFFER) { |
452 | ps_dbg(tx->sdata, | 452 | ps_dbg(tx->sdata, |
453 | "BC TX buffer full - dropping the oldest frame\n"); | 453 | "BC TX buffer full - dropping the oldest frame\n"); |
454 | dev_kfree_skb(skb_dequeue(&ps->bc_buf)); | 454 | ieee80211_free_txskb(&tx->local->hw, skb_dequeue(&ps->bc_buf)); |
455 | } else | 455 | } else |
456 | tx->local->total_ps_buffered++; | 456 | tx->local->total_ps_buffered++; |
457 | 457 | ||
@@ -4275,7 +4275,7 @@ ieee80211_get_buffered_bc(struct ieee80211_hw *hw, | |||
4275 | sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev); | 4275 | sdata = IEEE80211_DEV_TO_SUB_IF(skb->dev); |
4276 | if (!ieee80211_tx_prepare(sdata, &tx, NULL, skb)) | 4276 | if (!ieee80211_tx_prepare(sdata, &tx, NULL, skb)) |
4277 | break; | 4277 | break; |
4278 | dev_kfree_skb_any(skb); | 4278 | ieee80211_free_txskb(hw, skb); |
4279 | } | 4279 | } |
4280 | 4280 | ||
4281 | info = IEEE80211_SKB_CB(skb); | 4281 | info = IEEE80211_SKB_CB(skb); |