diff options
author | Ivo van Doorn <ivdoorn@gmail.com> | 2009-08-18 13:54:23 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-20 11:36:05 -0400 |
commit | afa620429ac6a636246f85d97cf205d6533e7fcb (patch) | |
tree | 64cb5eb25c4934dea5be320c29fced7bab51b3dc /drivers/net/wireless/rt2x00 | |
parent | ad002395fd230528281083f4be71855ed7e35b04 (diff) |
rt2x00: configure_filter() callback is allowed to sleep
The configure_filter() callback function no longer needs
to be atomic. Remove the scheduled work structure and
call into the driver configure_filter() directly.
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00mac.c | 5 |
3 files changed, 1 insertions, 15 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 39d7d9baafdd..ad70946c3b5f 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -826,7 +826,6 @@ struct rt2x00_dev { | |||
826 | * due to RTNL locking requirements. | 826 | * due to RTNL locking requirements. |
827 | */ | 827 | */ |
828 | struct work_struct intf_work; | 828 | struct work_struct intf_work; |
829 | struct work_struct filter_work; | ||
830 | 829 | ||
831 | /* | 830 | /* |
832 | * Data queue arrays for RX, TX and Beacon. | 831 | * Data queue arrays for RX, TX and Beacon. |
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index 9ab70e435b5d..16b560a661e3 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -118,14 +118,6 @@ void rt2x00lib_toggle_rx(struct rt2x00_dev *rt2x00dev, enum dev_state state) | |||
118 | rt2x00link_start_tuner(rt2x00dev); | 118 | rt2x00link_start_tuner(rt2x00dev); |
119 | } | 119 | } |
120 | 120 | ||
121 | static void rt2x00lib_packetfilter_scheduled(struct work_struct *work) | ||
122 | { | ||
123 | struct rt2x00_dev *rt2x00dev = | ||
124 | container_of(work, struct rt2x00_dev, filter_work); | ||
125 | |||
126 | rt2x00dev->ops->lib->config_filter(rt2x00dev, rt2x00dev->packet_filter); | ||
127 | } | ||
128 | |||
129 | static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac, | 121 | static void rt2x00lib_intf_scheduled_iter(void *data, u8 *mac, |
130 | struct ieee80211_vif *vif) | 122 | struct ieee80211_vif *vif) |
131 | { | 123 | { |
@@ -859,7 +851,6 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev) | |||
859 | * Initialize configuration work. | 851 | * Initialize configuration work. |
860 | */ | 852 | */ |
861 | INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled); | 853 | INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled); |
862 | INIT_WORK(&rt2x00dev->filter_work, rt2x00lib_packetfilter_scheduled); | ||
863 | 854 | ||
864 | /* | 855 | /* |
865 | * Allocate queue array. | 856 | * Allocate queue array. |
@@ -907,7 +898,6 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) | |||
907 | /* | 898 | /* |
908 | * Stop all work. | 899 | * Stop all work. |
909 | */ | 900 | */ |
910 | cancel_work_sync(&rt2x00dev->filter_work); | ||
911 | cancel_work_sync(&rt2x00dev->intf_work); | 901 | cancel_work_sync(&rt2x00dev->intf_work); |
912 | 902 | ||
913 | /* | 903 | /* |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index 3011aea4fead..967d3b55c897 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
@@ -430,10 +430,7 @@ void rt2x00mac_configure_filter(struct ieee80211_hw *hw, | |||
430 | return; | 430 | return; |
431 | rt2x00dev->packet_filter = *total_flags; | 431 | rt2x00dev->packet_filter = *total_flags; |
432 | 432 | ||
433 | if (!test_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags)) | 433 | rt2x00dev->ops->lib->config_filter(rt2x00dev, *total_flags); |
434 | rt2x00dev->ops->lib->config_filter(rt2x00dev, *total_flags); | ||
435 | else | ||
436 | ieee80211_queue_work(rt2x00dev->hw, &rt2x00dev->filter_work); | ||
437 | } | 434 | } |
438 | EXPORT_SYMBOL_GPL(rt2x00mac_configure_filter); | 435 | EXPORT_SYMBOL_GPL(rt2x00mac_configure_filter); |
439 | 436 | ||