Re: [PATCH] ARM: integrator: Fix early initialization
Guenter Roeck <[email protected]>
| Newsgroups | dev.linux.lists.soc,org.infradead.lists.linux-arm-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 5/5/26 12:15, Linus Walleij wrote: > From: Guenter Roeck <[email protected]> > > Starting with commit bdb249fce9ad4 ("ARM: integrator: read counter using > syscon/regmap"), intcp_init_early calls syscon_regmap_lookup_by_compatible > which in turn calls of_syscon_register. This function allocates memory. > Since the memory management code has not been initialized at that time, > the call always fails. It either returns -ENOMEM or crashes as follows. > > Unable to handle kernel NULL pointer dereference at virtual address 0000000c when read > [0000000c] *pgd=00000000 > Internal error: Oops: 5 [#1] ARM > Modules linked in: > CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 6.15.0-rc5-00026-g5fcc9bf84ee5 #1 PREEMPT > Hardware name: ARM Integrator/CP (Device Tree) > PC is at __kmalloc_cache_noprof+0xec/0x39c > LR is at __kmalloc_cache_noprof+0x34/0x39c > ... > Call trace: > __kmalloc_cache_noprof from of_syscon_register+0x7c/0x310 > of_syscon_register from device_node_get_regmap+0xa4/0xb0 > device_node_get_regmap from intcp_init_early+0xc/0x40 > intcp_init_early from start_kernel+0x60/0x688 > start_kernel from 0x0 > > The crash is seen due to a dereferenced pointer which is not supposed to be > NULL but is NULL if the memory management subsystem has not been > initialized. The crash is not seen with all versions of gcc. Some versions > such as gcc 9.x apparently do not dereference the pointer, presumably if > tracing is disabled. The problem has been reproduced with gcc 10.x, 11.x, > and 13.x. Either case, if the crash is not seen, the call to > syscon_regmap_lookup_by_compatible returns -ENOMEM, and > sched_clock_register is never called. > > Fix the problem by moving the early initialization code into the standard > machine initialization code. > > Fixes: bdb249fce9ad4 ("ARM: integrator: read counter using syscon/regmap") > Cc: Linus Walleij <[email protected]> > Signed-off-by: Guenter Roeck <[email protected]> > Link: https://lore.kernel.org/[email protected] > Signed-off-by: Linus Walleij <[email protected]> > --- > Hi SoC folks, please apply this directly for fixes. > Got stuck on a sideways branch for way too long. I actually stopped testing the integratorcp qemu emulation because it no longer works reliably, not even with gcc 9.x, since the timer-sp804 patches were applied. Given that apparently no one but me ever hit that problem, I wonder if it is time to remove support for that machine entirely. Guenter