pgalloc.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #ifndef _ALPHA_PGALLOC_H
  2. #define _ALPHA_PGALLOC_H
  3. #include <linux/config.h>
  4. #include <linux/mm.h>
  5. #include <linux/mmzone.h>
  6. /*
  7. * Allocate and free page tables. The xxx_kernel() versions are
  8. * used to allocate a kernel page table - this turns on ASN bits
  9. * if any.
  10. */
  11. static inline void
  12. pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte)
  13. {
  14. pmd_set(pmd, (pte_t *)(page_to_pa(pte) + PAGE_OFFSET));
  15. }
  16. static inline void
  17. pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
  18. {
  19. pmd_set(pmd, pte);
  20. }
  21. static inline void
  22. pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd)
  23. {
  24. pgd_set(pgd, pmd);
  25. }
  26. extern pgd_t *pgd_alloc(struct mm_struct *mm);
  27. static inline void
  28. pgd_free(pgd_t *pgd)
  29. {
  30. free_page((unsigned long)pgd);
  31. }
  32. static inline pmd_t *
  33. pmd_alloc_one(struct mm_struct *mm, unsigned long address)
  34. {
  35. pmd_t *ret = (pmd_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
  36. return ret;
  37. }
  38. static inline void
  39. pmd_free(pmd_t *pmd)
  40. {
  41. free_page((unsigned long)pmd);
  42. }
  43. extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr);
  44. static inline void
  45. pte_free_kernel(pte_t *pte)
  46. {
  47. free_page((unsigned long)pte);
  48. }
  49. static inline struct page *
  50. pte_alloc_one(struct mm_struct *mm, unsigned long addr)
  51. {
  52. pte_t *pte = pte_alloc_one_kernel(mm, addr);
  53. if (pte)
  54. return virt_to_page(pte);
  55. return NULL;
  56. }
  57. static inline void
  58. pte_free(struct page *page)
  59. {
  60. __free_page(page);
  61. }
  62. #define check_pgt_cache() do { } while (0)
  63. #endif /* _ALPHA_PGALLOC_H */