• Marc Zyngier's avatar
    irqchip/gic-v3-its: Only emit SYNC if targetting a valid collection · 83559b47
    Marc Zyngier authored
    It is possible, under obscure circumstances, to convince the ITS driver to
    emit a SYNC operation that targets a collection that is not bound to any
    redistributor (and the target_address field is zero) because the
    corresponding CPU has not been seen yet (the system has been booted with
    max_cpus="something small").
    
    If the ITS is using the linear CPU number as the target, this is not a big
    deal, as we just end-up issuing a SYNC to CPU0. But if the ITS requires the
    physical address of the redistributor (with GITS_TYPER.PTA==1), we end-up
    asking the ITS to write to the physical address zero, which is not exactly
    a good idea (there has been report of the ITS locking up). This should of
    course never happen, but hey, this is SW...
    
    In order to avoid the above disaster, let's track which collections have
    been actually initialized, and let's not generate a SYNC if the collection
    hasn't been properly bound to a redistributor.  Take this opportunity to
    spit our a warning, in the hope that someone may report the issue if it
    arrises again.
    Reported-by: default avatarYang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Jason Cooper <jason@lakedaemon.net>
    Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Cc: Sumit Garg <sumit.garg@linaro.org>
    Link: https://lkml.kernel.org/r/20180622095254.5906-6-marc.zyngier@arm.com
    83559b47
irq-gic-v3-its.c 90.6 KB