sun3_pgalloc.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* sun3_pgalloc.h --
  2. * reorganization around 2.3.39, routines moved from sun3_pgtable.h
  3. *
  4. *
  5. * 02/27/2002 -- Modified to support "highpte" implementation in 2.5.5 (Sam)
  6. *
  7. * moved 1/26/2000 Sam Creasey
  8. */
  9. #ifndef _SUN3_PGALLOC_H
  10. #define _SUN3_PGALLOC_H
  11. #include <asm/tlb.h>
  12. /* FIXME - when we get this compiling */
  13. /* erm, now that it's compiling, what do we do with it? */
  14. #define _KERNPG_TABLE 0
  15. extern const char bad_pmd_string[];
  16. #define pmd_alloc_one(mm,address) ({ BUG(); ((pmd_t *)2); })
  17. static inline void pte_free_kernel(pte_t * pte)
  18. {
  19. free_page((unsigned long) pte);
  20. }
  21. static inline void pte_free(struct page *page)
  22. {
  23. __free_page(page);
  24. }
  25. #define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
  26. static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
  27. unsigned long address)
  28. {
  29. unsigned long page = __get_free_page(GFP_KERNEL|__GFP_REPEAT);
  30. if (!page)
  31. return NULL;
  32. memset((void *)page, 0, PAGE_SIZE);
  33. return (pte_t *) (page);
  34. }
  35. static inline struct page *pte_alloc_one(struct mm_struct *mm,
  36. unsigned long address)
  37. {
  38. struct page *page = alloc_pages(GFP_KERNEL|__GFP_REPEAT, 0);
  39. if (page == NULL)
  40. return NULL;
  41. clear_highpage(page);
  42. return page;
  43. }
  44. static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
  45. {
  46. pmd_val(*pmd) = __pa((unsigned long)pte);
  47. }
  48. static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *page)
  49. {
  50. pmd_val(*pmd) = __pa((unsigned long)page_address(page));
  51. }
  52. /*
  53. * allocating and freeing a pmd is trivial: the 1-entry pmd is
  54. * inside the pgd, so has no extra memory associated with it.
  55. */
  56. #define pmd_free(x) do { } while (0)
  57. #define __pmd_free_tlb(tlb, x) do { } while (0)
  58. static inline void pgd_free(pgd_t * pgd)
  59. {
  60. free_page((unsigned long) pgd);
  61. }
  62. static inline pgd_t * pgd_alloc(struct mm_struct *mm)
  63. {
  64. pgd_t *new_pgd;
  65. new_pgd = (pgd_t *)get_zeroed_page(GFP_KERNEL);
  66. memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE);
  67. memset(new_pgd, 0, (PAGE_OFFSET >> PGDIR_SHIFT));
  68. return new_pgd;
  69. }
  70. #define pgd_populate(mm, pmd, pte) BUG()
  71. #endif /* SUN3_PGALLOC_H */