• Paul Burton's avatar
    MIPS: Don't BUG_ON when no IPI domain is found · 578bffc8
    Paul Burton authored
    Commit fbde2d7d ("MIPS: Add generic SMP IPI support") introduced
    code that BUG_ON's in the case of a kernel that supports IPI domains but
    does not have one at runtime. This case is possible on Malta where for
    IPIs we may use either the GIC (which has an IPI IRQ domain
    implementation) or core-local software interrupts between VPEs (which do
    not currently have an IPI IRQ domain implementation). We can not know
    which will be used until runtime when we know whether a GIC is actually
    present, and if we run on a system with multiple VPEs and no GIC then
    the BUG_ON is hit.
    
    Commit 19fb5818 ("IPS: Fix broken malta qemu") worked around this
    for the single-core single-VPE case typically seen using QEMU, but does
    not catch the multi-VPE case. This patch removes the insufficient CPU
    presence check that was added and works around the bug differently,
    effectively reverting that commit.
    
    A simple way to reproduce this bug is by using QEMU, which partially
    implements the MT ASE but does not implement the GIC as of version 2.5.
    Using "-cpu 34Kf -smp 2" will present a system with 2 VPEs in one core &
    no GIC, hitting the BUG_ON.
    
    Given that we're post-merge-window on the way to v4.6, avoid this by
    just returning from mips_smp_ipi_init when no IPI IRQ domain is found.
    Ideally at some point all IPI implementations would be converted to the
    same IPI IRQ domain interface & we'd be able to restore the check.
    Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
    Cc: Qais Yousef <qsyousef@gmail.com>
    Fixes: fbde2d7d ("MIPS: Add generic SMP IPI support")
    Fixes: 19fb5818 ("IPS: Fix broken malta qemu")
    Reverts: 19fb5818 ("IPS: Fix broken malta qemu")
    Cc: Qais Yousef <qsyousef@gmail.com>
    Cc: James Hogan <james.hogan@imgtec.com>
    Cc: Alex Smith <alex.smith@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/13007/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    578bffc8
smp.c 14.7 KB