Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
This commit is contained in:
commit
bd2a813074
@ -2594,6 +2594,9 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
|
|||||||
else
|
else
|
||||||
local->probe_req_reg--;
|
local->probe_req_reg--;
|
||||||
|
|
||||||
|
if (!local->open_count)
|
||||||
|
break;
|
||||||
|
|
||||||
ieee80211_queue_work(&local->hw, &local->reconfig_filter);
|
ieee80211_queue_work(&local->hw, &local->reconfig_filter);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1314,6 +1314,8 @@ netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb,
|
|||||||
struct net_device *dev);
|
struct net_device *dev);
|
||||||
netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *dev);
|
struct net_device *dev);
|
||||||
|
void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
|
||||||
|
struct sk_buff_head *skbs);
|
||||||
|
|
||||||
/* HT */
|
/* HT */
|
||||||
void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
|
void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata,
|
||||||
|
@ -871,8 +871,10 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
|||||||
local->hw.wiphy->cipher_suites,
|
local->hw.wiphy->cipher_suites,
|
||||||
sizeof(u32) * local->hw.wiphy->n_cipher_suites,
|
sizeof(u32) * local->hw.wiphy->n_cipher_suites,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!suites)
|
if (!suites) {
|
||||||
return -ENOMEM;
|
result = -ENOMEM;
|
||||||
|
goto fail_wiphy_register;
|
||||||
|
}
|
||||||
for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) {
|
for (r = 0; r < local->hw.wiphy->n_cipher_suites; r++) {
|
||||||
u32 suite = local->hw.wiphy->cipher_suites[r];
|
u32 suite = local->hw.wiphy->cipher_suites[r];
|
||||||
if (suite == WLAN_CIPHER_SUITE_WEP40 ||
|
if (suite == WLAN_CIPHER_SUITE_WEP40 ||
|
||||||
|
@ -917,7 +917,7 @@ int ieee80211_request_sched_scan_start(struct ieee80211_sub_if_data *sdata,
|
|||||||
struct cfg80211_sched_scan_request *req)
|
struct cfg80211_sched_scan_request *req)
|
||||||
{
|
{
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct ieee80211_sched_scan_ies sched_scan_ies;
|
struct ieee80211_sched_scan_ies sched_scan_ies = {};
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
mutex_lock(&local->mtx);
|
mutex_lock(&local->mtx);
|
||||||
|
@ -117,8 +117,8 @@ static void free_sta_work(struct work_struct *wk)
|
|||||||
|
|
||||||
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
||||||
local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
|
local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
|
||||||
__skb_queue_purge(&sta->ps_tx_buf[ac]);
|
ieee80211_purge_tx_queue(&local->hw, &sta->ps_tx_buf[ac]);
|
||||||
__skb_queue_purge(&sta->tx_filtered[ac]);
|
ieee80211_purge_tx_queue(&local->hw, &sta->tx_filtered[ac]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
@ -141,7 +141,7 @@ static void free_sta_work(struct work_struct *wk)
|
|||||||
tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
|
tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]);
|
||||||
if (!tid_tx)
|
if (!tid_tx)
|
||||||
continue;
|
continue;
|
||||||
__skb_queue_purge(&tid_tx->pending);
|
ieee80211_purge_tx_queue(&local->hw, &tid_tx->pending);
|
||||||
kfree(tid_tx);
|
kfree(tid_tx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -961,6 +961,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
|
|||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct sk_buff_head pending;
|
struct sk_buff_head pending;
|
||||||
int filtered = 0, buffered = 0, ac;
|
int filtered = 0, buffered = 0, ac;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
clear_sta_flag(sta, WLAN_STA_SP);
|
clear_sta_flag(sta, WLAN_STA_SP);
|
||||||
|
|
||||||
@ -976,12 +977,16 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
|
|||||||
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
||||||
int count = skb_queue_len(&pending), tmp;
|
int count = skb_queue_len(&pending), tmp;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sta->tx_filtered[ac].lock, flags);
|
||||||
skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
|
skb_queue_splice_tail_init(&sta->tx_filtered[ac], &pending);
|
||||||
|
spin_unlock_irqrestore(&sta->tx_filtered[ac].lock, flags);
|
||||||
tmp = skb_queue_len(&pending);
|
tmp = skb_queue_len(&pending);
|
||||||
filtered += tmp - count;
|
filtered += tmp - count;
|
||||||
count = tmp;
|
count = tmp;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sta->ps_tx_buf[ac].lock, flags);
|
||||||
skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
|
skb_queue_splice_tail_init(&sta->ps_tx_buf[ac], &pending);
|
||||||
|
spin_unlock_irqrestore(&sta->ps_tx_buf[ac].lock, flags);
|
||||||
tmp = skb_queue_len(&pending);
|
tmp = skb_queue_len(&pending);
|
||||||
buffered += tmp - count;
|
buffered += tmp - count;
|
||||||
}
|
}
|
||||||
|
@ -668,3 +668,12 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb)
|
|||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_free_txskb);
|
EXPORT_SYMBOL(ieee80211_free_txskb);
|
||||||
|
|
||||||
|
void ieee80211_purge_tx_queue(struct ieee80211_hw *hw,
|
||||||
|
struct sk_buff_head *skbs)
|
||||||
|
{
|
||||||
|
struct sk_buff *skb;
|
||||||
|
|
||||||
|
while ((skb = __skb_dequeue(skbs)))
|
||||||
|
ieee80211_free_txskb(hw, skb);
|
||||||
|
}
|
||||||
|
@ -1358,7 +1358,7 @@ static int invoke_tx_handlers(struct ieee80211_tx_data *tx)
|
|||||||
if (tx->skb)
|
if (tx->skb)
|
||||||
ieee80211_free_txskb(&tx->local->hw, tx->skb);
|
ieee80211_free_txskb(&tx->local->hw, tx->skb);
|
||||||
else
|
else
|
||||||
__skb_queue_purge(&tx->skbs);
|
ieee80211_purge_tx_queue(&tx->local->hw, &tx->skbs);
|
||||||
return -1;
|
return -1;
|
||||||
} else if (unlikely(res == TX_QUEUED)) {
|
} else if (unlikely(res == TX_QUEUED)) {
|
||||||
I802_DEBUG_INC(tx->local->tx_handlers_queued);
|
I802_DEBUG_INC(tx->local->tx_handlers_queued);
|
||||||
@ -2120,10 +2120,13 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
|||||||
*/
|
*/
|
||||||
void ieee80211_clear_tx_pending(struct ieee80211_local *local)
|
void ieee80211_clear_tx_pending(struct ieee80211_local *local)
|
||||||
{
|
{
|
||||||
|
struct sk_buff *skb;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < local->hw.queues; i++)
|
for (i = 0; i < local->hw.queues; i++) {
|
||||||
skb_queue_purge(&local->pending[i]);
|
while ((skb = skb_dequeue(&local->pending[i])) != NULL)
|
||||||
|
ieee80211_free_txskb(&local->hw, skb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1491,6 +1491,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||||
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
if (sdata->vif.type != NL80211_IFTYPE_STATION)
|
||||||
continue;
|
continue;
|
||||||
|
if (!sdata->u.mgd.associated)
|
||||||
|
continue;
|
||||||
|
|
||||||
ieee80211_send_nullfunc(local, sdata, 0);
|
ieee80211_send_nullfunc(local, sdata, 0);
|
||||||
}
|
}
|
||||||
|
@ -141,9 +141,8 @@ static const struct ieee80211_regdomain world_regdom = {
|
|||||||
.reg_rules = {
|
.reg_rules = {
|
||||||
/* IEEE 802.11b/g, channels 1..11 */
|
/* IEEE 802.11b/g, channels 1..11 */
|
||||||
REG_RULE(2412-10, 2462+10, 40, 6, 20, 0),
|
REG_RULE(2412-10, 2462+10, 40, 6, 20, 0),
|
||||||
/* IEEE 802.11b/g, channels 12..13. No HT40
|
/* IEEE 802.11b/g, channels 12..13. */
|
||||||
* channel fits here. */
|
REG_RULE(2467-10, 2472+10, 40, 6, 20,
|
||||||
REG_RULE(2467-10, 2472+10, 20, 6, 20,
|
|
||||||
NL80211_RRF_PASSIVE_SCAN |
|
NL80211_RRF_PASSIVE_SCAN |
|
||||||
NL80211_RRF_NO_IBSS),
|
NL80211_RRF_NO_IBSS),
|
||||||
/* IEEE 802.11 channel 14 - Only JP enables
|
/* IEEE 802.11 channel 14 - Only JP enables
|
||||||
|
Loading…
Reference in New Issue
Block a user