Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/book3s/mm: Update Oops message to print the correct translation in use

Avoids confusion when printing Oops message like below

Faulting instruction address: 0xc00000000008bdb4
Oops: Kernel access of bad area, sig: 11 [#1]
LE PAGE_SIZE=64K MMU=Radix MMU=Hash SMP NR_CPUS=2048 NUMA PowerNV

This was because we never clear the MMU_FTR_HPTE_TABLE feature flag
even if we run with radix translation. It was discussed that we should
look at this feature flag as an indication of the capability to run
hash translation and we should not clear the flag even if we run in
radix translation. All the code paths check for radix_enabled() check and
if found true consider we are running with radix translation. Follow the
same sequence for finding the MMU translation string to be used in Oops
message.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Acked-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20190711145814.17970-1-aneesh.kumar@linux.ibm.com

authored by

Aneesh Kumar K.V and committed by
Michael Ellerman
d7e02f7b 35a5c328

+11 -4
+11 -4
arch/powerpc/kernel/traps.c
··· 250 250 } 251 251 NOKPROBE_SYMBOL(oops_end); 252 252 253 + static char *get_mmu_str(void) 254 + { 255 + if (early_radix_enabled()) 256 + return " MMU=Radix"; 257 + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) 258 + return " MMU=Hash"; 259 + return ""; 260 + } 261 + 253 262 static int __die(const char *str, struct pt_regs *regs, long err) 254 263 { 255 264 printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter); 256 265 257 - printk("%s PAGE_SIZE=%luK%s%s%s%s%s%s%s %s\n", 266 + printk("%s PAGE_SIZE=%luK%s%s%s%s%s%s %s\n", 258 267 IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN) ? "LE" : "BE", 259 - PAGE_SIZE / 1024, 260 - early_radix_enabled() ? " MMU=Radix" : "", 261 - early_mmu_has_feature(MMU_FTR_HPTE_TABLE) ? " MMU=Hash" : "", 268 + PAGE_SIZE / 1024, get_mmu_str(), 262 269 IS_ENABLED(CONFIG_PREEMPT) ? " PREEMPT" : "", 263 270 IS_ENABLED(CONFIG_SMP) ? " SMP" : "", 264 271 IS_ENABLED(CONFIG_SMP) ? (" NR_CPUS=" __stringify(NR_CPUS)) : "",