diff options
-rw-r--r-- | arch/x86_64/mm/pageattr.c | 4 | ||||
-rw-r--r-- | include/asm-x86_64/pgtable.h | 9 |
2 files changed, 3 insertions, 10 deletions
diff --git a/arch/x86_64/mm/pageattr.c b/arch/x86_64/mm/pageattr.c index ccb91dd996a9..65c5eaa59905 100644 --- a/arch/x86_64/mm/pageattr.c +++ b/arch/x86_64/mm/pageattr.c | |||
@@ -107,6 +107,7 @@ static void revert_page(unsigned long address, pgprot_t ref_prot) | |||
107 | pud_t *pud; | 107 | pud_t *pud; |
108 | pmd_t *pmd; | 108 | pmd_t *pmd; |
109 | pte_t large_pte; | 109 | pte_t large_pte; |
110 | unsigned long pfn; | ||
110 | 111 | ||
111 | pgd = pgd_offset_k(address); | 112 | pgd = pgd_offset_k(address); |
112 | BUG_ON(pgd_none(*pgd)); | 113 | BUG_ON(pgd_none(*pgd)); |
@@ -114,7 +115,8 @@ static void revert_page(unsigned long address, pgprot_t ref_prot) | |||
114 | BUG_ON(pud_none(*pud)); | 115 | BUG_ON(pud_none(*pud)); |
115 | pmd = pmd_offset(pud, address); | 116 | pmd = pmd_offset(pud, address); |
116 | BUG_ON(pmd_val(*pmd) & _PAGE_PSE); | 117 | BUG_ON(pmd_val(*pmd) & _PAGE_PSE); |
117 | large_pte = mk_pte_phys(__pa(address) & LARGE_PAGE_MASK, ref_prot); | 118 | pfn = (__pa(address) & LARGE_PAGE_MASK) >> PAGE_SHIFT; |
119 | large_pte = pfn_pte(pfn, ref_prot); | ||
118 | large_pte = pte_mkhuge(large_pte); | 120 | large_pte = pte_mkhuge(large_pte); |
119 | set_pte((pte_t *)pmd, large_pte); | 121 | set_pte((pte_t *)pmd, large_pte); |
120 | } | 122 | } |
diff --git a/include/asm-x86_64/pgtable.h b/include/asm-x86_64/pgtable.h index 59901c690a0d..730bd6028416 100644 --- a/include/asm-x86_64/pgtable.h +++ b/include/asm-x86_64/pgtable.h | |||
@@ -359,15 +359,6 @@ static inline int pmd_large(pmd_t pte) { | |||
359 | #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) | 359 | #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) |
360 | #define mk_pte_huge(entry) (pte_val(entry) |= _PAGE_PRESENT | _PAGE_PSE) | 360 | #define mk_pte_huge(entry) (pte_val(entry) |= _PAGE_PRESENT | _PAGE_PSE) |
361 | 361 | ||
362 | /* physical address -> PTE */ | ||
363 | static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot) | ||
364 | { | ||
365 | pte_t pte; | ||
366 | pte_val(pte) = physpage | pgprot_val(pgprot); | ||
367 | pte_val(pte) &= __supported_pte_mask; | ||
368 | return pte; | ||
369 | } | ||
370 | |||
371 | /* Change flags of a PTE */ | 362 | /* Change flags of a PTE */ |
372 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 363 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
373 | { | 364 | { |