diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-11-15 01:33:11 -0500 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-11-15 01:33:11 -0500 |
commit | 1bb95834bbcdc969e477a9284cf96c17a4c2616f (patch) | |
tree | 9cf66b22a611bb6bc78778c05dac72263bb45a23 /net/mac80211 | |
parent | 85345517fe6d4de27b0d6ca19fef9d28ac947c4a (diff) | |
parent | a41c73e04673b47730df682446f0d52f95e32a5b (diff) |
Merge remote branch 'airlied/drm-fixes' into drm-intel-fixes
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/debugfs_key.c | 6 | ||||
-rw-r--r-- | net/mac80211/ibss.c | 1 | ||||
-rw-r--r-- | net/mac80211/iface.c | 6 | ||||
-rw-r--r-- | net/mac80211/main.c | 13 | ||||
-rw-r--r-- | net/mac80211/rate.c | 3 |
5 files changed, 16 insertions, 13 deletions
diff --git a/net/mac80211/debugfs_key.c b/net/mac80211/debugfs_key.c index 4aa47d074a79..1243d1db5c59 100644 --- a/net/mac80211/debugfs_key.c +++ b/net/mac80211/debugfs_key.c | |||
@@ -203,9 +203,13 @@ static ssize_t key_key_read(struct file *file, char __user *userbuf, | |||
203 | size_t count, loff_t *ppos) | 203 | size_t count, loff_t *ppos) |
204 | { | 204 | { |
205 | struct ieee80211_key *key = file->private_data; | 205 | struct ieee80211_key *key = file->private_data; |
206 | int i, res, bufsize = 2 * key->conf.keylen + 2; | 206 | int i, bufsize = 2 * key->conf.keylen + 2; |
207 | char *buf = kmalloc(bufsize, GFP_KERNEL); | 207 | char *buf = kmalloc(bufsize, GFP_KERNEL); |
208 | char *p = buf; | 208 | char *p = buf; |
209 | ssize_t res; | ||
210 | |||
211 | if (!buf) | ||
212 | return -ENOMEM; | ||
209 | 213 | ||
210 | for (i = 0; i < key->conf.keylen; i++) | 214 | for (i = 0; i < key->conf.keylen; i++) |
211 | p += scnprintf(p, bufsize + buf - p, "%02x", key->conf.key[i]); | 215 | p += scnprintf(p, bufsize + buf - p, "%02x", key->conf.key[i]); |
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c index ff60c022f51d..239c4836a946 100644 --- a/net/mac80211/ibss.c +++ b/net/mac80211/ibss.c | |||
@@ -456,6 +456,7 @@ struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, | |||
456 | if (!sta) | 456 | if (!sta) |
457 | return NULL; | 457 | return NULL; |
458 | 458 | ||
459 | sta->last_rx = jiffies; | ||
459 | set_sta_flags(sta, WLAN_STA_AUTHORIZED); | 460 | set_sta_flags(sta, WLAN_STA_AUTHORIZED); |
460 | 461 | ||
461 | /* make sure mandatory rates are always added */ | 462 | /* make sure mandatory rates are always added */ |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index f9163b12c7f1..7aa85591dbe7 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -391,6 +391,9 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, | |||
391 | u32 hw_reconf_flags = 0; | 391 | u32 hw_reconf_flags = 0; |
392 | int i; | 392 | int i; |
393 | 393 | ||
394 | if (local->scan_sdata == sdata) | ||
395 | ieee80211_scan_cancel(local); | ||
396 | |||
394 | clear_bit(SDATA_STATE_RUNNING, &sdata->state); | 397 | clear_bit(SDATA_STATE_RUNNING, &sdata->state); |
395 | 398 | ||
396 | /* | 399 | /* |
@@ -523,9 +526,6 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, | |||
523 | synchronize_rcu(); | 526 | synchronize_rcu(); |
524 | skb_queue_purge(&sdata->skb_queue); | 527 | skb_queue_purge(&sdata->skb_queue); |
525 | 528 | ||
526 | if (local->scan_sdata == sdata) | ||
527 | ieee80211_scan_cancel(local); | ||
528 | |||
529 | /* | 529 | /* |
530 | * Disable beaconing here for mesh only, AP and IBSS | 530 | * Disable beaconing here for mesh only, AP and IBSS |
531 | * are already taken care of. | 531 | * are already taken care of. |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 22bc42b18991..107a0cbe52ac 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -677,10 +677,11 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | |||
677 | /* | 677 | /* |
678 | * Calculate scan IE length -- we need this to alloc | 678 | * Calculate scan IE length -- we need this to alloc |
679 | * memory and to subtract from the driver limit. It | 679 | * memory and to subtract from the driver limit. It |
680 | * includes the (extended) supported rates and HT | 680 | * includes the DS Params, (extended) supported rates, and HT |
681 | * information -- SSID is the driver's responsibility. | 681 | * information -- SSID is the driver's responsibility. |
682 | */ | 682 | */ |
683 | local->scan_ies_len = 4 + max_bitrates; /* (ext) supp rates */ | 683 | local->scan_ies_len = 4 + max_bitrates /* (ext) supp rates */ + |
684 | 3 /* DS Params */; | ||
684 | if (supp_ht) | 685 | if (supp_ht) |
685 | local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap); | 686 | local->scan_ies_len += 2 + sizeof(struct ieee80211_ht_cap); |
686 | 687 | ||
@@ -748,7 +749,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | |||
748 | hw->queues = IEEE80211_MAX_QUEUES; | 749 | hw->queues = IEEE80211_MAX_QUEUES; |
749 | 750 | ||
750 | local->workqueue = | 751 | local->workqueue = |
751 | create_singlethread_workqueue(wiphy_name(local->hw.wiphy)); | 752 | alloc_ordered_workqueue(wiphy_name(local->hw.wiphy), 0); |
752 | if (!local->workqueue) { | 753 | if (!local->workqueue) { |
753 | result = -ENOMEM; | 754 | result = -ENOMEM; |
754 | goto fail_workqueue; | 755 | goto fail_workqueue; |
@@ -962,12 +963,6 @@ static void __exit ieee80211_exit(void) | |||
962 | rc80211_minstrel_ht_exit(); | 963 | rc80211_minstrel_ht_exit(); |
963 | rc80211_minstrel_exit(); | 964 | rc80211_minstrel_exit(); |
964 | 965 | ||
965 | /* | ||
966 | * For key todo, it'll be empty by now but the work | ||
967 | * might still be scheduled. | ||
968 | */ | ||
969 | flush_scheduled_work(); | ||
970 | |||
971 | if (mesh_allocated) | 966 | if (mesh_allocated) |
972 | ieee80211s_stop(); | 967 | ieee80211s_stop(); |
973 | 968 | ||
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c index 809cf230d251..33f76993da08 100644 --- a/net/mac80211/rate.c +++ b/net/mac80211/rate.c | |||
@@ -329,6 +329,9 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata, | |||
329 | * if needed. | 329 | * if needed. |
330 | */ | 330 | */ |
331 | for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { | 331 | for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { |
332 | /* Skip invalid rates */ | ||
333 | if (info->control.rates[i].idx < 0) | ||
334 | break; | ||
332 | /* Rate masking supports only legacy rates for now */ | 335 | /* Rate masking supports only legacy rates for now */ |
333 | if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) | 336 | if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) |
334 | continue; | 337 | continue; |