PPC476 hangs during tlb flush after calling /init in crash kernel with linux 5.4+

From: Eddie James
Date: Tue Apr 27 2021 - 13:04:27 EST


Hi all,

I'm having a problem in simulation and hardware where my PPC476
processor stops executing instructions after callling /init. In my case
this is a bash script. The code descends to flush the TLB, and
somewhere in the loop in _tlbil_pid, the PC goes to
InstructionTLBError47x but does not go any further. This only occurs in
the crash kernel environment, which is using the same kernel,
initramfs, and init script as the main kernel, which executed fine. I
do not see this problem with linux 4.19 or 3.10. I do see it with 5.4
and 5.10. I see a fair amount of refactoring in the PPC memory
management area between 4.19 and 5.4. Can anyone point me in a
direction to debug this further? My stack trace is below as I can run
gdb in simulation.

Thanks,
Eddie


#0 _tlbil_pid () at
/usr/src/kernel/arch/powerpc/mm/nohash/tlb_low.S:123
#1 0xca014864 in local_flush_tlb_mm (mm=<optimized out>)
at /usr/src/kernel/arch/powerpc/mm/nohash/tlb.c:201
#2 tlb_flush (tlb=<optimized out>)
at /usr/src/kernel/arch/powerpc/mm/nohash/tlb.c:395
#3 0xca161e48 in tlb_flush_mmu_tlbonly (tlb=<optimized out>)
at /usr/src/kernel/include/asm-generic/tlb.h:408
#4 tlb_flush_mmu_tlbonly (tlb=<optimized out>)
at /usr/src/kernel/include/asm-generic/tlb.h:403
#5 tlb_flush_mmu (tlb=0xcec2fd18) at
/usr/src/kernel/mm/mmu_gather.c:190
#6 0xca161fa8 in tlb_finish_mmu (tlb=0xcec2fd18, start=<optimized
out>,
end=<optimized out>) at /usr/src/kernel/mm/mmu_gather.c:272
#7 0xca18e070 in shift_arg_pages (shift=<optimized out>,
vma=<optimized out>)
at /usr/src/kernel/fs/exec.c:678
#8 setup_arg_pages (bprm=0xcef1a000, stack_top=<optimized out>,
executable_stack=<optimized out>) at /usr/src/kernel/fs/exec.c:768
#9 0xca1f617c in load_elf_binary (bprm=0xcef1a000)
at /usr/src/kernel/fs/binfmt_elf.c:867
#10 0xca18f3d4 in search_binary_handler (bprm=<optimized out>)
at /usr/src/kernel/fs/exec.c:1691
#11 0xca1f458c in next_terminator (last=<optimized out>,
first=<optimized out>)
at /usr/src/kernel/fs/binfmt_script.c:29
#12 load_script (bprm=0xcef1a000) at
/usr/src/kernel/fs/binfmt_script.c:83
#13 0xca18f3d4 in search_binary_handler (bprm=<optimized out>)
at /usr/src/kernel/fs/exec.c:1691
#14 0xca190104 in acct_arg_size (bprm=<optimized out>, pages=<optimized
out>)
at /usr/src/kernel/fs/exec.c:187
#15 __do_execve_file (fd=<optimized out>, filename=0xcec98000,
argv=...,
envp=..., flags=<optimized out>, file=<optimized out>)
at /usr/src/kernel/fs/exec.c:1872
#16 0xca19059c in __read_once_size (size=<optimized out>,
res=<optimized out>, p=<optimized out>) at
/usr/src/kernel/include/linux/compiler.h:235
#17 set_dumpable (mm=<optimized out>, value=<optimized out>) at
/usr/src/kernel/fs/exec.c:1983