On Wed, Feb 14, 2024 at 10:13:57PM +0100, Oscar Salvador wrote: > On Wed, Feb 14, 2024 at 12:53:55PM +0900, Byungchul Park wrote: > > While running qemu with a configuration where some CPUs don't have their > > local memory and with a kernel numa balancing on, the following oops has > > been observed. It's because of null pointers of ->zone_pgdat of zones of > > those nodes that are not initialized at booting time. So should avoid > > nodes not set N_MEMORY from getting promoted. > > Looking at free_area_init(), we call free_area_init_node() for each node > found on the system. > And free_area_init_node()->free_area_init_core() inits all zones > belonging to the system via zone_init_internals(). For normal numa nodes, node_data[] is initialized at alloc_node_data(), but it's not for memoryless node. However, the node *gets onlined* at init_cpu_to_node(). Let's look at back free_area_init(). free_area_init_node() will be called with node_data[] not set yet, because it's already *onlined*. So ->zone_pgdat cannot be initialized properly in the path you mentioned. Byungchul > Now, I am not saying the check is wrong because we obviously do not want > migrate memory to a memoryless node, but I am confused as to where > we are crashing. > > > -- > Oscar Salvador > SUSE Labs