From 094cfe430457e15d34098af6a04e7f9af950d414 Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Thu, 1 Sep 2016 23:35:46 +0200 Subject: pmap: fix map window creation on xen * i386/intel/pmap.c (pmap_get_mapwindow, pmap_put_mapwindow): Use the appropriate xen hypercall if building for paravirtualized page table management. --- i386/intel/pmap.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/i386/intel/pmap.c b/i386/intel/pmap.c index be1dec7a..e85e5480 100644 --- a/i386/intel/pmap.c +++ b/i386/intel/pmap.c @@ -891,13 +891,20 @@ pmap_mapwindow_t *pmap_get_mapwindow(pt_entry_t entry) { pmap_mapwindow_t *map; + assert(entry != 0); + /* Find an empty one. */ for (map = &mapwindows[0]; map < &mapwindows[sizeof (mapwindows) / sizeof (*mapwindows)]; map++) if (!(*map->entry)) break; assert(map < &mapwindows[sizeof (mapwindows) / sizeof (*mapwindows)]); +#ifdef MACH_PV_PAGETABLES + if (!hyp_mmu_update_pte(kv_to_ma(map->entry), pa_to_ma(entry))) + panic("pmap_get_mapwindow"); +#else /* MACH_PV_PAGETABLES */ WRITE_PTE(map->entry, entry); +#endif /* MACH_PV_PAGETABLES */ return map; } @@ -906,7 +913,12 @@ pmap_mapwindow_t *pmap_get_mapwindow(pt_entry_t entry) */ void pmap_put_mapwindow(pmap_mapwindow_t *map) { +#ifdef MACH_PV_PAGETABLES + if (!hyp_mmu_update_pte(kv_to_ma(map->entry), 0)) + panic("pmap_put_mapwindow"); +#else /* MACH_PV_PAGETABLES */ WRITE_PTE(map->entry, 0); +#endif /* MACH_PV_PAGETABLES */ PMAP_UPDATE_TLBS(kernel_pmap, map->vaddr, map->vaddr + PAGE_SIZE); } -- cgit v1.2.3