[PATCH v4 1/5] OMAP: mailbox: change full flag per mailbox queue instead of global
Kanigeri, Hari
h-kanigeri2 at ti.com
Wed Nov 24 07:47:25 EST 2010
On Tue, Nov 23, 2010 at 11:21 PM, Varadarajan, Charulatha <charu at ti.com> wrote:
> On Wed, Nov 24, 2010 at 02:56, Hari Kanigeri <h-kanigeri2 at ti.com> wrote:
>> From: Fernando Guzman Lugo <x0095840 at ti.com>
>>
>> The variable rq_full flag is a global variable, so if there are multiple
>> mailbox users there will be conflicts. Now there is a full flag per
>> mailbox queue.
>>
>> Reported-by: Ohad Ben-Cohen <ohad at wizery.com>
>> Signed-off-by: Fernando Guzman Lugo <x0095840 at ti.com>
>> Signed-off-by: Hari Kanigeri <h-kanigeri2 at ti.com>
>> ---
>> arch/arm/plat-omap/include/plat/mailbox.h | 1 +
>> arch/arm/plat-omap/mailbox.c | 9 +++++++--
>> 2 files changed, 8 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm/plat-omap/include/plat/mailbox.h b/arch/arm/plat-omap/include/plat/mailbox.h
>> index 9976565..13f2ef3 100644
>> --- a/arch/arm/plat-omap/include/plat/mailbox.h
>> +++ b/arch/arm/plat-omap/include/plat/mailbox.h
>> @@ -48,6 +48,7 @@ struct omap_mbox_queue {
>> struct tasklet_struct tasklet;
>> int (*callback)(void *);
>> struct omap_mbox *mbox;
>> + bool full;
>> };
>>
>> struct omap_mbox {
>> diff --git a/arch/arm/plat-omap/mailbox.c b/arch/arm/plat-omap/mailbox.c
>> index d2fafb8..48e161c 100644
>> --- a/arch/arm/plat-omap/mailbox.c
>> +++ b/arch/arm/plat-omap/mailbox.c
>> @@ -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;
>
> Should this also be inside spin_lock_irq?
>
Not needed. this is already run from interrupt context.
Thank you,
Best regards,
Hari
More information about the linux-arm-kernel
mailing list