// SPDX-License-Identifier: GPL-2.0 #include #include #include #include #include "internals.h" void machine_kexec_mask_interrupts(void) { struct irq_desc *desc; unsigned int i; for_each_irq_desc(i, desc) { struct irq_chip *chip; int check_eoi = 1; chip = irq_desc_get_chip(desc); if (!chip) continue; if (IS_ENABLED(CONFIG_GENERIC_IRQ_KEXEC_CLEAR_VM_FORWARD)) { /* * First try to remove the active state from an interrupt which is forwarded * to a VM. If the interrupt is not forwarded, try to EOI the interrupt. */ check_eoi = irq_set_irqchip_state(i, IRQCHIP_STATE_ACTIVE, false); } if (check_eoi && chip->irq_eoi && irqd_irq_inprogress(&desc->irq_data)) chip->irq_eoi(&desc->irq_data); if (chip->irq_mask) chip->irq_mask(&desc->irq_data); if (chip->irq_disable && !irqd_irq_disabled(&desc->irq_data)) chip->irq_disable(&desc->irq_data); } }