MIPS: traps: Give more explanations if ebase doesn't belong to KSEG0
authorGregory CLEMENT <gregory.clement@bootlin.com>
Fri, 16 Feb 2024 17:42:13 +0000 (18:42 +0100)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Tue, 20 Feb 2024 11:44:59 +0000 (12:44 +0100)
With the expanded support for placing the kernel in XPHYS rather than
just KSEG0, scenarios where ebase doesn't belong to KSEG0 are more
likely to occur. In such cases, we currently experience a substantial
and perplexing stack dump without any accompanying explanation. To
rectify this, we aim to replace the uninformative stack dump with a
warning that offers a clear explanation of the issue.

Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
arch/mips/kernel/traps.c

index a0085445f4402fb0afab60fd3a9c7b5445c8aa8e..dc29bd9656b081dc7eaf43170d3542253866c1de 100644 (file)
@@ -2351,10 +2351,13 @@ void __init trap_init(void)
                 * EVA is special though as it allows segments to be rearranged
                 * and to become uncached during cache error handling.
                 */
-               if (!IS_ENABLED(CONFIG_EVA) && !WARN_ON(ebase_pa >= 0x20000000))
+               if (!IS_ENABLED(CONFIG_EVA) && ebase_pa < 0x20000000)
                        ebase = CKSEG0ADDR(ebase_pa);
                else
                        ebase = (unsigned long)phys_to_virt(ebase_pa);
+               if (ebase_pa >= 0x20000000)
+                       pr_warn("ebase(%pa) should better be in KSeg0",
+                               &ebase_pa);
        }
 
        if (cpu_has_mmips) {