Skip to content
  • Vineet Gupta's avatar
    ARCv2: STAR 9000814690: Really Re-enable interrupts to avoid deadlocks · 4de0e528
    Vineet Gupta authored
    
    
    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: default avatarVineet Gupta <vgupta@synopsys.com>
    4de0e528