powerpc: Improve (in|out)_[bl]eXX() asm code
[sfrench/cifs-2.6.git] / arch / ppc / mm / pgtable.c
index fadacfd188068e70a787c623cfe81b9a5581f15a..03a79bff1271fee749e842d56ca21df176e2674d 100644 (file)
@@ -74,7 +74,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
        return ret;
 }
 
-void pgd_free(pgd_t *pgd)
+void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 {
        free_pages((unsigned long)pgd, PGDIR_ORDER);
 }
@@ -95,7 +95,7 @@ __init_refok pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long add
        return pte;
 }
 
-struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
+pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
 {
        struct page *ptepage;
 
@@ -106,12 +106,14 @@ struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address)
 #endif
 
        ptepage = alloc_pages(flags, 0);
-       if (ptepage)
+       if (ptepage) {
                clear_highpage(ptepage);
+               pgtable_page_ctor(ptepage);
+       }
        return ptepage;
 }
 
-void pte_free_kernel(pte_t *pte)
+void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 {
 #ifdef CONFIG_SMP
        hash_page_sync();
@@ -119,11 +121,12 @@ void pte_free_kernel(pte_t *pte)
        free_page((unsigned long)pte);
 }
 
-void pte_free(struct page *ptepage)
+void pte_free(struct mm_struct *mm, pgtable_t ptepage)
 {
 #ifdef CONFIG_SMP
        hash_page_sync();
 #endif
+       pgtable_page_dtor(ptepage);
        __free_page(ptepage);
 }