38 lines
1.3 KiB
Diff
38 lines
1.3 KiB
Diff
|
From 5145351047b216cca13aaca99f939a9a594c6c4d Mon Sep 17 00:00:00 2001
|
||
|
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||
|
Date: Thu, 21 Mar 2013 11:35:49 +0100
|
||
|
Subject: [PATCH 2/3] i2c/omap: drop the lock hard irq context
|
||
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/patches-3.10.4-rt1.tar.xz
|
||
|
|
||
|
The lock is taken while reading two registers. On RT the first lock is
|
||
|
taken in hard irq where it might sleep and in the threaded irq.
|
||
|
The threaded irq runs in oneshot mode so the hard irq does not run until
|
||
|
the thread the completes so there is no reason to grab the lock.
|
||
|
|
||
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||
|
---
|
||
|
drivers/i2c/busses/i2c-omap.c | 5 +----
|
||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||
|
|
||
|
Index: linux-stable/drivers/i2c/busses/i2c-omap.c
|
||
|
===================================================================
|
||
|
--- linux-stable.orig/drivers/i2c/busses/i2c-omap.c
|
||
|
+++ linux-stable/drivers/i2c/busses/i2c-omap.c
|
||
|
@@ -881,15 +881,12 @@ omap_i2c_isr(int irq, void *dev_id)
|
||
|
u16 mask;
|
||
|
u16 stat;
|
||
|
|
||
|
- spin_lock(&dev->lock);
|
||
|
- mask = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
|
||
|
stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
|
||
|
+ mask = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
|
||
|
|
||
|
if (stat & mask)
|
||
|
ret = IRQ_WAKE_THREAD;
|
||
|
|
||
|
- spin_unlock(&dev->lock);
|
||
|
-
|
||
|
return ret;
|
||
|
}
|
||
|
|