omap2/3/4: mailbox: use dedicated work queue for handling mailbox rx interrupt
keventd_wq is a shared work-queue, and should not be used when we need fast deterministic response. Instead mailbox driver should use it's own private work-queue, with it's own thread, to ensure that handling of RX interrupts are not delayed by other drivers. The tasklet is still used for transmission of mbox messages. Signed-off-by: Rob Clark <rob@ti.com> Signed-off-by: C A Subramaniam <subramaniam.ca@ti.com> Signed-off-by: Suman Anna <s-anna@ti.com> Acked-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
4499ce4293
commit
8250a5c381
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include <plat/mailbox.h>
|
||||
|
||||
static struct workqueue_struct *mboxd;
|
||||
static struct omap_mbox *mboxes;
|
||||
static DEFINE_RWLOCK(mboxes_lock);
|
||||
|
||||
|
@ -188,7 +189,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:
|
||||
schedule_work(&mbox->rxq->work);
|
||||
queue_work(mboxd, &mbox->rxq->work);
|
||||
}
|
||||
|
||||
static irqreturn_t mbox_interrupt(int irq, void *p)
|
||||
|
@ -401,12 +402,17 @@ EXPORT_SYMBOL(omap_mbox_unregister);
|
|||
|
||||
static int __init omap_mbox_init(void)
|
||||
{
|
||||
mboxd = create_workqueue("mboxd");
|
||||
if (!mboxd)
|
||||
return -ENOMEM;
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(omap_mbox_init);
|
||||
|
||||
static void __exit omap_mbox_exit(void)
|
||||
{
|
||||
destroy_workqueue(mboxd);
|
||||
}
|
||||
module_exit(omap_mbox_exit);
|
||||
|
||||
|
|
Loading…
Reference in New Issue