• M
    irq: arm64: perform irqentry in entry code · 26dc1293
    Mark Rutland 提交于
    In preparation for removing HANDLE_DOMAIN_IRQ_IRQENTRY, have arch/arm64
    perform all the irqentry accounting in its entry code.
    
    As arch/arm64 already performs portions of the irqentry logic in
    enter_from_kernel_mode() and exit_to_kernel_mode(), including
    rcu_irq_{enter,exit}(), the only additional calls that need to be made
    are to irq_{enter,exit}_rcu(). Removing the calls to
    rcu_irq_{enter,exit}() from handle_domain_irq() ensures that we inform
    RCU once per IRQ entry and will correctly identify quiescent periods.
    
    Since we should not call irq_{enter,exit}_rcu() when entering a
    pseudo-NMI, el1_interrupt() is reworked to have separate __el1_irq() and
    __el1_pnmi() paths for regular IRQ and psuedo-NMI entry, with
    irq_{enter,exit}_irq() only called for the former.
    
    In preparation for removing HANDLE_DOMAIN_IRQ, the irq regs are managed
    in do_interrupt_handler() for both regular IRQ and pseudo-NMI. This is
    currently redundant, but not harmful.
    
    For clarity the preemption logic is moved into __el1_irq(). We should
    never preempt within a pseudo-NMI, and arm64_enter_nmi() already
    enforces this by incrementing the preempt_count, but it's clearer if we
    never invoke the preemption logic when entering a pseudo-NMI.
    Signed-off-by: NMark Rutland <mark.rutland@arm.com>
    Reviewed-by: NPingfan Liu <kernelfans@gmail.com>
    Reviewed-by: NMarc Zyngier <maz@kernel.org>
    Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will@kernel.org>
    26dc1293
Kconfig 64.0 KB