• P
    irqchip: mips-gic: Use irq_cpu_online to (un)mask all-VP(E) IRQs · da61fcf9
    Paul Burton 提交于
    The gic_all_vpes_local_irq_controller chip currently attempts to operate
    on all CPUs/VPs in the system when masking or unmasking an interrupt.
    This has a few drawbacks:
    
     - In multi-cluster systems we may not always have access to all CPUs in
       the system. When all CPUs in a cluster are powered down that
       cluster's GIC may also power down, in which case we cannot configure
       its state.
    
     - Relatedly, if we power down a cluster after having configured
       interrupts for CPUs within it then the cluster's GIC may lose state &
       we need to reconfigure it. The current approach doesn't take this
       into account.
    
     - It's wasteful if we run Linux on fewer VPs than are present in the
       system. For example if we run a uniprocessor kernel on CPU0 of a
       system with 16 CPUs then there's no point in us configuring CPUs
       1-15.
    
     - The implementation is also lacking in that it expects the range
       0..gic_vpes-1 to represent valid Linux CPU numbers which may not
       always be the case - for example if we run on a system with more VPs
       than the kernel is configured to support.
    
    Fix all of these issues by only configuring the affected interrupts for
    CPUs which are online at the time, and recording the configuration in a
    new struct gic_all_vpes_chip_data for later use by CPUs being brought
    online. We register a CPU hotplug state (reusing
    CPUHP_AP_IRQ_GIC_STARTING which the ARM GIC driver uses, and which seems
    suitably generic for reuse with the MIPS GIC) and execute
    irq_cpu_online() in order to configure the interrupts on the newly
    onlined CPU.
    Signed-off-by: NPaul Burton <paul.burton@mips.com>
    Cc: Jason Cooper <jason@lakedaemon.net>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-mips@linux-mips.org
    Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
    da61fcf9
cpuhotplug.h 11.7 KB