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: Tejun Heo <tj@kernel.org> Acked-by: Hari Kanigeri <hari.kanigeri@gmail.com> Cc: Tony Lindgren <tony@atomide.com> Cc: linux-omap@vger.kernel.org
This commit is contained in:
parent
ada609ee2a
commit
c48730056f
|
@ -32,7 +32,6 @@
|
||||||
|
|
||||||
#include <plat/mailbox.h>
|
#include <plat/mailbox.h>
|
||||||
|
|
||||||
static struct workqueue_struct *mboxd;
|
|
||||||
static struct omap_mbox **mboxes;
|
static struct omap_mbox **mboxes;
|
||||||
|
|
||||||
static int mbox_configured;
|
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. */
|
/* no more messages in the fifo. clear IRQ source. */
|
||||||
ack_mbox_irq(mbox, IRQ_RX);
|
ack_mbox_irq(mbox, IRQ_RX);
|
||||||
nomem:
|
nomem:
|
||||||
queue_work(mboxd, &mbox->rxq->work);
|
schedule_work(&mbox->rxq->work);
|
||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t mbox_interrupt(int irq, void *p)
|
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) {
|
if (!--mbox->use_count) {
|
||||||
free_irq(mbox->irq, mbox);
|
free_irq(mbox->irq, mbox);
|
||||||
tasklet_kill(&mbox->txq->tasklet);
|
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->txq);
|
||||||
mbox_queue_free(mbox->rxq);
|
mbox_queue_free(mbox->rxq);
|
||||||
}
|
}
|
||||||
|
@ -406,10 +405,6 @@ static int __init omap_mbox_init(void)
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
mboxd = create_workqueue("mboxd");
|
|
||||||
if (!mboxd)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
/* kfifo size sanity check: alignment and minimal size */
|
/* kfifo size sanity check: alignment and minimal size */
|
||||||
mbox_kfifo_size = ALIGN(mbox_kfifo_size, sizeof(mbox_msg_t));
|
mbox_kfifo_size = ALIGN(mbox_kfifo_size, sizeof(mbox_msg_t));
|
||||||
mbox_kfifo_size = max_t(unsigned int, mbox_kfifo_size,
|
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)
|
static void __exit omap_mbox_exit(void)
|
||||||
{
|
{
|
||||||
destroy_workqueue(mboxd);
|
|
||||||
class_unregister(&omap_mbox_class);
|
class_unregister(&omap_mbox_class);
|
||||||
}
|
}
|
||||||
module_exit(omap_mbox_exit);
|
module_exit(omap_mbox_exit);
|
||||||
|
|
Loading…
Reference in a new issue