Skip to content

Commit 96031b3

Browse files
mszyprowThomas Gleixner
authored andcommitted
irqchip/exynos-combiner: Switch to raw_spinlock
The exynos-combiner driver uses a regular spinlock to protect access to the combiner interrupt status register in combiner_handle_cascade_irq(), which is invoked in hard interrupt context as a chained interrupt handler. When PREEMPT_RT is enabled on ARM, regular spinlock is converted to a sleeping lock (mutex-based), which must not be used in atomic context such as hard interrupt handlers. Switch the irq_controller_lock to raw_spinlock, which remains a true non-sleeping spinlock even under PREEMPT_RT. Fixes: a900e5d ("ARM: exynos: move exynos4210-combiner to drivers/irqchip") Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Thomas Gleixner <tglx@kernel.org>
1 parent 91840be commit 96031b3

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

drivers/irqchip/exynos-combiner.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
#define IRQ_IN_COMBINER 8
2626

27-
static DEFINE_SPINLOCK(irq_controller_lock);
27+
static DEFINE_RAW_SPINLOCK(irq_controller_lock);
2828

2929
struct combiner_chip_data {
3030
unsigned int hwirq_offset;
@@ -72,9 +72,9 @@ static void combiner_handle_cascade_irq(struct irq_desc *desc)
7272

7373
chained_irq_enter(chip, desc);
7474

75-
spin_lock(&irq_controller_lock);
75+
raw_spin_lock(&irq_controller_lock);
7676
status = readl_relaxed(chip_data->base + COMBINER_INT_STATUS);
77-
spin_unlock(&irq_controller_lock);
77+
raw_spin_unlock(&irq_controller_lock);
7878
status &= chip_data->irq_mask;
7979

8080
if (status == 0)

0 commit comments

Comments
 (0)