Index: head-2006-03-13/include/asm-i386/mach-xen/asm/pgtable.h =================================================================== --- head-2006-03-13.orig/include/asm-i386/mach-xen/asm/pgtable.h 2006-03-13 10:22:14.000000000 +0100 +++ head-2006-03-13/include/asm-i386/mach-xen/asm/pgtable.h 2006-03-13 15:25:53.000000000 +0100 @@ -272,7 +272,15 @@ static inline pte_t ptep_get_and_clear_f pte_t pte; if (full) { pte = *ptep; +#ifdef CONFIG_X86_PAE + /* Cannot do this in a single step, as the compiler may + issue the two stores in either order, but the hypervisor + must not see the high part before the low one. */ + ptep->pte_low = 0; + ptep->pte_high = 0; +#else *ptep = __pte(0); +#endif } else { pte = ptep_get_and_clear(mm, addr, ptep); }