VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / include / asm-sparc64 / pgalloc.h
index 8354a05..fa5c704 100644 (file)
@@ -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()