--- /dev/null
+From stable-bounces@linux.kernel.org Mon Jun 23 16:30:37 2008
+From: Jeremy Fitzhardinge <jeremy@goop.org>
+Date: Mon, 23 Jun 2008 23:30:20 GMT
+Subject: xen: mask unwanted pte bits in __supported_pte_mask
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200806232330.m5NNUKHK010393@hera.kernel.org>
+
+From: Jeremy Fitzhardinge <jeremy@goop.org>
+
+commit 05345b0f006ac226d0d25d48fcb2d792ac44a071 upstream
+
+[ Stable: this isn't a bugfix in itself, but it's a pre-requiste
+ for "xen: don't drop NX bit" ]
+
+Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
+Cc: the arch/x86 maintainers <x86@kernel.org>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/xen/enlighten.c | 5 +++++
+ arch/x86/xen/mmu.c | 4 +---
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -1214,6 +1214,11 @@ asmlinkage void __init xen_start_kernel(
+ if (xen_feature(XENFEAT_supervisor_mode_kernel))
+ pv_info.kernel_rpl = 0;
+
++ /* Prevent unwanted bits from being set in PTEs. */
++ __supported_pte_mask &= ~_PAGE_GLOBAL;
++ if (!is_initial_xendomain())
++ __supported_pte_mask &= ~(_PAGE_PWT | _PAGE_PCD);
++
+ /* set the limit of our address space */
+ xen_reserve_top();
+
+--- a/arch/x86/xen/mmu.c
++++ b/arch/x86/xen/mmu.c
+@@ -244,10 +244,8 @@ unsigned long long xen_pgd_val(pgd_t pgd
+
+ pte_t xen_make_pte(unsigned long long pte)
+ {
+- if (pte & _PAGE_PRESENT) {
++ if (pte & _PAGE_PRESENT)
+ pte = phys_to_machine(XPADDR(pte)).maddr;
+- pte &= ~(_PAGE_PCD | _PAGE_PWT);
+- }
+
+ return (pte_t){ .pte = pte };
+ }