diff options
Diffstat (limited to 'net/mac80211/main.c')
-rw-r--r-- | net/mac80211/main.c | 17 |
1 files changed, 1 insertions, 16 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 2bdd454e8bcf..38b3468bc515 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -34,8 +34,6 @@ | |||
34 | #include "cfg.h" | 34 | #include "cfg.h" |
35 | #include "debugfs.h" | 35 | #include "debugfs.h" |
36 | 36 | ||
37 | static struct lock_class_key ieee80211_rx_skb_queue_class; | ||
38 | |||
39 | void ieee80211_configure_filter(struct ieee80211_local *local) | 37 | void ieee80211_configure_filter(struct ieee80211_local *local) |
40 | { | 38 | { |
41 | u64 mc; | 39 | u64 mc; |
@@ -613,21 +611,12 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, | |||
613 | 611 | ||
614 | mutex_init(&local->key_mtx); | 612 | mutex_init(&local->key_mtx); |
615 | spin_lock_init(&local->filter_lock); | 613 | spin_lock_init(&local->filter_lock); |
614 | spin_lock_init(&local->rx_path_lock); | ||
616 | spin_lock_init(&local->queue_stop_reason_lock); | 615 | spin_lock_init(&local->queue_stop_reason_lock); |
617 | 616 | ||
618 | INIT_LIST_HEAD(&local->chanctx_list); | 617 | INIT_LIST_HEAD(&local->chanctx_list); |
619 | mutex_init(&local->chanctx_mtx); | 618 | mutex_init(&local->chanctx_mtx); |
620 | 619 | ||
621 | /* | ||
622 | * The rx_skb_queue is only accessed from tasklets, | ||
623 | * but other SKB queues are used from within IRQ | ||
624 | * context. Therefore, this one needs a different | ||
625 | * locking class so our direct, non-irq-safe use of | ||
626 | * the queue's lock doesn't throw lockdep warnings. | ||
627 | */ | ||
628 | skb_queue_head_init_class(&local->rx_skb_queue, | ||
629 | &ieee80211_rx_skb_queue_class); | ||
630 | |||
631 | INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); | 620 | INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); |
632 | 621 | ||
633 | INIT_WORK(&local->restart_work, ieee80211_restart_work); | 622 | INIT_WORK(&local->restart_work, ieee80211_restart_work); |
@@ -707,9 +696,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) | |||
707 | return -EINVAL; | 696 | return -EINVAL; |
708 | #endif | 697 | #endif |
709 | 698 | ||
710 | if ((hw->flags & IEEE80211_HW_SCAN_WHILE_IDLE) && !local->ops->hw_scan) | ||
711 | return -EINVAL; | ||
712 | |||
713 | if (!local->use_chanctx) { | 699 | if (!local->use_chanctx) { |
714 | for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) { | 700 | for (i = 0; i < local->hw.wiphy->n_iface_combinations; i++) { |
715 | const struct ieee80211_iface_combination *comb; | 701 | const struct ieee80211_iface_combination *comb; |
@@ -1089,7 +1075,6 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw) | |||
1089 | wiphy_warn(local->hw.wiphy, "skb_queue not empty\n"); | 1075 | wiphy_warn(local->hw.wiphy, "skb_queue not empty\n"); |
1090 | skb_queue_purge(&local->skb_queue); | 1076 | skb_queue_purge(&local->skb_queue); |
1091 | skb_queue_purge(&local->skb_queue_unreliable); | 1077 | skb_queue_purge(&local->skb_queue_unreliable); |
1092 | skb_queue_purge(&local->rx_skb_queue); | ||
1093 | 1078 | ||
1094 | destroy_workqueue(local->workqueue); | 1079 | destroy_workqueue(local->workqueue); |
1095 | wiphy_unregister(local->hw.wiphy); | 1080 | wiphy_unregister(local->hw.wiphy); |