aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/wireless/libertas/main.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-08-02 13:19:04 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 16:50:14 -0700
commit2afc0c5d71a3dec6d35f3a234ed986d635ef41ad (patch)
treee13af671f3386f8a823d3a8745c3831208c7be41 /drivers/net/wireless/libertas/main.c
parentb031ac10264fa9b805d84b4a440407ac950390cf (diff)
[PATCH] libertas: push WEXT scan requests to a work queue
Push WEXT scan requests to a workqueue and have each partial scan queue the next part, then only report results when the complete scan has finished. Full scans don't go through the work queue. Signed-off-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
-rw-r--r--drivers/net/wireless/libertas/main.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c
index 9a46339ce47..bcd845060d4 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -1269,9 +1269,10 @@ int libertas_activate_card(wlan_private *priv)
goto done;
}
- priv->assoc_thread =
- create_singlethread_workqueue("libertas_assoc");
+ priv->work_thread = create_singlethread_workqueue("libertas_worker");
INIT_DELAYED_WORK(&priv->assoc_work, libertas_association_worker);
+ INIT_DELAYED_WORK(&priv->scan_work, libertas_scan_worker);
+
INIT_WORK(&priv->sync_channel, libertas_sync_channel);
/*
@@ -1305,7 +1306,7 @@ int libertas_activate_card(wlan_private *priv)
err_init_fw:
priv->hw_unregister_dev(priv);
err_registerdev:
- destroy_workqueue(priv->assoc_thread);
+ destroy_workqueue(priv->work_thread);
/* Stop the thread servicing the interrupts */
wake_up_interruptible(&priv->waitq);
kthread_stop(priv->main_thread);
@@ -1426,8 +1427,9 @@ int libertas_remove_card(wlan_private *priv)
unregister_netdev(dev);
+ cancel_delayed_work(&priv->scan_work);
cancel_delayed_work(&priv->assoc_work);
- destroy_workqueue(priv->assoc_thread);
+ destroy_workqueue(priv->work_thread);
if (adapter->psmode == WLAN802_11POWERMODEMAX_PSP) {
adapter->psmode = WLAN802_11POWERMODECAM;