KASAN debug kernel fails to boot at early stage when CONFIG_SMP=y is set (kernel 6.5-rc5, PowerMac G4 3,6)

Christophe Leroy christophe.leroy at csgroup.eu
Mon Aug 14 19:40:44 AEST 2023



Le 13/08/2023 à 21:38, Erhard Furtner a écrit :
> On Fri, 11 Aug 2023 06:45:14 +0000
> Christophe Leroy <christophe.leroy at csgroup.eu> wrote:
> 
>> Le 11/08/2023 à 01:48, Erhard Furtner a écrit :
>>> I wanted to fire up my PowerMac G4 MDD (Dual CPU) with a KASAN debug build of kernel 6.5-rc5 for testing purposes. But the kernel fails to boot at a very early stage. I only get a white screen reading
>>> "done
>>> found display: /pci at f0000000/ATY,AlteracParent at 10/ATY,Alterac_B at 1, opening..."
>>
>> Can you try with CONFIG_PPC_EARLY_DEBUG and see if you get more
>> information on the screen ?
> 
> With CONFIG_PPC_EARLY_DEBUG set booting continues and I get two more lines on a white screen:
> 
> [    0.000000] printk: bootconsole [udbg0] enabled
> [    0.000000] Total memory = 2048MB; using 4096kB for hash table
> 
> Afterwards the G4 freezes.

Interesting. That means we get stuck somewhere around  MMU_init()

We know that MMU_init_hw() is called and runs at least until:

	pr_info("Total memory = %lldMB; using %ldkB for hash table\n",
		(unsigned long long)(total_memory >> 20), Hash_size >> 10);

But we never reach the print in setup_kuap() which is itself called by 
set_kup():
	pr_info("Activating Kernel Userspace Access Protection\n");


Could you try to narrow more the issue by spreading pr_info() at places 
in the code below and/or the called functions ? Either we never come 
back from MMU_init_hw(), or one of mapin_ram() btext_unmap() 
kasan_mmu_init() fails.

So the piece of code we are interested in is located in 
arch/powerpc/mm/init_32.c and is:

	/* Initialize the MMU hardware */
	if (ppc_md.progress)
		ppc_md.progress("MMU:hw init", 0x300);
==>	MMU_init_hw();

	/* Map in all of RAM starting at KERNELBASE */
	if (ppc_md.progress)
		ppc_md.progress("MMU:mapin", 0x301);
	mapin_ram();

	/* Initialize early top-down ioremap allocator */
	ioremap_bot = IOREMAP_TOP;

	if (ppc_md.progress)
		ppc_md.progress("MMU:exit", 0x211);

	/* From now on, btext is no longer BAT mapped if it was at all */
#ifdef CONFIG_BOOTX_TEXT
	btext_unmap();
#endif

	kasan_mmu_init();

==>	setup_kup();


Christophe


> 
> By chane I found out another interesting thing: This only happens on cold boots.
> 
> If I boot the G4 up with another kernel first and boot the SMP KASAN kernel afterwards it just boots up fine too! On further reboots the SMP KASAN kernel keeps booting up normally. Until I turn the machine off - and next time I turn it on the same SMP KASAN kernel fails booting again as described. Strange...
> 
> This behaviour however is reproducible. Tried that procedure 15-20 times just to be sure. Hope you can make something out of it.
> 
> Attached is a dmesg of a successful SMP KASAM kernel boot attempt when a working kernel was booted first.
> 
> Regards,
> Erhard F.


More information about the Linuxppc-dev mailing list