|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH 1/2] properly honor MAX_ORDER in init_heap_pages()
The previous check was flawed in that it checked
- for a single bit to be set instead of a range of bits to be clear
- a machine address against a mask supposed to be used on MFNs.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
--- 2009-01-27.orig/xen/common/page_alloc.c 2009-01-30 09:09:57.000000000
+0100
+++ 2009-01-27/xen/common/page_alloc.c 2009-01-30 09:16:50.000000000 +0100
@@ -479,7 +479,6 @@ static void free_heap_pages(
* latter is not on a MAX_ORDER boundary, then we reserve the page by
* not freeing it to the buddy allocator.
*/
-#define MAX_ORDER_ALIGNED (1UL << (MAX_ORDER))
static void init_heap_pages(
struct page_info *pg, unsigned long nr_pages)
{
@@ -496,15 +495,15 @@ static void init_heap_pages(
init_node_heap(nid_curr);
/*
- * free pages of the same node, or if they differ, but are on a
- * MAX_ORDER alignement boundary (which already get reserved)
+ * Free pages of the same node, or if they differ, but are on a
+ * MAX_ORDER alignment boundary (which already get reserved).
*/
- if ( (nid_curr == nid_prev) || (page_to_maddr(pg+i) &
- MAX_ORDER_ALIGNED) )
- free_heap_pages(pg+i, 0);
- else
- printk("Reserving non-aligned node boundary @ mfn %lu\n",
- page_to_mfn(pg+i));
+ if ( (nid_curr == nid_prev) ||
+ !(page_to_mfn(pg+i) & ((1UL << MAX_ORDER) - 1)) )
+ free_heap_pages(pg+i, 0);
+ else
+ printk("Reserving non-aligned node boundary @ mfn %#lx\n",
+ page_to_mfn(pg+i));
nid_prev = nid_curr;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-devel] [PATCH 1/2] properly honor MAX_ORDER in init_heap_pages(),
Jan Beulich <=
|
|
|
|
|