diff options
Diffstat (limited to 'net/mac80211')
| -rw-r--r-- | net/mac80211/ibss.c | 6 | ||||
| -rw-r--r-- | net/mac80211/ieee80211_i.h | 3 | ||||
| -rw-r--r-- | net/mac80211/iface.c | 4 | ||||
| -rw-r--r-- | net/mac80211/key.c | 21 | ||||
| -rw-r--r-- | net/mac80211/mlme.c | 6 | ||||
| -rw-r--r-- | net/mac80211/tx.c | 7 |
6 files changed, 16 insertions, 31 deletions
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c index 421eaa6b0c2b..56c24cabf26d 100644 --- a/net/mac80211/ibss.c +++ b/net/mac80211/ibss.c | |||
| @@ -965,6 +965,10 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) | |||
| 965 | 965 | ||
| 966 | mutex_lock(&sdata->u.ibss.mtx); | 966 | mutex_lock(&sdata->u.ibss.mtx); |
| 967 | 967 | ||
| 968 | sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; | ||
| 969 | memset(sdata->u.ibss.bssid, 0, ETH_ALEN); | ||
| 970 | sdata->u.ibss.ssid_len = 0; | ||
| 971 | |||
| 968 | active_ibss = ieee80211_sta_active_ibss(sdata); | 972 | active_ibss = ieee80211_sta_active_ibss(sdata); |
| 969 | 973 | ||
| 970 | if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) { | 974 | if (!active_ibss && !is_zero_ether_addr(ifibss->bssid)) { |
| @@ -999,8 +1003,6 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) | |||
| 999 | kfree_skb(skb); | 1003 | kfree_skb(skb); |
| 1000 | 1004 | ||
| 1001 | skb_queue_purge(&sdata->skb_queue); | 1005 | skb_queue_purge(&sdata->skb_queue); |
| 1002 | memset(sdata->u.ibss.bssid, 0, ETH_ALEN); | ||
| 1003 | sdata->u.ibss.ssid_len = 0; | ||
| 1004 | 1006 | ||
| 1005 | del_timer_sync(&sdata->u.ibss.timer); | 1007 | del_timer_sync(&sdata->u.ibss.timer); |
| 1006 | 1008 | ||
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 2025af52b195..090b0ec1e056 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
| @@ -775,9 +775,6 @@ struct ieee80211_local { | |||
| 775 | 775 | ||
| 776 | int tx_headroom; /* required headroom for hardware/radiotap */ | 776 | int tx_headroom; /* required headroom for hardware/radiotap */ |
| 777 | 777 | ||
| 778 | /* count for keys needing tailroom space allocation */ | ||
| 779 | int crypto_tx_tailroom_needed_cnt; | ||
| 780 | |||
| 781 | /* Tasklet and skb queue to process calls from IRQ mode. All frames | 778 | /* Tasklet and skb queue to process calls from IRQ mode. All frames |
| 782 | * added to skb_queue will be processed, but frames in | 779 | * added to skb_queue will be processed, but frames in |
| 783 | * skb_queue_unreliable may be dropped if the total length of these | 780 | * skb_queue_unreliable may be dropped if the total length of these |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 49d4f869e0bc..dee30aea9ab3 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
| @@ -1145,6 +1145,10 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, | |||
| 1145 | + IEEE80211_ENCRYPT_HEADROOM; | 1145 | + IEEE80211_ENCRYPT_HEADROOM; |
| 1146 | ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM; | 1146 | ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM; |
| 1147 | 1147 | ||
| 1148 | ret = dev_alloc_name(ndev, ndev->name); | ||
| 1149 | if (ret < 0) | ||
| 1150 | goto fail; | ||
| 1151 | |||
| 1148 | ieee80211_assign_perm_addr(local, ndev, type); | 1152 | ieee80211_assign_perm_addr(local, ndev, type); |
| 1149 | memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); | 1153 | memcpy(ndev->dev_addr, ndev->perm_addr, ETH_ALEN); |
| 1150 | SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); | 1154 | SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); |
diff --git a/net/mac80211/key.c b/net/mac80211/key.c index 31afd712930d..f825e2f0a57e 100644 --- a/net/mac80211/key.c +++ b/net/mac80211/key.c | |||
| @@ -101,11 +101,6 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key) | |||
| 101 | 101 | ||
| 102 | if (!ret) { | 102 | if (!ret) { |
| 103 | key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE; | 103 | key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE; |
| 104 | |||
| 105 | if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || | ||
| 106 | (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))) | ||
| 107 | key->local->crypto_tx_tailroom_needed_cnt--; | ||
| 108 | |||
| 109 | return 0; | 104 | return 0; |
| 110 | } | 105 | } |
| 111 | 106 | ||
| @@ -161,10 +156,6 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key) | |||
| 161 | key->conf.keyidx, sta ? sta->addr : bcast_addr, ret); | 156 | key->conf.keyidx, sta ? sta->addr : bcast_addr, ret); |
| 162 | 157 | ||
| 163 | key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; | 158 | key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE; |
| 164 | |||
| 165 | if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) || | ||
| 166 | (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))) | ||
| 167 | key->local->crypto_tx_tailroom_needed_cnt++; | ||
| 168 | } | 159 | } |
| 169 | 160 | ||
| 170 | void ieee80211_key_removed(struct ieee80211_key_conf *key_conf) | 161 | void ieee80211_key_removed(struct ieee80211_key_conf *key_conf) |
| @@ -403,10 +394,8 @@ static void __ieee80211_key_destroy(struct ieee80211_key *key) | |||
| 403 | ieee80211_aes_key_free(key->u.ccmp.tfm); | 394 | ieee80211_aes_key_free(key->u.ccmp.tfm); |
| 404 | if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC) | 395 | if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC) |
| 405 | ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm); | 396 | ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm); |
| 406 | if (key->local) { | 397 | if (key->local) |
| 407 | ieee80211_debugfs_key_remove(key); | 398 | ieee80211_debugfs_key_remove(key); |
| 408 | key->local->crypto_tx_tailroom_needed_cnt--; | ||
| 409 | } | ||
| 410 | 399 | ||
| 411 | kfree(key); | 400 | kfree(key); |
| 412 | } | 401 | } |
| @@ -468,8 +457,6 @@ int ieee80211_key_link(struct ieee80211_key *key, | |||
| 468 | 457 | ||
| 469 | ieee80211_debugfs_key_add(key); | 458 | ieee80211_debugfs_key_add(key); |
| 470 | 459 | ||
| 471 | key->local->crypto_tx_tailroom_needed_cnt++; | ||
| 472 | |||
| 473 | ret = ieee80211_key_enable_hw_accel(key); | 460 | ret = ieee80211_key_enable_hw_accel(key); |
| 474 | 461 | ||
| 475 | mutex_unlock(&sdata->local->key_mtx); | 462 | mutex_unlock(&sdata->local->key_mtx); |
| @@ -511,12 +498,8 @@ void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata) | |||
| 511 | 498 | ||
| 512 | mutex_lock(&sdata->local->key_mtx); | 499 | mutex_lock(&sdata->local->key_mtx); |
| 513 | 500 | ||
| 514 | sdata->local->crypto_tx_tailroom_needed_cnt = 0; | 501 | list_for_each_entry(key, &sdata->key_list, list) |
| 515 | |||
| 516 | list_for_each_entry(key, &sdata->key_list, list) { | ||
| 517 | sdata->local->crypto_tx_tailroom_needed_cnt++; | ||
| 518 | ieee80211_key_enable_hw_accel(key); | 502 | ieee80211_key_enable_hw_accel(key); |
| 519 | } | ||
| 520 | 503 | ||
| 521 | mutex_unlock(&sdata->local->key_mtx); | 504 | mutex_unlock(&sdata->local->key_mtx); |
| 522 | } | 505 | } |
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 456cccf26b51..d595265d6c22 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -232,9 +232,6 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata, | |||
| 232 | WARN_ON(!ieee80211_set_channel_type(local, sdata, channel_type)); | 232 | WARN_ON(!ieee80211_set_channel_type(local, sdata, channel_type)); |
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | ieee80211_stop_queues_by_reason(&sdata->local->hw, | ||
| 236 | IEEE80211_QUEUE_STOP_REASON_CSA); | ||
| 237 | |||
| 238 | /* channel_type change automatically detected */ | 235 | /* channel_type change automatically detected */ |
| 239 | ieee80211_hw_config(local, 0); | 236 | ieee80211_hw_config(local, 0); |
| 240 | 237 | ||
| @@ -248,9 +245,6 @@ static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata, | |||
| 248 | rcu_read_unlock(); | 245 | rcu_read_unlock(); |
| 249 | } | 246 | } |
| 250 | 247 | ||
| 251 | ieee80211_wake_queues_by_reason(&sdata->local->hw, | ||
| 252 | IEEE80211_QUEUE_STOP_REASON_CSA); | ||
| 253 | |||
| 254 | ht_opmode = le16_to_cpu(hti->operation_mode); | 248 | ht_opmode = le16_to_cpu(hti->operation_mode); |
| 255 | 249 | ||
| 256 | /* if bss configuration changed store the new one */ | 250 | /* if bss configuration changed store the new one */ |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 64e0f7587e6d..3104c844b544 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
| @@ -1480,7 +1480,12 @@ static int ieee80211_skb_resize(struct ieee80211_local *local, | |||
| 1480 | { | 1480 | { |
| 1481 | int tail_need = 0; | 1481 | int tail_need = 0; |
| 1482 | 1482 | ||
| 1483 | if (may_encrypt && local->crypto_tx_tailroom_needed_cnt) { | 1483 | /* |
| 1484 | * This could be optimised, devices that do full hardware | ||
| 1485 | * crypto (including TKIP MMIC) need no tailroom... But we | ||
| 1486 | * have no drivers for such devices currently. | ||
| 1487 | */ | ||
| 1488 | if (may_encrypt) { | ||
| 1484 | tail_need = IEEE80211_ENCRYPT_TAILROOM; | 1489 | tail_need = IEEE80211_ENCRYPT_TAILROOM; |
| 1485 | tail_need -= skb_tailroom(skb); | 1490 | tail_need -= skb_tailroom(skb); |
| 1486 | tail_need = max_t(int, tail_need, 0); | 1491 | tail_need = max_t(int, tail_need, 0); |
