Commit c4873005 authored by Tejun Heo's avatar Tejun Heo
Browse files

arm/omap: use system_wq in mailbox



With cmwq, there's no reason to use a separate workqueue for mailbox.
Use the system_wq instead.  mbox->rxq->work is sync flushed in
omap_mbox_fini() to make sure it's not running on any cpu, which makes
sure that no mbox work is running when omap_mbox_exit() is entered.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Acked-by: default avatarHari Kanigeri <hari.kanigeri@gmail.com>
Cc: Tony Lindgren <tony@atomide.com>
Cc: linux-omap@vger.kernel.org
parent ada609ee
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@

#include <plat/mailbox.h>

static struct workqueue_struct *mboxd;
static struct omap_mbox **mboxes;

static int mbox_configured;
@@ -197,7 +196,7 @@ static void __mbox_rx_interrupt(struct omap_mbox *mbox)
	/* no more messages in the fifo. clear IRQ source. */
	ack_mbox_irq(mbox, IRQ_RX);
nomem:
	queue_work(mboxd, &mbox->rxq->work);
	schedule_work(&mbox->rxq->work);
}

static irqreturn_t mbox_interrupt(int irq, void *p)
@@ -307,7 +306,7 @@ static void omap_mbox_fini(struct omap_mbox *mbox)
	if (!--mbox->use_count) {
		free_irq(mbox->irq, mbox);
		tasklet_kill(&mbox->txq->tasklet);
		flush_work(&mbox->rxq->work);
	flush_work_sync(&mbox->rxq->work);
		mbox_queue_free(mbox->txq);
		mbox_queue_free(mbox->rxq);
	}
@@ -406,10 +405,6 @@ static int __init omap_mbox_init(void)
	if (err)
		return err;

	mboxd = create_workqueue("mboxd");
	if (!mboxd)
		return -ENOMEM;

	/* kfifo size sanity check: alignment and minimal size */
	mbox_kfifo_size = ALIGN(mbox_kfifo_size, sizeof(mbox_msg_t));
	mbox_kfifo_size = max_t(unsigned int, mbox_kfifo_size,
@@ -421,7 +416,6 @@ subsys_initcall(omap_mbox_init);

static void __exit omap_mbox_exit(void)
{
	destroy_workqueue(mboxd);
	class_unregister(&omap_mbox_class);
}
module_exit(omap_mbox_exit);