linux/x86: utilize lookup_address() for virt_to_ptep()
PATCH 1/1 linux/x86: utilize lookup_address() for virt_to_ptep()
As usual, written and tested on 2.6.25.2 and made apply to the 2.6.18 tree without further testing.
Signed-off-by Jan Beulich <[email protected]>
arch/x86_64/mm/pageattr-xen.c +1 -1
@@ -276,7 +276,7 @@ }#endif /* CONFIG_XEN */ -static inline pte_t *lookup_address (unsigned long address) +pte_t *lookup_address (unsigned long address) {pgd_t *pgd =pgd_offset_k (address);pud_t *pud;
include/asm-i386/mach-xen/asm/pgtable.h +10 -13
@@ -477,19 +477,16 @@ void make_page_writable(void *va, unsignvoid make_pages_readonly (void *va,unsigned int nr,unsigned int feature);void make_pages_writable (void *va,unsigned int nr,unsigned int feature); -#define virt_to_ptep (__va) \ -({ \ - pgd_t *__pgd = pgd_offset_k((unsigned long)(__va)); \ - pud_t *__pud = pud_offset(__pgd, (unsigned long)(__va)); \ - pmd_t *__pmd = pmd_offset(__pud, (unsigned long)(__va)); \ - pte_offset_kernel(__pmd, (unsigned long)(__va)); \ -}) - -#define arbitrary_virt_to_machine (__va) \ -({ \ - maddr_t m = (maddr_t)pte_mfn(*virt_to_ptep(__va)) << PAGE_SHIFT;\ - m | ((unsigned long)(__va) & (PAGE_SIZE-1)); \ -}) +#define virt_to_ptep (va) \ +({ \ + pte_t *__ptep = lookup_address((unsigned long)(va)); \ + BUG_ON(!__ptep || !pte_present(*__ptep)); \ + __ptep; \ +}) + +#define arbitrary_virt_to_machine (va) \ + (((maddr_t)pte_mfn(*virt_to_ptep(va)) << PAGE_SHIFT) \ + | ((unsigned long)(va) & (PAGE_SIZE - 1)))#endif /* !__ASSEMBLY__ */
include/asm-x86_64/mach-xen/asm/pgtable.h +12 -13
@@ -18,19 +18,18 @@extern void xen_init_pt (void ); -#define virt_to_ptep (__va) \ -({ \ - pgd_t *__pgd = pgd_offset_k((unsigned long)(__va)); \ - pud_t *__pud = pud_offset(__pgd, (unsigned long)(__va)); \ - pmd_t *__pmd = pmd_offset(__pud, (unsigned long)(__va)); \ - pte_offset_kernel(__pmd, (unsigned long)(__va)); \ -}) - -#define arbitrary_virt_to_machine (__va) \ -({ \ - maddr_t m = (maddr_t)pte_mfn(*virt_to_ptep(__va)) << PAGE_SHIFT;\ - m | ((unsigned long)(__va) & (PAGE_SIZE-1)); \ -}) +extern pte_t *lookup_address (unsigned long address); + +#define virt_to_ptep (va) \ +({ \ + pte_t *__ptep = lookup_address((unsigned long)(va)); \ + BUG_ON(!__ptep || !pte_present(*__ptep)); \ + __ptep; \ +}) + +#define arbitrary_virt_to_machine (va) \ + (((maddr_t)pte_mfn(*virt_to_ptep(va)) << PAGE_SHIFT) \ + | ((unsigned long)(va) & (PAGE_SIZE - 1)))#endif extern pud_t level3_kernel_pgt[512 ];