|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 0/2] xen/mm: Fix off-by-one for tail merge in reserve_offlined_page()
After offlining pages, reserve_offlined_page() returns healthy spans of pages from the buddy it isolated the offlined pages back to the free lists. Naturally, it attempts to grow larger buddies, but due to an off-by-one, this fails at the tail end of the span of pages. Patch 1 adds a native regression test that reproduces the problem. Patch 2 fixes the off-by-one error and updates the regression test. Consider an order-2 buddy (4 pages) with the following layout: +---------------+---------------+---------------+---------------+ | head page tail page 1, tail page 2 tail page 3 | | PFN_ORDER(pg) marked as to | | == 2 be offlined | +---------------+---------------+---------------+---------------+ The expected result after removing tail page 1 and returning the remaining healthy pages to the free list would be: +---------------+ +---------------+---------------+ | single page | offlined page | head page tail page | | PFN_ORDER(pg) | not returned | PFN_ORDER(pg) | | == 0 | to the heap | == 1 | +---------------+ +---------------+---------------+ A trivial off-by-one error in the growth loop stops the growth loop early before the tail end of the original buddy and we end up with: +---------------+ +---------------+---------------+ | single page | offlined page | single page | single page | | PFN_ORDER(pg) | not returned | PFN_ORDER(pg) | PFN_ORDER(pg) | | == 0 | to the heap | == 0 | == 0 | +---------------+ +---------------+---------------+ This series is based on the native test environment v3 for NUMA claims https://lists.xen.org/archives/html/xen-devel/2026-05/msg01163.html In turn, it is based on the NUMA claim sets v7 series: https://lists.xen.org/archives/html/xen-devel/2026-05/msg00363.html You can pull this series with all dependencies for review and test: $ git pull git@xxxxxxxxxx:bernhardkaindl/xen.git offline-merge-tail-v1 $ make -C tools/tests/native TARGETS=offline-merge-tail test Fixes: e4865c2315 ('Page offline support in Xen side') Signed-off-by: Bernhard Kaindl <bernhard.kaindl@xxxxxxxxxx> Bernhard Kaindl (2): tools/tests/native: Test merging the tail after an offlined page xen/mm: Fix off-by-one stopping tail merge in reserve_offlined_page tools/tests/native/offline-merge-tail.c | 87 +++++++++++++++++++++++++ xen/common/page_alloc.c | 4 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 tools/tests/native/offline-merge-tail.c -- 2.39.5
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |