[PATCH v4 4/5] OMAP: mailbox: send message in process context
Varadarajan, Charulatha
charu at ti.com
Wed Nov 24 00:26:54 EST 2010
On Wed, Nov 24, 2010 at 02:56, Hari Kanigeri <h-kanigeri2 at ti.com> wrote:
> Schedule the Tasklet to send only when mailbox fifo is full and there are
> pending messages in kifo, else send the message directly in the Process
Typo -> kifo
> context. This would avoid needless scheduling of Tasklet for every message
> transfer
>
> Signed-off-by: Hari Kanigeri <h-kanigeri2 at ti.com>
> ---
> arch/arm/plat-omap/mailbox.c | 9 +++++++--
> 1 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c
> index 13698ab..f4177df 100644
> --- a/arch/arm/plat-omap/mailbox.c
> +++ b/arch/arm/plat-omap/mailbox.c
> @@ -92,20 +92,25 @@ int omap_mbox_msg_send(struct omap_mbox *mbox, mbox_msg_t msg)
> struct omap_mbox_queue *mq = mbox->txq;
> int ret = 0, len;
>
> - spin_lock(&mq->lock);
> + spin_lock_bh(&mq->lock);
>
> if (kfifo_avail(&mq->fifo) < sizeof(msg)) {
> ret = -ENOMEM;
> goto out;
> }
>
> + if (kfifo_is_empty(&mq->fifo) && !__mbox_poll_for_space(mbox)) {
> + mbox_fifo_write(mbox, msg);
> + goto out;
> + }
> +
> len = kfifo_in(&mq->fifo, (unsigned char *)&msg, sizeof(msg));
> WARN_ON(len != sizeof(msg));
>
> tasklet_schedule(&mbox->txq->tasklet);
>
> out:
> - spin_unlock(&mq->lock);
> + spin_unlock_bh(&mq->lock);
> return ret;
> }
> EXPORT_SYMBOL(omap_mbox_msg_send);
> --
> 1.7.0
More information about the linux-arm-kernel
mailing list