X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-sparc64%2Fpgalloc.h;h=fa5c704dedaf2555d3d2a5f94ce2f7ef0afec432;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=8354a057ba88d24e7681dcd5433e9bd15242004b;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/include/asm-sparc64/pgalloc.h b/include/asm-sparc64/pgalloc.h index 8354a057b..fa5c704de 100644 --- a/include/asm-sparc64/pgalloc.h +++ b/include/asm-sparc64/pgalloc.h @@ -188,15 +188,30 @@ static __inline__ void free_pmd_slow(pmd_t *pmd) #define pmd_populate(MM,PMD,PTE_PAGE) \ pmd_populate_kernel(MM,PMD,page_address(PTE_PAGE)) -extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address); +extern pte_t *__pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address); + +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) +{ + pte_t *pte = __pte_alloc_one_kernel(mm, address); + if (pte) { + struct page *page = virt_to_page(pte); + page->mapping = (void *) mm; + page->index = address & PMD_MASK; + } + return pte; +} static inline struct page * pte_alloc_one(struct mm_struct *mm, unsigned long addr) { - pte_t *pte = pte_alloc_one_kernel(mm, addr); - if (pte) - return virt_to_page(pte); - return 0; + pte_t *pte = __pte_alloc_one_kernel(mm, addr); + if (pte) { + struct page *page = virt_to_page(pte); + page->mapping = (void *) mm; + page->index = addr & PMD_MASK; + return page; + } + return NULL; } static __inline__ pte_t *pte_alloc_one_fast(struct mm_struct *mm, unsigned long address) @@ -230,8 +245,18 @@ static __inline__ void free_pte_slow(pte_t *pte) free_page((unsigned long)pte); } -#define pte_free_kernel(pte) free_pte_fast(pte) -#define pte_free(pte) free_pte_fast(page_address(pte)) +static inline void pte_free_kernel(pte_t *pte) +{ + virt_to_page(pte)->mapping = NULL; + free_pte_fast(pte); +} + +static inline void pte_free(struct page *ptepage) +{ + ptepage->mapping = NULL; + free_pte_fast(page_address(ptepage)); +} + #define pmd_free(pmd) free_pmd_fast(pmd) #define pgd_free(pgd) free_pgd_fast(pgd) #define pgd_alloc(mm) get_pgd_fast()