|
@@ -66,9 +66,6 @@ extern void paging_init(void);
|
|
printk("%s:%d: bad pgd %p(%016lx).\n", \
|
|
printk("%s:%d: bad pgd %p(%016lx).\n", \
|
|
__FILE__, __LINE__, &(e), pgd_val(e))
|
|
__FILE__, __LINE__, &(e), pgd_val(e))
|
|
|
|
|
|
-#define pgd_none(x) (!pgd_val(x))
|
|
|
|
-#define pud_none(x) (!pud_val(x))
|
|
|
|
-
|
|
|
|
struct mm_struct;
|
|
struct mm_struct;
|
|
|
|
|
|
void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte);
|
|
void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte);
|
|
@@ -133,8 +130,6 @@ static inline void native_pgd_clear(pgd_t *pgd)
|
|
native_set_pgd(pgd, native_make_pgd(0));
|
|
native_set_pgd(pgd, native_make_pgd(0));
|
|
}
|
|
}
|
|
|
|
|
|
-#define pte_same(a, b) ((a).pte == (b).pte)
|
|
|
|
-
|
|
|
|
#endif /* !__ASSEMBLY__ */
|
|
#endif /* !__ASSEMBLY__ */
|
|
|
|
|
|
#define PMD_SIZE (_AC(1, UL) << PMD_SHIFT)
|
|
#define PMD_SIZE (_AC(1, UL) << PMD_SHIFT)
|
|
@@ -155,26 +150,6 @@ static inline void native_pgd_clear(pgd_t *pgd)
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
#ifndef __ASSEMBLY__
|
|
|
|
|
|
-static inline int pgd_bad(pgd_t pgd)
|
|
|
|
-{
|
|
|
|
- return (pgd_val(pgd) & ~(PTE_PFN_MASK | _PAGE_USER)) != _KERNPG_TABLE;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static inline int pud_bad(pud_t pud)
|
|
|
|
-{
|
|
|
|
- return (pud_val(pud) & ~(PTE_PFN_MASK | _PAGE_USER)) != _KERNPG_TABLE;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static inline int pmd_bad(pmd_t pmd)
|
|
|
|
-{
|
|
|
|
- return (pmd_val(pmd) & ~(PTE_PFN_MASK | _PAGE_USER)) != _KERNPG_TABLE;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#define pte_none(x) (!pte_val((x)))
|
|
|
|
-#define pte_present(x) (pte_val((x)) & (_PAGE_PRESENT | _PAGE_PROTNONE))
|
|
|
|
-
|
|
|
|
-#define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) /* FIXME: is this right? */
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Conversion functions: convert a page and protection to a page entry,
|
|
* Conversion functions: convert a page and protection to a page entry,
|
|
* and a page entry and page directory to the page they refer to.
|
|
* and a page entry and page directory to the page they refer to.
|
|
@@ -183,41 +158,12 @@ static inline int pmd_bad(pmd_t pmd)
|
|
/*
|
|
/*
|
|
* Level 4 access.
|
|
* Level 4 access.
|
|
*/
|
|
*/
|
|
-#define pgd_page_vaddr(pgd) \
|
|
|
|
- ((unsigned long)__va((unsigned long)pgd_val((pgd)) & PTE_PFN_MASK))
|
|
|
|
-#define pgd_page(pgd) (pfn_to_page(pgd_val((pgd)) >> PAGE_SHIFT))
|
|
|
|
-#define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT)
|
|
|
|
static inline int pgd_large(pgd_t pgd) { return 0; }
|
|
static inline int pgd_large(pgd_t pgd) { return 0; }
|
|
#define mk_kernel_pgd(address) __pgd((address) | _KERNPG_TABLE)
|
|
#define mk_kernel_pgd(address) __pgd((address) | _KERNPG_TABLE)
|
|
|
|
|
|
/* PUD - Level3 access */
|
|
/* PUD - Level3 access */
|
|
-/* to find an entry in a page-table-directory. */
|
|
|
|
-#define pud_page_vaddr(pud) \
|
|
|
|
- ((unsigned long)__va(pud_val((pud)) & PHYSICAL_PAGE_MASK))
|
|
|
|
-#define pud_page(pud) (pfn_to_page(pud_val((pud)) >> PAGE_SHIFT))
|
|
|
|
-#define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD - 1))
|
|
|
|
-#define pud_offset(pgd, address) \
|
|
|
|
- ((pud_t *)pgd_page_vaddr(*(pgd)) + pud_index((address)))
|
|
|
|
-#define pud_present(pud) (pud_val((pud)) & _PAGE_PRESENT)
|
|
|
|
-
|
|
|
|
-static inline int pud_large(pud_t pte)
|
|
|
|
-{
|
|
|
|
- return (pud_val(pte) & (_PAGE_PSE | _PAGE_PRESENT)) ==
|
|
|
|
- (_PAGE_PSE | _PAGE_PRESENT);
|
|
|
|
-}
|
|
|
|
|
|
|
|
/* PMD - Level 2 access */
|
|
/* PMD - Level 2 access */
|
|
-#define pmd_page_vaddr(pmd) ((unsigned long) __va(pmd_val((pmd)) & PTE_PFN_MASK))
|
|
|
|
-#define pmd_page(pmd) (pfn_to_page(pmd_val((pmd)) >> PAGE_SHIFT))
|
|
|
|
-
|
|
|
|
-#define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD - 1))
|
|
|
|
-#define pmd_offset(dir, address) ((pmd_t *)pud_page_vaddr(*(dir)) + \
|
|
|
|
- pmd_index(address))
|
|
|
|
-#define pmd_none(x) (!pmd_val((x)))
|
|
|
|
-#define pmd_present(x) (pmd_val((x)) & _PAGE_PRESENT)
|
|
|
|
-#define pfn_pmd(nr, prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val((prot))))
|
|
|
|
-#define pmd_pfn(x) ((pmd_val((x)) & __PHYSICAL_MASK) >> PAGE_SHIFT)
|
|
|
|
-
|
|
|
|
#define pte_to_pgoff(pte) ((pte_val((pte)) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT)
|
|
#define pte_to_pgoff(pte) ((pte_val((pte)) & PHYSICAL_PAGE_MASK) >> PAGE_SHIFT)
|
|
#define pgoff_to_pte(off) ((pte_t) { .pte = ((off) << PAGE_SHIFT) | \
|
|
#define pgoff_to_pte(off) ((pte_t) { .pte = ((off) << PAGE_SHIFT) | \
|
|
_PAGE_FILE })
|
|
_PAGE_FILE })
|
|
@@ -225,13 +171,6 @@ static inline int pud_large(pud_t pte)
|
|
|
|
|
|
/* PTE - Level 1 access. */
|
|
/* PTE - Level 1 access. */
|
|
|
|
|
|
-/* page, protection -> pte */
|
|
|
|
-#define mk_pte(page, pgprot) pfn_pte(page_to_pfn((page)), (pgprot))
|
|
|
|
-
|
|
|
|
-#define pte_index(address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
|
|
|
-#define pte_offset_kernel(dir, address) ((pte_t *) pmd_page_vaddr(*(dir)) + \
|
|
|
|
- pte_index((address)))
|
|
|
|
-
|
|
|
|
/* x86-64 always has all page tables mapped. */
|
|
/* x86-64 always has all page tables mapped. */
|
|
#define pte_offset_map(dir, address) pte_offset_kernel((dir), (address))
|
|
#define pte_offset_map(dir, address) pte_offset_kernel((dir), (address))
|
|
#define pte_offset_map_nested(dir, address) pte_offset_kernel((dir), (address))
|
|
#define pte_offset_map_nested(dir, address) pte_offset_kernel((dir), (address))
|
|
@@ -265,9 +204,6 @@ extern int direct_gbpages;
|
|
extern int kern_addr_valid(unsigned long addr);
|
|
extern int kern_addr_valid(unsigned long addr);
|
|
extern void cleanup_highmap(void);
|
|
extern void cleanup_highmap(void);
|
|
|
|
|
|
-#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
|
|
|
|
- remap_pfn_range(vma, vaddr, pfn, size, prot)
|
|
|
|
-
|
|
|
|
#define HAVE_ARCH_UNMAPPED_AREA
|
|
#define HAVE_ARCH_UNMAPPED_AREA
|
|
#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
|
|
#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
|
|
|
|
|