pgalloc.h 1.5 KB

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