Commit 5c4df6da authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

[PATCH] softmac: convert to use global workqueue

Convert softmac to use global workqueue instead of private one...
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 45867e6a
...@@ -177,9 +177,6 @@ struct ieee80211softmac_device { ...@@ -177,9 +177,6 @@ struct ieee80211softmac_device {
u8 scanning:1, /* protects scanning from being done multiple times at once */ u8 scanning:1, /* protects scanning from being done multiple times at once */
associated:1; associated:1;
/* workquere for scannning, ... */
struct workqueue_struct *workqueue;
struct ieee80211softmac_scaninfo *scaninfo; struct ieee80211softmac_scaninfo *scaninfo;
struct ieee80211softmac_assoc_info associnfo; struct ieee80211softmac_assoc_info associnfo;
......
...@@ -29,7 +29,7 @@ ieee80211softmac_assoc(struct ieee80211softmac_device *mac, struct ieee80211soft ...@@ -29,7 +29,7 @@ ieee80211softmac_assoc(struct ieee80211softmac_device *mac, struct ieee80211soft
/* Set a timer for timeout */ /* Set a timer for timeout */
/* FIXME: make timeout configurable */ /* FIXME: make timeout configurable */
queue_delayed_work(mac->workqueue, &mac->associnfo.timeout, 5 * HZ); schedule_delayed_work(&mac->associnfo.timeout, 5 * HZ);
} }
void void
...@@ -324,7 +324,7 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev, ...@@ -324,7 +324,7 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev,
network->authenticated = 0; network->authenticated = 0;
/* we don't want to do this more than once ... */ /* we don't want to do this more than once ... */
network->auth_desynced_once = 1; network->auth_desynced_once = 1;
queue_work(mac->workqueue, &mac->associnfo.work); schedule_work(&mac->associnfo.work);
break; break;
} }
default: default:
......
...@@ -36,7 +36,7 @@ ieee80211softmac_auth_req(struct ieee80211softmac_device *mac, ...@@ -36,7 +36,7 @@ ieee80211softmac_auth_req(struct ieee80211softmac_device *mac,
/* add to list */ /* add to list */
list_add_tail(&auth->list, &mac->auth_queue); list_add_tail(&auth->list, &mac->auth_queue);
queue_work(mac->workqueue, &auth->work); schedule_work(&auth->work);
spin_unlock_irqrestore(&mac->lock, flags); spin_unlock_irqrestore(&mac->lock, flags);
return 0; return 0;
...@@ -67,7 +67,7 @@ ieee80211softmac_auth_queue(void *data) ...@@ -67,7 +67,7 @@ ieee80211softmac_auth_queue(void *data)
net->authenticated = 0; net->authenticated = 0;
net->authenticating = 1; net->authenticating = 1;
/* add a timeout call so we eventually give up waiting for an auth reply */ /* add a timeout call so we eventually give up waiting for an auth reply */
queue_delayed_work(mac->workqueue, &auth->work, IEEE80211SOFTMAC_AUTH_TIMEOUT); schedule_delayed_work(&auth->work, IEEE80211SOFTMAC_AUTH_TIMEOUT);
auth->retry--; auth->retry--;
spin_unlock_irqrestore(&mac->lock, flags); spin_unlock_irqrestore(&mac->lock, flags);
if (ieee80211softmac_send_mgt_frame(mac, auth->net, IEEE80211_STYPE_AUTH, auth->state)) if (ieee80211softmac_send_mgt_frame(mac, auth->net, IEEE80211_STYPE_AUTH, auth->state))
...@@ -279,7 +279,7 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac, ...@@ -279,7 +279,7 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac,
kfree(net); kfree(net);
/* let's try to re-associate */ /* let's try to re-associate */
queue_work(mac->workqueue, &mac->associnfo.work); schedule_work(&mac->associnfo.work);
spin_unlock_irqrestore(&mac->lock, flags); spin_unlock_irqrestore(&mac->lock, flags);
} }
......
...@@ -118,7 +118,7 @@ ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, int eve ...@@ -118,7 +118,7 @@ ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, int eve
if ((eventptr->event_type == event || eventptr->event_type == -1) if ((eventptr->event_type == event || eventptr->event_type == -1)
&& (eventptr->event_context == NULL || eventptr->event_context == event_ctx)) { && (eventptr->event_context == NULL || eventptr->event_context == event_ctx)) {
list_del(&eventptr->list); list_del(&eventptr->list);
queue_work(mac->workqueue, &eventptr->work); schedule_work(&eventptr->work);
} }
} }
} }
......
...@@ -22,10 +22,6 @@ struct net_device *alloc_ieee80211softmac(int sizeof_priv) ...@@ -22,10 +22,6 @@ struct net_device *alloc_ieee80211softmac(int sizeof_priv)
* (once they're written) * (once they're written)
*/ */
softmac->workqueue = create_workqueue("80211softmac");
if (!softmac->workqueue)
goto err_free_ieee80211;
INIT_LIST_HEAD(&softmac->auth_queue); INIT_LIST_HEAD(&softmac->auth_queue);
INIT_LIST_HEAD(&softmac->network_list); INIT_LIST_HEAD(&softmac->network_list);
INIT_LIST_HEAD(&softmac->events); INIT_LIST_HEAD(&softmac->events);
...@@ -90,7 +86,7 @@ ieee80211softmac_clear_pending_work(struct ieee80211softmac_device *sm) ...@@ -90,7 +86,7 @@ ieee80211softmac_clear_pending_work(struct ieee80211softmac_device *sm)
cancel_delayed_work(&eventptr->work); cancel_delayed_work(&eventptr->work);
spin_unlock_irqrestore(&sm->lock, flags); spin_unlock_irqrestore(&sm->lock, flags);
flush_workqueue(sm->workqueue); flush_scheduled_work();
// now we should be save and no longer need locking... // now we should be save and no longer need locking...
spin_lock_irqsave(&sm->lock, flags); spin_lock_irqsave(&sm->lock, flags);
...@@ -121,7 +117,6 @@ void free_ieee80211softmac(struct net_device *dev) ...@@ -121,7 +117,6 @@ void free_ieee80211softmac(struct net_device *dev)
{ {
struct ieee80211softmac_device *sm = ieee80211_priv(dev); struct ieee80211softmac_device *sm = ieee80211_priv(dev);
ieee80211softmac_clear_pending_work(sm); ieee80211softmac_clear_pending_work(sm);
destroy_workqueue(sm->workqueue);
kfree(sm->scaninfo); kfree(sm->scaninfo);
kfree(sm->wpa.IE); kfree(sm->wpa.IE);
free_ieee80211(dev); free_ieee80211(dev);
......
...@@ -93,7 +93,7 @@ void ieee80211softmac_scan(void *d) ...@@ -93,7 +93,7 @@ void ieee80211softmac_scan(void *d)
// TODO: is this if correct, or should we do this only if scanning from assoc request? // TODO: is this if correct, or should we do this only if scanning from assoc request?
if (sm->associnfo.req_essid.len) if (sm->associnfo.req_essid.len)
ieee80211softmac_send_mgt_frame(sm, &sm->associnfo.req_essid, IEEE80211_STYPE_PROBE_REQ, 0); ieee80211softmac_send_mgt_frame(sm, &sm->associnfo.req_essid, IEEE80211_STYPE_PROBE_REQ, 0);
queue_delayed_work(sm->workqueue, &si->softmac_scan, IEEE80211SOFTMAC_PROBE_DELAY); schedule_delayed_work(&si->softmac_scan, IEEE80211SOFTMAC_PROBE_DELAY);
return; return;
} else { } else {
dprintk(PFX "Not probing Channel %d (not allowed here)\n", si->channels[current_channel_idx].channel); dprintk(PFX "Not probing Channel %d (not allowed here)\n", si->channels[current_channel_idx].channel);
...@@ -158,7 +158,7 @@ int ieee80211softmac_start_scan_implementation(struct net_device *dev) ...@@ -158,7 +158,7 @@ int ieee80211softmac_start_scan_implementation(struct net_device *dev)
sm->scaninfo->current_channel_idx = 0; sm->scaninfo->current_channel_idx = 0;
sm->scaninfo->started = 1; sm->scaninfo->started = 1;
INIT_COMPLETION(sm->scaninfo->finished); INIT_COMPLETION(sm->scaninfo->finished);
queue_work(sm->workqueue, &sm->scaninfo->softmac_scan); schedule_work(&sm->scaninfo->softmac_scan);
spin_unlock_irqrestore(&sm->lock, flags); spin_unlock_irqrestore(&sm->lock, flags);
return 0; return 0;
} }
......
...@@ -58,7 +58,7 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev, ...@@ -58,7 +58,7 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
sm->associnfo.req_essid.len = length; sm->associnfo.req_essid.len = length;
/* queue lower level code to do work (if necessary) */ /* queue lower level code to do work (if necessary) */
queue_work(sm->workqueue, &sm->associnfo.work); schedule_work(&sm->associnfo.work);
spin_unlock_irqrestore(&sm->lock, flags); spin_unlock_irqrestore(&sm->lock, flags);
return 0; return 0;
...@@ -286,7 +286,7 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev, ...@@ -286,7 +286,7 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev,
spin_lock_irqsave(&mac->lock, flags); spin_lock_irqsave(&mac->lock, flags);
if (!memcmp(any, data->ap_addr.sa_data, ETH_ALEN) || if (!memcmp(any, data->ap_addr.sa_data, ETH_ALEN) ||
!memcmp(off, data->ap_addr.sa_data, ETH_ALEN)) { !memcmp(off, data->ap_addr.sa_data, ETH_ALEN)) {
queue_work(mac->workqueue, &mac->associnfo.work); schedule_work(&mac->associnfo.work);
goto out; goto out;
} else { } else {
if (!memcmp(mac->associnfo.bssid, data->ap_addr.sa_data, ETH_ALEN)) { if (!memcmp(mac->associnfo.bssid, data->ap_addr.sa_data, ETH_ALEN)) {
...@@ -299,7 +299,7 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev, ...@@ -299,7 +299,7 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev,
memcpy(mac->associnfo.bssid, data->ap_addr.sa_data, ETH_ALEN); memcpy(mac->associnfo.bssid, data->ap_addr.sa_data, ETH_ALEN);
} }
/* queue associate if new bssid or (old one again and not associated) */ /* queue associate if new bssid or (old one again and not associated) */
queue_work(mac->workqueue,&mac->associnfo.work); schedule_work(&mac->associnfo.work);
} }
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment