staging: rtl8192u: Use system_wq
PATCH 2/2 staging: rtl8192u: Use system_wq
With conccurency managed workqueues, use of dedicated workqueues can be replaced with system_wq. Removed wq by using system_wq.
There are multiple work items per wq (viz. softmac_scan_wq, associate_[retry/complete/procedure]_wq,start_ibss_wq and wx_sync_scan_wq) and different wqs need not be be ordered. Hence, concurrency can be increased by switching to system_wq.
Work items are cancelled in ieee80211_stop_protocol so it is guaranteed that no work is in flight by the time exit path runs.
Some other work items are also cancelled in ieee80211_softmac_stop_scan( softmac_scan_wq) and rtl819x_ifsilentreset(associate_retry_wq).
Signed-off-by Bhaktipriya Shridhar <[email protected]>
--- drivers/staging/rtl8192u/ieee80211/ieee80211.h | 1 - .../staging/rtl8192u/ieee80211/ieee80211_softmac.c | 21 +++++++++++---------- .../rtl8192u/ieee80211/ieee80211_softmac_wx.c | 2 +- drivers/staging/rtl8192u/r8192U_core.c | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-)
drivers/staging/rtl8192u/ieee80211/ieee80211.h +0 -1
@@ -1887,7 +1887,6 @@ struct ieee80211_device {struct delayed_work associate_retry_wq;struct delayed_work start_ibss_wq;struct work_struct wx_sync_scan_wq; -struct workqueue_struct *wq;// Qos related. Added by Annie, 2005-11-01. //STA_QOS StaQos;
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +11 -10
@@ -515,7 +515,7 @@ static void ieee80211_softmac_scan_wq(struct work_struct *work)ieee80211_send_probe_requests (ieee); -queue_delayed_work (ieee->wq, &ieee->softmac_scan_wq,IEEE80211_SOFTMAC_SCAN_TIME ); +schedule_delayed_work (&ieee->softmac_scan_wq,IEEE80211_SOFTMAC_SCAN_TIME );up (&ieee->scan_sem);return ;
@@ -614,7 +614,7 @@ static void ieee80211_start_scan(struct ieee80211_device *ieee)if (ieee->softmac_features &IEEE_SOFTMAC_SCAN ){if (ieee->scanning ==0 ) { ieee->scanning =1 ; -queue_delayed_work (ieee->wq, &ieee->softmac_scan_wq,0 ); +schedule_delayed_work (&ieee->softmac_scan_wq,0 ); } }else ieee->start_scan (ieee->dev);
@@ -1241,7 +1241,7 @@ void ieee80211_associate_abort(struct ieee80211_device *ieee) ieee->state =IEEE80211_ASSOCIATING_RETRY ; -queue_delayed_work (ieee->wq, &ieee->associate_retry_wq, \ +schedule_delayed_work (&ieee->associate_retry_wq, \IEEE80211_SOFTMAC_ASSOC_RETRY_TIME );spin_unlock_irqrestore (&ieee->lock, flags);
@@ -1382,7 +1382,7 @@ static void ieee80211_associate_complete(struct ieee80211_device *ieee) ieee->state =IEEE80211_LINKED ;//ieee->UpdateHalRATRTableHandler(dev, ieee->dot11HTOperationalRateSet); -queue_work (ieee->wq, &ieee->associate_complete_wq); +schedule_work (&ieee->associate_complete_wq); }static void ieee80211_associate_procedure_wq (struct work_struct *work)
@@ -1483,7 +1483,7 @@ inline void ieee80211_softmac_new_net(struct ieee80211_device *ieee, struct ieee } ieee->state =IEEE80211_ASSOCIATING ; -queue_work (ieee->wq, &ieee->associate_procedure_wq); +schedule_work (&ieee->associate_procedure_wq); }else {if (ieee80211_is_54g (&ieee->current_network) && (ieee->modulation &IEEE80211_OFDM_MODULATION )){
@@ -2044,7 +2044,7 @@ ieee80211_rx_frame_softmac(struct ieee80211_device *ieee, struct sk_buff *skb,"Association response status code 0x%x\n" , errcode);if (ieee->AsocRetryCount <RT_ASOC_RETRY_LIMIT ) { -queue_work (ieee->wq, &ieee->associate_procedure_wq); +schedule_work (&ieee->associate_procedure_wq); }else {ieee80211_associate_abort (ieee); }
@@ -2100,7 +2100,7 @@ ieee80211_rx_frame_softmac(struct ieee80211_device *ieee, struct sk_buff *skb,notify_wx_assoc_event (ieee);//HTSetConnectBwMode(ieee, HT_CHANNEL_WIDTH_20, HT_EXTCHNL_OFFSET_NO_EXT); RemovePeerTS (ieee, header->addr2); -queue_work (ieee->wq, &ieee->associate_procedure_wq); +schedule_work (&ieee->associate_procedure_wq); }break ;case IEEE80211_STYPE_MANAGE_ACT :
@@ -2442,7 +2442,7 @@ static void ieee80211_start_ibss_wq(struct work_struct *work)inline void ieee80211_start_ibss (struct ieee80211_device *ieee) { -queue_delayed_work (ieee->wq, &ieee->start_ibss_wq,150 ); +schedule_delayed_work (&ieee->start_ibss_wq,150 ); }/* this is called only in user context, with wx_sem held */
@@ -2605,7 +2605,10 @@ void ieee80211_stop_protocol(struct ieee80211_device *ieee)ieee80211_stop_send_beacons (ieee);del_timer_sync (&ieee->associate_timer);cancel_delayed_work (&ieee->associate_retry_wq); +cancel_delayed_work (&ieee->associate_complete_wq); +cancel_delayed_work (&ieee->associate_procedure_wq);cancel_delayed_work (&ieee->start_ibss_wq); +cancel_delayed_work (&ieee->wx_sync_scan_wq);ieee80211_stop_scan (ieee);ieee80211_disassociate (ieee);
@@ -2725,7 +2728,6 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee)setup_timer (&ieee->beacon_timer, ieee80211_send_beacon_cb, (unsigned long )ieee); - ieee->wq =create_workqueue (DRV_NAME );INIT_DELAYED_WORK (&ieee->start_ibss_wq, ieee80211_start_ibss_wq);INIT_WORK (&ieee->associate_complete_wq, ieee80211_associate_complete_wq);
@@ -2755,7 +2757,6 @@ void ieee80211_softmac_free(struct ieee80211_device *ieee)del_timer_sync (&ieee->associate_timer);cancel_delayed_work (&ieee->associate_retry_wq); -destroy_workqueue (ieee->wq);up (&ieee->wx_sem); }
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac_wx.c +1 -1
@@ -370,7 +370,7 @@ int ieee80211_wx_set_scan(struct ieee80211_device *ieee, struct iw_request_info }if (ieee->state ==IEEE80211_LINKED ) { -queue_work (ieee->wq, &ieee->wx_sync_scan_wq); +schedule_work (&ieee->wx_sync_scan_wq);/* intentionally forget to up sem */ return 0 ; }
drivers/staging/rtl8192u/r8192U_core.c +1 -1
@@ -3385,7 +3385,7 @@ RESET_START: ieee->set_chan (ieee->dev, ieee->current_network.channel); -queue_work (ieee->wq, &ieee->associate_complete_wq); +schedule_work (&ieee->associate_complete_wq); }else if (ieee->state ==IEEE80211_LINKED && ieee->iw_mode ==IW_MODE_ADHOC ) {
--
2.1.4