aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/xen/mmu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 5f76c0acb2c..d957dce61ed 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -320,8 +320,13 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
320{ 320{
321 if (val & _PAGE_PRESENT) { 321 if (val & _PAGE_PRESENT) {
322 unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; 322 unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
323 unsigned long pfn = mfn_to_pfn(mfn);
324
323 pteval_t flags = val & PTE_FLAGS_MASK; 325 pteval_t flags = val & PTE_FLAGS_MASK;
324 val = ((pteval_t)mfn_to_pfn(mfn) << PAGE_SHIFT) | flags; 326 if (unlikely(pfn == ~0))
327 val = flags & ~_PAGE_PRESENT;
328 else
329 val = ((pteval_t)pfn << PAGE_SHIFT) | flags;
325 } 330 }
326 331
327 return val; 332 return val;