Loading arch/x86/include/asm/xen/page.h +8 −1 Original line number Diff line number Diff line Loading @@ -41,10 +41,17 @@ extern bool set_phys_to_machine(unsigned long pfn, unsigned long mfn); static inline unsigned long pfn_to_mfn(unsigned long pfn) { unsigned long mfn; if (xen_feature(XENFEAT_auto_translated_physmap)) return pfn; return get_phys_to_machine(pfn) & ~FOREIGN_FRAME_BIT; mfn = get_phys_to_machine(pfn); if (mfn != INVALID_P2M_ENTRY) mfn &= ~FOREIGN_FRAME_BIT; return mfn; } static inline int phys_to_machine_mapping_valid(unsigned long pfn) Loading arch/x86/xen/mmu.c +14 −1 Original line number Diff line number Diff line Loading @@ -745,7 +745,20 @@ static pteval_t pte_pfn_to_mfn(pteval_t val) if (val & _PAGE_PRESENT) { unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; pteval_t flags = val & PTE_FLAGS_MASK; val = ((pteval_t)pfn_to_mfn(pfn) << PAGE_SHIFT) | flags; unsigned long mfn = pfn_to_mfn(pfn); /* * If there's no mfn for the pfn, then just create an * empty non-present pte. Unfortunately this loses * information about the original pfn, so * pte_mfn_to_pfn is asymmetric. */ if (unlikely(mfn == INVALID_P2M_ENTRY)) { mfn = 0; flags = 0; } val = ((pteval_t)mfn << PAGE_SHIFT) | flags; } return val; Loading Loading
arch/x86/include/asm/xen/page.h +8 −1 Original line number Diff line number Diff line Loading @@ -41,10 +41,17 @@ extern bool set_phys_to_machine(unsigned long pfn, unsigned long mfn); static inline unsigned long pfn_to_mfn(unsigned long pfn) { unsigned long mfn; if (xen_feature(XENFEAT_auto_translated_physmap)) return pfn; return get_phys_to_machine(pfn) & ~FOREIGN_FRAME_BIT; mfn = get_phys_to_machine(pfn); if (mfn != INVALID_P2M_ENTRY) mfn &= ~FOREIGN_FRAME_BIT; return mfn; } static inline int phys_to_machine_mapping_valid(unsigned long pfn) Loading
arch/x86/xen/mmu.c +14 −1 Original line number Diff line number Diff line Loading @@ -745,7 +745,20 @@ static pteval_t pte_pfn_to_mfn(pteval_t val) if (val & _PAGE_PRESENT) { unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT; pteval_t flags = val & PTE_FLAGS_MASK; val = ((pteval_t)pfn_to_mfn(pfn) << PAGE_SHIFT) | flags; unsigned long mfn = pfn_to_mfn(pfn); /* * If there's no mfn for the pfn, then just create an * empty non-present pte. Unfortunately this loses * information about the original pfn, so * pte_mfn_to_pfn is asymmetric. */ if (unlikely(mfn == INVALID_P2M_ENTRY)) { mfn = 0; flags = 0; } val = ((pteval_t)mfn << PAGE_SHIFT) | flags; } return val; Loading