123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #ifndef _X86_64_PGALLOC_H
- #define _X86_64_PGALLOC_H
- #include <asm/pda.h>
- static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
- {
- set_pmd(pmd, __pmd(_PAGE_TABLE | __pa(pte)));
- }
- static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
- {
- set_pud(pud, __pud(_PAGE_TABLE | __pa(pmd)));
- }
- static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
- {
- set_pgd(pgd, __pgd(_PAGE_TABLE | __pa(pud)));
- }
- #define pmd_pgtable(pmd) pmd_page(pmd)
- static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
- {
- set_pmd(pmd, __pmd(_PAGE_TABLE | (page_to_pfn(pte) << PAGE_SHIFT)));
- }
- static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
- {
- BUG_ON((unsigned long)pmd & (PAGE_SIZE-1));
- free_page((unsigned long)pmd);
- }
- static inline pmd_t *pmd_alloc_one (struct mm_struct *mm, unsigned long addr)
- {
- return (pmd_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
- }
- static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
- {
- return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
- }
- static inline void pud_free(struct mm_struct *mm, pud_t *pud)
- {
- BUG_ON((unsigned long)pud & (PAGE_SIZE-1));
- free_page((unsigned long)pud);
- }
- /* Should really implement gc for free page table pages. This could be
- done with a reference count in struct page. */
- static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
- {
- BUG_ON((unsigned long)pte & (PAGE_SIZE-1));
- free_page((unsigned long)pte);
- }
- static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
- {
- pgtable_page_dtor(pte);
- __free_page(pte);
- }
- extern void __pte_free_tlb(struct mmu_gather *tlb, struct page *pte);
- extern void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmd);
- extern void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pud);
- #endif /* _X86_64_PGALLOC_H */
|