ARCv2: STAR 9000814690: Really Re-enable interrupts to avoid deadlocks
authorVineet Gupta <vgupta@synopsys.com>
Sat, 15 Nov 2014 11:30:08 +0000 (17:00 +0530)
committerVineet Gupta <vgupta@synopsys.com>
Mon, 22 Jun 2015 08:36:55 +0000 (14:06 +0530)
commit4de0e52867d831057676340271d21cfb920eac1c
tree2107aea2b3856bcf4156d4128243d9b2d08d2e81
parent0d7b8855a05c099a5c65a8d49a1e604198021f56
ARCv2: STAR 9000814690: Really Re-enable interrupts to avoid deadlocks

The issue was, on HS when interrupt is taken, IRQ_ACT is set and that is
NOT cleared unless we do RTIE (or manually clear it). Linux interrupt
handling has top and bottom halves. Latter lead to softirqs (which can
reschedule) AND expect interrupts to be REALLY re-enabled which was NOT
happening for us since we only SETI, dont clear IRQ_ACT

So we can have a state when both cores have taken interrupt (IRQ_ACT set),
get rescheduled, both send IPI and wait in CSD lock which will never be
cleared as cores can't take the pending IPI IRQ due to existing IRQ_ACT
set.

So local_irq_enable() now drops the IRQ_ACT.act bit to re-enable IRQs.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/include/asm/irqflags-arcv2.h