riscv: kexec: Avoid deadlock in kexec crash path

If the kexec crash code is called in the interrupt context, the
machine_kexec_mask_interrupts() function will trigger a deadlock while
trying to acquire the irqdesc spinlock and then deactivate irqchip in
irq_set_irqchip_state() function.

Unlike arm64, riscv only requires irq_eoi handler to complete EOI and
keeping irq_set_irqchip_state() will only leave this possible deadlock
without any use. So we simply remove it.

Link: https://lore.kernel.org/linux-riscv/20231208111015.173237-1-songshuaishuai@tinylab.org/
Fixes: b17d19a5314a ("riscv: kexec: Fixup irq controller broken in kexec crash path")
Signed-off-by: Song Shuai <songshuaishuai@tinylab.org>
Reviewed-by: Ryo Takakura <takakura@valinux.co.jp>
Link: https://lore.kernel.org/r/20240626023316.539971-1-songshuaishuai@tinylab.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>

authored by Song Shuai and committed by Palmer Dabbelt c562ba71 393da6cb

+1 -9
+1 -9
arch/riscv/kernel/machine_kexec.c
··· 121 121 122 122 for_each_irq_desc(i, desc) { 123 123 struct irq_chip *chip; 124 - int ret; 125 124 126 125 chip = irq_desc_get_chip(desc); 127 126 if (!chip) 128 127 continue; 129 128 130 - /* 131 - * First try to remove the active state. If this 132 - * fails, try to EOI the interrupt. 133 - */ 134 - ret = irq_set_irqchip_state(i, IRQCHIP_STATE_ACTIVE, false); 135 - 136 - if (ret && irqd_irq_inprogress(&desc->irq_data) && 137 - chip->irq_eoi) 129 + if (chip->irq_eoi && irqd_irq_inprogress(&desc->irq_data)) 138 130 chip->irq_eoi(&desc->irq_data); 139 131 140 132 if (chip->irq_mask)