summaryrefslogtreecommitdiffstats
path: root/drivers/misc/iwmc3200top/main.c
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2011-02-01 11:42:42 +0100
committerTejun Heo <tj@kernel.org>2011-02-01 11:42:42 +0100
commit51f50f815778b91c699fbcc3aac0dda891a7b795 (patch)
tree8edc17647b7d760e044c83cdcc86d46b4981785d /drivers/misc/iwmc3200top/main.c
parenti2o: use alloc_workqueue() instead of create_workqueue() (diff)
downloadlinux-51f50f815778b91c699fbcc3aac0dda891a7b795.tar.xz
linux-51f50f815778b91c699fbcc3aac0dda891a7b795.zip
misc/iwmc3200top: use system_wq instead of dedicated workqueues
With cmwq, there's no reason to use separate workqueues in iwmc3200top. Drop them and use system_wq instead. The used work items are sync flushed before driver detach. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Tomas Winkler <tomas.winkler@intel.com>
Diffstat (limited to 'drivers/misc/iwmc3200top/main.c')
-rw-r--r--drivers/misc/iwmc3200top/main.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/drivers/misc/iwmc3200top/main.c b/drivers/misc/iwmc3200top/main.c
index c73cef2c3c5e..727af07f1fbd 100644
--- a/drivers/misc/iwmc3200top/main.c
+++ b/drivers/misc/iwmc3200top/main.c
@@ -89,7 +89,7 @@ static void op_top_message(struct iwmct_priv *priv, struct top_msg *msg)
switch (msg->hdr.opcode) {
case OP_OPR_ALIVE:
LOG_INFO(priv, FW_MSG, "Got ALIVE from device, wake rescan\n");
- queue_work(priv->bus_rescan_wq, &priv->bus_rescan_worker);
+ schedule_work(&priv->bus_rescan_worker);
break;
default:
LOG_INFO(priv, FW_MSG, "Received msg opcode 0x%X\n",
@@ -360,7 +360,7 @@ static void iwmct_irq(struct sdio_func *func)
/* clear the function's interrupt request bit (write 1 to clear) */
sdio_writeb(func, 1, IWMC_SDIO_INTR_CLEAR_ADDR, &ret);
- queue_work(priv->wq, &priv->isr_worker);
+ schedule_work(&priv->isr_worker);
LOG_TRACE(priv, IRQ, "exit iwmct_irq\n");
@@ -506,10 +506,6 @@ static int iwmct_probe(struct sdio_func *func,
priv->func = func;
sdio_set_drvdata(func, priv);
-
- /* create drivers work queue */
- priv->wq = create_workqueue(DRV_NAME "_wq");
- priv->bus_rescan_wq = create_workqueue(DRV_NAME "_rescan_wq");
INIT_WORK(&priv->bus_rescan_worker, iwmct_rescan_worker);
INIT_WORK(&priv->isr_worker, iwmct_irq_read_worker);
@@ -604,9 +600,9 @@ static void iwmct_remove(struct sdio_func *func)
sdio_release_irq(func);
sdio_release_host(func);
- /* Safely destroy osc workqueue */
- destroy_workqueue(priv->bus_rescan_wq);
- destroy_workqueue(priv->wq);
+ /* Make sure works are finished */
+ flush_work_sync(&priv->bus_rescan_worker);
+ flush_work_sync(&priv->isr_worker);
sdio_claim_host(func);
sdio_disable_func(func);