Commit ab6a44ce1da48d35fe7ec95fa068aa617bd7e8dd

Authored by John W. Linville
1 parent d2ac49fe3c

Revert "mac80211: Skip tailroom reservation for full HW-crypto devices"

This reverts commit aac6af5534fade2b18682a0b9efad1a6c04c34c6.

Conflicts:

	net/mac80211/key.c

That commit has a race that causes a warning, as documented in the thread
here:

	http://marc.info/?l=linux-wireless&m=130717684914101&w=2

Signed-off-by: John W. Linville <linville@tuxdriver.com>

Showing 3 changed files with 8 additions and 23 deletions Side-by-side Diff

net/mac80211/ieee80211_i.h
... ... @@ -775,9 +775,6 @@
775 775  
776 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 778 /* Tasklet and skb queue to process calls from IRQ mode. All frames
782 779 * added to skb_queue will be processed, but frames in
783 780 * skb_queue_unreliable may be dropped if the total length of these
... ... @@ -101,11 +101,6 @@
101 101  
102 102 if (!ret) {
103 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 104 return 0;
110 105 }
111 106  
... ... @@ -161,10 +156,6 @@
161 156 key->conf.keyidx, sta ? sta->addr : bcast_addr, ret);
162 157  
163 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 161 void ieee80211_key_removed(struct ieee80211_key_conf *key_conf)
171 162  
... ... @@ -403,10 +394,8 @@
403 394 ieee80211_aes_key_free(key->u.ccmp.tfm);
404 395 if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC)
405 396 ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm);
406   - if (key->local) {
  397 + if (key->local)
407 398 ieee80211_debugfs_key_remove(key);
408   - key->local->crypto_tx_tailroom_needed_cnt--;
409   - }
410 399  
411 400 kfree(key);
412 401 }
... ... @@ -468,8 +457,6 @@
468 457  
469 458 ieee80211_debugfs_key_add(key);
470 459  
471   - key->local->crypto_tx_tailroom_needed_cnt++;
472   -
473 460 ret = ieee80211_key_enable_hw_accel(key);
474 461  
475 462 mutex_unlock(&sdata->local->key_mtx);
476 463  
... ... @@ -511,12 +498,8 @@
511 498  
512 499 mutex_lock(&sdata->local->key_mtx);
513 500  
514   - sdata->local->crypto_tx_tailroom_needed_cnt = 0;
515   -
516   - list_for_each_entry(key, &sdata->key_list, list) {
517   - sdata->local->crypto_tx_tailroom_needed_cnt++;
  501 + list_for_each_entry(key, &sdata->key_list, list)
518 502 ieee80211_key_enable_hw_accel(key);
519   - }
520 503  
521 504 mutex_unlock(&sdata->local->key_mtx);
522 505 }
... ... @@ -1480,7 +1480,12 @@
1480 1480 {
1481 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 1489 tail_need = IEEE80211_ENCRYPT_TAILROOM;
1485 1490 tail_need -= skb_tailroom(skb);
1486 1491 tail_need = max_t(int, tail_need, 0);