| 1 |
|
| 2 | |
| 3 | * reorganization around 2.3.39, routines moved from sun3_pgtable.h
|
| 4 | *
|
| 5 | *
|
| 6 | * 02/27/2002 -- Modified to support "highpte" implementation in 2.5.5 (Sam)
|
| 7 | *
|
| 8 | * moved 1/26/2000 Sam Creasey
|
| 9 |
|
| 10 |
|
| 11 | #ifndef _SUN3_PGALLOC_H
|
| 12 | #define _SUN3_PGALLOC_H
|
| 13 |
|
| 14 | #include <asm/tlb.h>
|
| 15 |
|
| 16 | #include <asm-generic/pgalloc.h>
|
| 17 |
|
| 18 | extern const char bad_pmd_string[];
|
| 19 |
|
| 20 | #define __pte_free_tlb(tlb, pte, addr) \
|
| 21 | tlb_remove_ptdesc((tlb), page_ptdesc(pte))
|
| 22 |
|
| 23 | static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
|
| 24 | {
|
| 25 | pmd_val(*pmd) = __pa((unsigned long)pte);
|
| 26 | }
|
| 27 |
|
| 28 | static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page)
|
| 29 | {
|
| 30 | pmd_val(*pmd) = __pa((unsigned long)page_address(page));
|
| 31 | }
|
| 32 |
|
| 33 | |
| 34 | * allocating and freeing a pmd is trivial: the 1-entry pmd is
|
| 35 | * inside the pgd, so has no extra memory associated with it.
|
| 36 |
|
| 37 | #define pmd_free(mm, x) do { } while (0)
|
| 38 |
|
| 39 | static inline pgd_t * pgd_alloc(struct mm_struct *mm)
|
| 40 | {
|
| 41 | pgd_t *new_pgd;
|
| 42 |
|
| 43 | new_pgd = __pgd_alloc(mm, 0);
|
| 44 | if (likely(new_pgd != NULL)) {
|
| 45 | memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE);
|
| 46 | memset(new_pgd, 0, (PAGE_OFFSET >> PGDIR_SHIFT));
|
| 47 | }
|
| 48 | return new_pgd;
|
| 49 | }
|
| 50 |
|
| 51 | #endif
|