libertas: create a worker thread for association
Marcelo Tosatti
mtosatti at redhat.unroutablecom
Mon Dec 11 15:18:31 EST 2006
Commit: a7e6965a2978b81a98dbb21634139930c74ba317
Parent: 7a61fcc9f6c78aba9d7d32b10baf5bc55f0b63c2
commit a7e6965a2978b81a98dbb21634139930c74ba317
Author: Marcelo Tosatti <mtosatti at redhat.com>
AuthorDate: Fri Dec 8 19:06:43 2006 -0200
Commit: Marcelo Tosatti <mtosatti at redhat.com>
CommitDate: Fri Dec 8 19:06:43 2006 -0200
libertas: create a worker thread for association
Association work on keventd is causing delay on other important
events such as user input.
Move it to its own worker thread.
Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
---
drivers/net/wireless/libertas/wlan_assoc.h | 2 +-
drivers/net/wireless/libertas/wlan_dev.h | 1 +
drivers/net/wireless/libertas/wlan_main.c | 4 ++++
3 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/libertas/wlan_assoc.h b/drivers/net/wireless/libertas/wlan_assoc.h
index 31ba5f6..1c2ca1e 100644
--- a/drivers/net/wireless/libertas/wlan_assoc.h
+++ b/drivers/net/wireless/libertas/wlan_assoc.h
@@ -28,7 +28,7 @@ #define ASSOC_DELAY (HZ / 2)
static inline void wlan_postpone_association_work(wlan_private *priv)
{
cancel_delayed_work(&priv->assoc_work);
- schedule_delayed_work(&priv->assoc_work, ASSOC_DELAY);
+ queue_delayed_work(priv->assoc_thread, &priv->assoc_work, ASSOC_DELAY);
}
static inline void wlan_cancel_association_work(wlan_private *priv)
diff --git a/drivers/net/wireless/libertas/wlan_dev.h b/drivers/net/wireless/libertas/wlan_dev.h
index 467a0f5..f90c0a7 100644
--- a/drivers/net/wireless/libertas/wlan_dev.h
+++ b/drivers/net/wireless/libertas/wlan_dev.h
@@ -219,6 +219,7 @@ struct _wlan_private {
struct wlan_thread MainThread;
struct work_struct assoc_work;
+ struct workqueue_struct *assoc_thread;
#ifdef REASSOCIATION
/** thread to service mac events */
diff --git a/drivers/net/wireless/libertas/wlan_main.c b/drivers/net/wireless/libertas/wlan_main.c
index ef297c6..1befb60 100644
--- a/drivers/net/wireless/libertas/wlan_main.c
+++ b/drivers/net/wireless/libertas/wlan_main.c
@@ -996,6 +996,8 @@ #define NETIF_F_DYNALLOC 16
wlan_create_thread(wlan_service_main_thread,
&priv->MainThread, "wlan_main_service");
+ priv->assoc_thread =
+ create_singlethread_workqueue("libertas_assoc");
INIT_WORK(&priv->assoc_work, wlan_association_worker, dev);
#ifdef REASSOCIATION
@@ -1101,6 +1103,8 @@ static int wlan_remove_card(void *card)
dev = priv->wlan_dev.netdev;
mesh_dev = priv->mesh_dev;
+ destroy_workqueue(priv->assoc_thread);
+
if (Adapter->CurCmd) {
dprintk(1, "Wake up current cmdwait_q\n");
wake_up_interruptible(&Adapter->CurCmd->cmdwait_q);
More information about the Commits-kernel
mailing list