|
@@ -33,7 +33,6 @@
|
|
|
|
|
|
static struct workqueue_struct *mboxd;
|
|
|
static struct omap_mbox **mboxes;
|
|
|
-static bool rq_full;
|
|
|
|
|
|
static int mbox_configured;
|
|
|
static DEFINE_MUTEX(mbox_configured_lock);
|
|
@@ -148,6 +147,12 @@ static void mbox_rx_work(struct work_struct *work)
|
|
|
|
|
|
if (mq->callback)
|
|
|
mq->callback((void *)msg);
|
|
|
+ spin_lock_irq(&mq->lock);
|
|
|
+ if (mq->full) {
|
|
|
+ mq->full = false;
|
|
|
+ omap_mbox_enable_irq(mq->mbox, IRQ_RX);
|
|
|
+ }
|
|
|
+ spin_unlock_irq(&mq->lock);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -170,7 +175,7 @@ static void __mbox_rx_interrupt(struct omap_mbox *mbox)
|
|
|
while (!mbox_fifo_empty(mbox)) {
|
|
|
if (unlikely(kfifo_avail(&mq->fifo) < sizeof(msg))) {
|
|
|
omap_mbox_disable_irq(mbox, IRQ_RX);
|
|
|
- rq_full = true;
|
|
|
+ mq->full = true;
|
|
|
goto nomem;
|
|
|
}
|
|
|
|