• Vladimir Murzin's avatar
    irqchip: gicv3-its: Fix ITS CPU init · 16acae72
    Vladimir Murzin authored
    We skip initialisation of ITS in case the device-tree has no
    corresponding description, but we are still accessing to ITS bits while
    setting CPU interface what leads to the kernel panic:
    
    ITS: No ITS available, not enabling LPIs
    CPU0: found redistributor 0 region 0:0x000000002f100000
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    pgd = ffffffc0007fb000
    [00000000] *pgd=00000000fc407003, *pud=00000000fc407003, *pmd=00000000fc408003, *pte=006000002f000707
    Internal error: Oops: 96000005 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.19.0-rc2+ #318
    Hardware name: FVP Base (DT)
    task: ffffffc00077edb0 ti: ffffffc00076c000 task.ti: ffffffc00076c000
    PC is at its_cpu_init+0x2c/0x320
    LR is at gic_cpu_init+0x168/0x1bc
    
    It happens in gic_rdists_supports_plpis() because gic_rdists is NULL.
    The gic_rdists is set to non-NULL only when ITS node is presented in
    the device-tree.
    
    Fix this by moving the call to gic_rdists_supports_plpis() inside the
    !list_empty(&its_nodes) block, because it is that list that guards the
    validity of the rest of the information in this driver.
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarVladimir Murzin <vladimir.murzin@arm.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Link: https://lkml.kernel.org/r/1425659870-11832-2-git-send-email-marc.zyngier@arm.comSigned-off-by: default avatarJason Cooper <jason@lakedaemon.net>
    16acae72
irq-gic-v3-its.c 33.3 KB