Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51f50f81 authored by Tejun Heo's avatar Tejun Heo
Browse files

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: default avatarTejun Heo <tj@kernel.org>
Cc: Tomas Winkler <tomas.winkler@intel.com>
parent 52286713
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -183,9 +183,7 @@ struct iwmct_priv {
	u32 barker;
	struct iwmct_dbg dbg;

	/* drivers work queue */
	struct workqueue_struct *wq;
	struct workqueue_struct *bus_rescan_wq;
	/* drivers work items */
	struct work_struct bus_rescan_worker;
	struct work_struct isr_worker;

+5 −9
Original line number Diff line number Diff line
@@ -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);