Thread (34 messages) 34 messages, 3 authors, 2024-02-28

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

From: Christophe Leroy <hidden>
Date: 2023-08-14 09:42:01


Le 13/08/2023 à 21:38, Erhard Furtner a écrit :
On Fri, 11 Aug 2023 06:45:14 +0000
Christophe Leroy [off-list ref] wrote:
quoted
Le 11/08/2023 à 01:48, Erhard Furtner a écrit :
quoted
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@f0000000/ATY,AlteracParent@10/ATY,Alterac_B@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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help