From: "Zenghui Yu (Huawei)" Onlining hotplugged memory (e.g., a dev_dax device bound to kmem) with CONFIG_MEM_ALLOC_PROFILING_DEBUG triggers: alloc_tag was not set WARNING: ./include/linux/alloc_tag.h:166 at __pgalloc_tag_sub+0x1fc/0x254 Call trace: __pgalloc_tag_sub+0x1fc/0x254 (P) __free_pages_ok+0x14c/0x6ac __free_pages_core+0xa8/0x188 generic_online_page+0x14/0x20 online_pages+0x220/0x3b0 memory_subsys_online+0xfc/0x198 device_online+0x58/0xe0 state_store+0xf0/0xf8 Onlined pages enter the buddy allocator without ever being allocated, so their allocation tag references are NULL. The free path expects a valid tag or a CODETAG_EMPTY mark and warns otherwise. Other paths feeding never-allocated pages into the buddy (memblock_free_pages(), init_cma_reserved_pageblock(), free_reserved_pages()) mark them with clear_page_tag_ref() first; the hotplug onlining path was missed. Mark the pages as not tagged in the MEMINIT_HOTPLUG branch of __free_pages_core(), where PageOffline and the refcount are already reset. Signed-off-by: Zenghui Yu (Huawei) --- mm/page_alloc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e71e514ea18d..9561f2cd873e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1604,6 +1604,7 @@ void __meminit __free_pages_core(struct page *page, unsigned int order, VM_WARN_ON_ONCE(PageReserved(p)); __ClearPageOffline(p); set_page_count(p, 0); + clear_page_tag_ref(p); } adjust_managed_page_count(page, nr_pages); -- 2.56.0