diff options
Diffstat (limited to 'arch/sparc/mm')
-rw-r--r-- | arch/sparc/mm/srmmu.c | 10 | ||||
-rw-r--r-- | arch/sparc/mm/sun4c.c | 14 |
2 files changed, 17 insertions, 7 deletions
diff --git a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c index dc98e3844a0a..23d3291a3e81 100644 --- a/arch/sparc/mm/srmmu.c +++ b/arch/sparc/mm/srmmu.c | |||
@@ -489,14 +489,17 @@ srmmu_pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) | |||
489 | return (pte_t *)srmmu_get_nocache(PTE_SIZE, PTE_SIZE); | 489 | return (pte_t *)srmmu_get_nocache(PTE_SIZE, PTE_SIZE); |
490 | } | 490 | } |
491 | 491 | ||
492 | static struct page * | 492 | static pgtable_t |
493 | srmmu_pte_alloc_one(struct mm_struct *mm, unsigned long address) | 493 | srmmu_pte_alloc_one(struct mm_struct *mm, unsigned long address) |
494 | { | 494 | { |
495 | unsigned long pte; | 495 | unsigned long pte; |
496 | struct page *page; | ||
496 | 497 | ||
497 | if ((pte = (unsigned long)srmmu_pte_alloc_one_kernel(mm, address)) == 0) | 498 | if ((pte = (unsigned long)srmmu_pte_alloc_one_kernel(mm, address)) == 0) |
498 | return NULL; | 499 | return NULL; |
499 | return pfn_to_page( __nocache_pa(pte) >> PAGE_SHIFT ); | 500 | page = pfn_to_page( __nocache_pa(pte) >> PAGE_SHIFT ); |
501 | pgtable_page_ctor(page); | ||
502 | return page; | ||
500 | } | 503 | } |
501 | 504 | ||
502 | static void srmmu_free_pte_fast(pte_t *pte) | 505 | static void srmmu_free_pte_fast(pte_t *pte) |
@@ -504,10 +507,11 @@ static void srmmu_free_pte_fast(pte_t *pte) | |||
504 | srmmu_free_nocache((unsigned long)pte, PTE_SIZE); | 507 | srmmu_free_nocache((unsigned long)pte, PTE_SIZE); |
505 | } | 508 | } |
506 | 509 | ||
507 | static void srmmu_pte_free(struct page *pte) | 510 | static void srmmu_pte_free(pgtable_t pte) |
508 | { | 511 | { |
509 | unsigned long p; | 512 | unsigned long p; |
510 | 513 | ||
514 | pgtable_page_dtor(pte); | ||
511 | p = (unsigned long)page_address(pte); /* Cached address (for test) */ | 515 | p = (unsigned long)page_address(pte); /* Cached address (for test) */ |
512 | if (p == 0) | 516 | if (p == 0) |
513 | BUG(); | 517 | BUG(); |
diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c index 0729305f2f59..c0442e8c4b15 100644 --- a/arch/sparc/mm/sun4c.c +++ b/arch/sparc/mm/sun4c.c | |||
@@ -1947,12 +1947,17 @@ static pte_t *sun4c_pte_alloc_one_kernel(struct mm_struct *mm, unsigned long add | |||
1947 | return pte; | 1947 | return pte; |
1948 | } | 1948 | } |
1949 | 1949 | ||
1950 | static struct page *sun4c_pte_alloc_one(struct mm_struct *mm, unsigned long address) | 1950 | static pgtable_t sun4c_pte_alloc_one(struct mm_struct *mm, unsigned long address) |
1951 | { | 1951 | { |
1952 | pte_t *pte = sun4c_pte_alloc_one_kernel(mm, address); | 1952 | pte_t *pte; |
1953 | struct page *page; | ||
1954 | |||
1955 | pte = sun4c_pte_alloc_one_kernel(mm, address); | ||
1953 | if (pte == NULL) | 1956 | if (pte == NULL) |
1954 | return NULL; | 1957 | return NULL; |
1955 | return virt_to_page(pte); | 1958 | page = virt_to_page(pte); |
1959 | pgtable_page_ctor(page); | ||
1960 | return page; | ||
1956 | } | 1961 | } |
1957 | 1962 | ||
1958 | static inline void sun4c_free_pte_fast(pte_t *pte) | 1963 | static inline void sun4c_free_pte_fast(pte_t *pte) |
@@ -1962,8 +1967,9 @@ static inline void sun4c_free_pte_fast(pte_t *pte) | |||
1962 | pgtable_cache_size++; | 1967 | pgtable_cache_size++; |
1963 | } | 1968 | } |
1964 | 1969 | ||
1965 | static void sun4c_pte_free(struct page *pte) | 1970 | static void sun4c_pte_free(pgtable_t pte) |
1966 | { | 1971 | { |
1972 | pgtable_page_dtor(pte); | ||
1967 | sun4c_free_pte_fast(page_address(pte)); | 1973 | sun4c_free_pte_fast(page_address(pte)); |
1968 | } | 1974 | } |
1969 | 1975 | ||