• Marc Zyngier's avatar
    arm64: Allow IPIs to be handled as normal interrupts · d3afc7f1
    Marc Zyngier authored
    In order to deal with IPIs as normal interrupts, let's add
    a new way to register them with the architecture code.
    
    set_smp_ipi_range() takes a range of interrupts, and allows
    the arch code to request them as if the were normal interrupts.
    A standard handler is then called by the core IRQ code to deal
    with the IPI.
    
    This means that we don't need to call irq_enter/irq_exit, and
    that we don't need to deal with set_irq_regs either. So let's
    move the dispatcher into its own function, and leave handle_IPI()
    as a compatibility function.
    
    On the sending side, let's make use of ipi_send_mask, which
    already exists for this purpose.
    
    One of the major difference is that we end up, in some cases
    (such as when performing IRQ time accounting on the scheduler
    IPI), end up with nested irq_enter()/irq_exit() pairs.
    Other than the (relatively small) overhead, there should be
    no consequences to it (these pairs are designed to nest
    correctly, and the accounting shouldn't be off).
    Reviewed-by: default avatarValentin Schneider <valentin.schneider@arm.com>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    d3afc7f1
smp.c 25.5 KB