mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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@citrix.com>
This commit is contained in:
1 parent
4e3645c1b0
commit
bdb5439c3f
1 file changed
+8
-2
@@ -163,9 +163,15 @@ void *do_page_walk(struct vcpu *v, unsigned long addr)
|
||||
|
||||
void __init pfn_pdx_hole_setup(unsigned long mask)
|
||||
{
|
||||
unsigned int i, j, bottom_shift, hole_shift;
|
||||
unsigned int i, j, bottom_shift = 0, hole_shift = 0;
|
||||
|
||||
for ( hole_shift = bottom_shift = j = 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);
|
||||
|
||||