--- linux-2.6.32.7/arch/x86/mm/pgtable.c.orig	2010-01-29 01:06:20.000000000 +0200
+++ linux-2.6.32.7/arch/x86/mm/pgtable.c	2010-02-08 10:52:36.495142772 +0200
@@ -3,6 +3,7 @@
 #include <asm/pgtable.h>
 #include <asm/tlb.h>
 #include <asm/fixmap.h>
+#include <asm/xen/hypervisor.h>
 
 #define PGALLOC_GFP GFP_KERNEL | __GFP_NOTRACK | __GFP_REPEAT | __GFP_ZERO
 
@@ -16,7 +17,10 @@
 	struct page *pte;
 
 #ifdef CONFIG_HIGHPTE
-	pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0);
+	if (xen_pv_domain())
+		pte = alloc_pages(PGALLOC_GFP, 0);
+	else
+		pte = alloc_pages(PGALLOC_GFP | __GFP_HIGHMEM, 0);
 #else
 	pte = alloc_pages(PGALLOC_GFP, 0);
 #endif
