Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 247224
b: refs/heads/master
c: aac6af5
h: refs/heads/master
v: v3
  • Loading branch information
Yogesh Ashok Powar authored and John W. Linville committed Apr 28, 2011
1 parent 2078295 commit eb73f38
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e2186b7c25ef9cdb6d631c8dd6a672f41abe22d5
refs/heads/master: aac6af5534fade2b18682a0b9efad1a6c04c34c6
3 changes: 3 additions & 0 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,9 @@ struct ieee80211_local {

int tx_headroom; /* required headroom for hardware/radiotap */

/* count for keys needing tailroom space allocation */
int crypto_tx_tailroom_needed_cnt;

/* Tasklet and skb queue to process calls from IRQ mode. All frames
* added to skb_queue will be processed, but frames in
* skb_queue_unreliable may be dropped if the total length of these
Expand Down
19 changes: 17 additions & 2 deletions trunk/net/mac80211/key.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)

if (!ret) {
key->flags |= KEY_FLAG_UPLOADED_TO_HARDWARE;

if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC))
key->local->crypto_tx_tailroom_needed_cnt--;

return 0;
}

Expand Down Expand Up @@ -156,6 +160,9 @@ static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
key->conf.keyidx, sta ? sta->addr : bcast_addr, ret);

key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;

if (!(key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC))
key->local->crypto_tx_tailroom_needed_cnt++;
}

void ieee80211_key_removed(struct ieee80211_key_conf *key_conf)
Expand Down Expand Up @@ -388,8 +395,10 @@ static void __ieee80211_key_destroy(struct ieee80211_key *key)
ieee80211_aes_key_free(key->u.ccmp.tfm);
if (key->conf.cipher == WLAN_CIPHER_SUITE_AES_CMAC)
ieee80211_aes_cmac_key_free(key->u.aes_cmac.tfm);
if (key->local)
if (key->local) {
ieee80211_debugfs_key_remove(key);
key->local->crypto_tx_tailroom_needed_cnt--;
}

kfree(key);
}
Expand Down Expand Up @@ -451,6 +460,8 @@ int ieee80211_key_link(struct ieee80211_key *key,

ieee80211_debugfs_key_add(key);

key->local->crypto_tx_tailroom_needed_cnt++;

ret = ieee80211_key_enable_hw_accel(key);

mutex_unlock(&sdata->local->key_mtx);
Expand Down Expand Up @@ -492,8 +503,12 @@ void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata)

mutex_lock(&sdata->local->key_mtx);

list_for_each_entry(key, &sdata->key_list, list)
sdata->local->crypto_tx_tailroom_needed_cnt = 0;

list_for_each_entry(key, &sdata->key_list, list) {
sdata->local->crypto_tx_tailroom_needed_cnt++;
ieee80211_key_enable_hw_accel(key);
}

mutex_unlock(&sdata->local->key_mtx);
}
Expand Down
7 changes: 1 addition & 6 deletions trunk/net/mac80211/tx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1476,12 +1476,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local,
{
int tail_need = 0;

/*
* This could be optimised, devices that do full hardware
* crypto (including TKIP MMIC) need no tailroom... But we
* have no drivers for such devices currently.
*/
if (may_encrypt) {
if (may_encrypt && local->crypto_tx_tailroom_needed_cnt) {
tail_need = IEEE80211_ENCRYPT_TAILROOM;
tail_need -= skb_tailroom(skb);
tail_need = max_t(int, tail_need, 0);
Expand Down

0 comments on commit eb73f38

Please sign in to comment.