--- linux-2.6.9/arch/i386/mm/pgtable-xen.c.orig	2009-04-30 23:31:13.606403000 -0700
+++ linux-2.6.9/arch/i386/mm/pgtable-xen.c	2009-04-30 23:40:14.986134000 -0700
@@ -175,6 +175,7 @@ EXPORT_SYMBOL(__FIXADDR_TOP);
 
 void __set_fixmap (enum fixed_addresses idx, maddr_t phys, pgprot_t flags)
 {
+	pte_t pte;
 	unsigned long address = __fix_to_virt(idx);
 
 	if (idx >= __end_of_fixed_addresses) {
@@ -187,12 +188,14 @@ void __set_fixmap (enum fixed_addresses 
 #ifdef CONFIG_X86_F00F_BUG
 	case FIX_F00F_IDT:
 #endif
-		set_pte_pfn(address, phys >> PAGE_SHIFT, flags);
+		pte = pfn_pte(phys >> PAGE_SHIFT, flags);
 		break;
 	default:
-		set_pte_pfn_ma(address, phys >> PAGE_SHIFT, flags);
+		pte = pfn_pte_ma(phys >> PAGE_SHIFT, flags);
 		break;
 	}
+	if (HYPERVISOR_update_va_mapping(address, pte, UVMF_INVLPG|UVMF_ALL))
+		BUG();
 	nr_fixmaps++;
 }
 
