• Paul Burton's avatar
    irqchip: mips-gic: Mask local interrupts when CPUs come online · 25ac19e1
    Paul Burton authored
    We currently walk through the range 0..gic_vpes-1, expecting these
    values all to be valid Linux CPU numbers to provide to mips_cm_vp_id(),
    and masking all routable local interrupts during boot. This approach has
    a few drawbacks:
    
     - In multi-cluster systems we won't have access to all CPU's GIC local
       registers when the driver is probed, since clusters (and their GICs)
       may be powered down at this point & only brought online later.
    
     - In multi-cluster systems we may power down clusters at runtime, for
       example if we offline all CPUs within it via hotplug, and the
       cluster's GIC may lose state. We therefore need to reinitialise it
       when powering back up, which this approach does not take into
       account.
    
     - The range 0..gic_vpes-1 may not all be valid Linux CPU numbers, for
       example if we run a kernel configured to support fewer CPUs than the
       system it is running on actually has. In this case we'll get garbage
       values from mips_cm_vp_id() as we read past the end of the cpu_data
       array.
    
    Fix this and simplify the code somewhat by writing an all-bits-set
    value to the VP-local reset mask register when a CPU is brought online,
    before any local interrupts are configured for it. This removes the need
    for us to access all CPUs during driver probe, removing all of the
    problems described above.
    
    In the name of simplicity we drop the checks for routability of
    interrupts and simply clear the mask bits for all interrupts. Bits for
    non-routable local interrupts will have no effect so there's no point
    performing extra work to avoid modifying them.
    Signed-off-by: default avatarPaul 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: default avatarMarc Zyngier <marc.zyngier@arm.com>
    25ac19e1
irq-mips-gic.c 20.1 KB