aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorBibek Basu <bibek.basu@stericsson.com>2011-08-17 15:54:00 +0530
committerRobert Marklund <robert.marklund@stericsson.com>2011-10-05 12:52:39 +0200
commite5c68c6c81a32b5a39e3274789ff7f831d15d8c4 (patch)
tree281162907e6a295197b174d408b4c1c833bc2860 /drivers/misc
parent0289557b85c3475b65014445e3b21bb144e9ffe0 (diff)
ux500_ing05160_mailboxPD_0.1:Lockdeb correctness fix for modem_irq
Commit ID: Ib94dcbf6: U5500 : Lockdeb correctness fix for modem_irq Build and boot test only done for 8500 config Booting will only happend properly if used Initramfs Change-Id: I5da03baa7b8ee8f32de5712b7136442fbe2cec1c Signed-off-by: Bibek Basu <bibek.basu@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28923
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/mbox.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/misc/mbox.c b/drivers/misc/mbox.c
index 2b2d51caf9d..b2810718822 100644
--- a/drivers/misc/mbox.c
+++ b/drivers/misc/mbox.c
@@ -69,8 +69,9 @@ static struct mbox *get_mbox_with_id(u8 id)
int mbox_send(struct mbox *mbox, u32 mbox_msg, bool block)
{
int res = 0;
+ unsigned long flag;
- spin_lock(&mbox->lock);
+ spin_lock_irqsave(&mbox->lock, flag);
dev_dbg(&(mbox->pdev->dev),
"About to buffer 0x%X to mailbox 0x%X."
@@ -87,14 +88,14 @@ int mbox_send(struct mbox *mbox, u32 mbox_msg, bool block)
res = -ENOMEM;
goto exit;
}
- spin_unlock(&mbox->lock);
+ spin_unlock_irqrestore(&mbox->lock, flag);
dev_dbg(&(mbox->pdev->dev),
"Buffer full in blocking call! Sleeping...\n");
mbox->client_blocked = 1;
wait_for_completion(&mbox->buffer_available);
dev_dbg(&(mbox->pdev->dev),
"Blocking send was woken up! Trying again...\n");
- spin_lock(&mbox->lock);
+ spin_lock_irqsave(&mbox->lock, flag);
}
mbox->buffer[mbox->write_index] = mbox_msg;
@@ -107,7 +108,7 @@ int mbox_send(struct mbox *mbox, u32 mbox_msg, bool block)
writel(MBOX_ENABLE_IRQ, mbox->virtbase_peer + MBOX_FIFO_THRES_FREE);
exit:
- spin_unlock(&mbox->lock);
+ spin_unlock_irqrestore(&mbox->lock, flag);
return res;
}
EXPORT_SYMBOL(mbox_send);
@@ -462,7 +463,9 @@ struct mbox *mbox_setup(u8 mbox_id, mbox_recv_cb_t *mbox_cb, void *priv)
}
dev_dbg(&(mbox->pdev->dev), "Allocating irq %d...\n", irq);
- res = request_irq(irq, mbox_irq, 0, mbox->name, (void *) mbox);
+ res = request_threaded_irq(irq, NULL, mbox_irq,
+ IRQF_NO_SUSPEND | IRQF_ONESHOT,
+ mbox->name, (void *) mbox);
if (res < 0) {
dev_err(&(mbox->pdev->dev),
"Unable to allocate mbox irq %d\n", irq);