summaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorGuo Ren <ren_guo@c-sky.com>2019-01-08 20:49:24 +0800
committerGuo Ren <ren_guo@c-sky.com>2019-01-09 00:18:46 +0800
commit56752b21755aef598709d143684cb363db98a7d2 (patch)
treef2fd36e145d1415f306a295c61aff66783134b31 /drivers/scsi
parent2a60aa14a9a0333b3eef58150bc1ef654f7321ef (diff)
downloadlinux-stable-56752b21755aef598709d143684cb363db98a7d2.tar.gz
linux-stable-56752b21755aef598709d143684cb363db98a7d2.tar.bz2
linux-stable-56752b21755aef598709d143684cb363db98a7d2.zip
irqchip/csky: fixup handle_irq_perbit break irq
The handle_irq_perbit function loop every bit in hwirq local variable. handle_irq_perbit(hwirq) { for_everyt_bit_in(hwirq) { handle_domain_irq() ->irq_exit() ->invoke_softirq() ->__do_softirq() ->local_irq_enable() // Here will cause new interrupt. } } When new interrupt coming at local_irq_enable, it will finish another interrupt handler and pull down the interrupt source. But hwirq is the local variable for handle_irq_perbit(), it can't get new interrupt controller pending reg status. So we need update hwirq with pending reg in every loop. Also change write_relax to writel could prevent stw from fast retire. When local_irq is enabled, intc regs is really set-in. Signed-off-by: Guo Ren <ren_guo@c-sky.com> Cc: Lu Baoquan <lu.baoquan@intellif.com>
Diffstat (limited to 'drivers/scsi')
0 files changed, 0 insertions, 0 deletions