[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.0-testing] x86_64: Ensure frame-table compression leaves MAX_ORDER aligned
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1283332901 -3600 # Node ID e854f11d392d13e5302a219bcc9e6e352a4f1c1b # Parent 993458f6c5a0df2cfeeda9552ece6d18839798dc x86_64: Ensure frame-table compression leaves MAX_ORDER aligned contiguous ranges of page_info structs. This allows page-pointer arithmetic in places like our buddy allocator. This restriction was already implicitly guaranteed, but it is good to make it explicit in the pdx-related initialisation. Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> xen-unstable changeset: 972d90ff3134 xen-unstable date: Wed Sep 01 10:17:49 2010 +0100 --- xen/arch/x86/x86_64/mm.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff -r 993458f6c5a0 -r e854f11d392d xen/arch/x86/x86_64/mm.c --- a/xen/arch/x86/x86_64/mm.c Mon Aug 30 08:59:46 2010 +0100 +++ b/xen/arch/x86/x86_64/mm.c Wed Sep 01 10:21:41 2010 +0100 @@ -163,9 +163,15 @@ void *do_page_walk(struct vcpu *v, unsig void __init pfn_pdx_hole_setup(unsigned long mask) { - unsigned int i, j, bottom_shift, hole_shift; - - for ( hole_shift = bottom_shift = j = 0; ; ) + unsigned int i, j, bottom_shift = 0, hole_shift = 0; + + /* + * We skip the first MAX_ORDER bits, as we never want to compress them. + * This guarantees that page-pointer arithmetic remains valid within + * contiguous aligned ranges of 2^MAX_ORDER pages. Among others, our + * buddy allocator relies on this assumption. + */ + for ( j = MAX_ORDER-1; ; ) { i = find_next_zero_bit(&mask, BITS_PER_LONG, j); j = find_next_bit(&mask, BITS_PER_LONG, i); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |