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
Wed Sep 13 15:28:59 AEST 2023



Le 12/09/2023 à 22:09, Erhard Furtner a écrit :
> On Tue, 12 Sep 2023 17:39:10 +0000
> Christophe Leroy <christophe.leroy at csgroup.eu> wrote:
> 
>> Ah ok, maybe your CPU only has 4 BATs and they are all used, following
>> change would tell us.
>>
>> diff --git a/arch/powerpc/mm/book3s32/mmu.c b/arch/powerpc/mm/book3s32/mmu.c
>> index 850783cfa9c7..bd26767edce7 100644
>> --- a/arch/powerpc/mm/book3s32/mmu.c
>> +++ b/arch/powerpc/mm/book3s32/mmu.c
>> @@ -86,6 +86,7 @@ int __init find_free_bat(void)
>>    		if (!(bat[1].batu & 3))
>>    			return b;
>>    	}
>> +	pr_err("NO FREE BAT (%d)\n", n);
>>    	return -1;
>>    }
>>
>> Or you have 8 BATs in which case it's an alignment problem, you need to
>> increase CONFIG_DATA_SHIFT to 23, for that you need CONFIG_ADVANCED and
>> CONFIG_DATA_SHIFT_BOOL
> 
> Applied all your patches. According to the output my G4 DP seems to have 8 BATs. Now I get the following output on screen before the freeze:
> 
> printk: bootconsole [udbg0] enabled
> Total memory = 2048MB; using 4096kB for hash table
> mapin_ram:125
> mmu_mapin_ram:170 0 30000000 1400000 2000000
> __mmu_mapin_ram:147 0 1400000
> __mmu_mapin_ram:156 1400000
> __mmu_mapin_ram:147 1400000 30000000
> NO FREE BAT (8)
> __mmu_mapin_ram:156 20000000
> __mapin_ram_chunk:107 20000000 30000000
> __mapin_ram_chunk:117
> mapin_ram:134
> kasan_mmu_init:132
> kasan_mmu_init:135 0
> kasan_mmu_init:140
> ioremap() called early from btext_map+0x64/0xdc. Use early_ioremap() instead
> Linux version 6.6.0-rc1-PMacG4-dirty (root at T1000) (gcc (Gentoo 12.3.1_p20230526 p2) 12.3.1 20230526, GNU ld (Gentoo 2.40 p7) 2.40.0) #5 SMP Tue Sep 12 16:50:47 CEST 2023
> kasan_init_region: c0000000 30000000 f8000000 fe000000
> NO FREE BAT (8)
> kasan_init_region: loop f8000000 fe000000
> 
> 
> So I set CONFIG_DATA_SHIFT=23 as suggested but then I only get:
> 
> printk: bootconsole [udbg0] enabled
> Total memory = 2048MB; using 4096kB for hash table
> mapin_ram:125
> mmu_mapin_ram:170 0 30000000 1400000 2000000
> __mmu_mapin_ram:147 0 1400000
> __mmu_mapin_ram:156 1400000
> __mmu_mapin_ram:147 1400000 30000000
> NO FREE BAT (8)
> __mmu_mapin_ram:156 20000000
> __mapin_ram_chunk:107 20000000 30000000
> __mapin_ram_chunk:117
> mapin_ram:134
> kasan_mmu_init:132
> kasan_mmu_init:135 0
> kasan_mmu_init:140
> 
> 
> With btext_unmap() left in place in init_32.c I only get:
> 
> printk: bootconsole [udbg0] enabled
> Total memory = 2048MB; using 4096kB for hash table
> mapin_ram:125
> mmu_mapin_ram:170 0 30000000 1400000 2000000
> __mmu_mapin_ram:147 0 1400000
> __mmu_mapin_ram:156 1400000
> __mmu_mapin_ram:147 1400000 30000000
> NO FREE BAT (8)
> __mmu_mapin_ram:156 20000000
> __mapin_ram_chunk:107 20000000 30000000
> __mapin_ram_chunk:117
> mapin_ram:134
> btext_unmap:129
> 
> Hope the output sheds at least some light on what's going wrong!
> 

Can you send me (off-list ?) the two vmlinux binaries (The one with data 
shift 22 and the one with 23) and also your latest .config

About the shift 23, I suspect that ppc32 still doesn't like when .init 
is past the first 32 Mb.

Thanks
Christophe


More information about the Linuxppc-dev mailing list