Quite obviously to determine the split condition successive pages' attributes need to be evaluated, not always those of the initial page.
Fixes: 72b02bc75b47 ("xen/heap: pass order to free_heap_pages() in heap init") Signed-off-by: Jan Beulich <jbeul...@suse.com> --- Part of the problem was already introduced in 24a53060bd37 ("xen/heap: Split init_heap_pages() in two"), but there it was still benign. --- a/xen/common/page_alloc.c +++ b/xen/common/page_alloc.c @@ -1885,11 +1885,11 @@ static void init_heap_pages( * range to cross zones. */ #ifdef CONFIG_SEPARATE_XENHEAP - if ( zone != page_to_zone(pg) ) + if ( zone != page_to_zone(pg + contig_pages) ) break; #endif - if ( nid != (phys_to_nid(page_to_maddr(pg))) ) + if ( nid != (phys_to_nid(page_to_maddr(pg + contig_pages))) ) break; }