aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/main.c2
-rw-r--r--net/mac80211/tx.c18
2 files changed, 4 insertions, 16 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index d0dd11153a6c..1a8591b77a13 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -647,8 +647,6 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
647 647
648 spin_lock_init(&local->ack_status_lock); 648 spin_lock_init(&local->ack_status_lock);
649 idr_init(&local->ack_status_frames); 649 idr_init(&local->ack_status_frames);
650 /* preallocate at least one entry */
651 idr_pre_get(&local->ack_status_frames, GFP_KERNEL);
652 650
653 sta_info_init(local); 651 sta_info_init(local);
654 652
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 5b9602b62405..de8548bf0a7f 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -2017,24 +2017,14 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
2017 skb = skb_clone(skb, GFP_ATOMIC); 2017 skb = skb_clone(skb, GFP_ATOMIC);
2018 if (skb) { 2018 if (skb) {
2019 unsigned long flags; 2019 unsigned long flags;
2020 int id, r; 2020 int id;
2021 2021
2022 spin_lock_irqsave(&local->ack_status_lock, flags); 2022 spin_lock_irqsave(&local->ack_status_lock, flags);
2023 r = idr_get_new_above(&local->ack_status_frames, 2023 id = idr_alloc(&local->ack_status_frames, orig_skb,
2024 orig_skb, 1, &id); 2024 1, 0x10000, GFP_ATOMIC);
2025 if (r == -EAGAIN) {
2026 idr_pre_get(&local->ack_status_frames,
2027 GFP_ATOMIC);
2028 r = idr_get_new_above(&local->ack_status_frames,
2029 orig_skb, 1, &id);
2030 }
2031 if (WARN_ON(!id) || id > 0xffff) {
2032 idr_remove(&local->ack_status_frames, id);
2033 r = -ERANGE;
2034 }
2035 spin_unlock_irqrestore(&local->ack_status_lock, flags); 2025 spin_unlock_irqrestore(&local->ack_status_lock, flags);
2036 2026
2037 if (!r) { 2027 if (id >= 0) {
2038 info_id = id; 2028 info_id = id;
2039 info_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS; 2029 info_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
2040 } else if (skb_shared(skb)) { 2030 } else if (skb_shared(skb)) {