pgalloc.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
  3. * Copyright 2003 PathScale, Inc.
  4. * Derived from include/asm-i386/pgalloc.h and include/asm-i386/pgtable.h
  5. * Licensed under the GPL
  6. */
  7. #ifndef __UM_PGALLOC_H
  8. #define __UM_PGALLOC_H
  9. #include <linux/mm.h>
  10. #define pmd_populate_kernel(mm, pmd, pte) \
  11. set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte)))
  12. #define pmd_populate(mm, pmd, pte) \
  13. set_pmd(pmd, __pmd(_PAGE_TABLE + \
  14. ((unsigned long long)page_to_pfn(pte) << \
  15. (unsigned long long) PAGE_SHIFT)))
  16. #define pmd_pgtable(pmd) pmd_page(pmd)
  17. /*
  18. * Allocate and free page tables.
  19. */
  20. extern pgd_t *pgd_alloc(struct mm_struct *);
  21. extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
  22. extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long);
  23. extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long);
  24. static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
  25. {
  26. free_page((unsigned long) pte);
  27. }
  28. static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
  29. {
  30. pgtable_page_dtor(pte);
  31. __free_page(pte);
  32. }
  33. #define __pte_free_tlb(tlb,pte, address) \
  34. do { \
  35. pgtable_page_dtor(pte); \
  36. tlb_remove_page((tlb),(pte)); \
  37. } while (0)
  38. #ifdef CONFIG_3_LEVEL_PGTABLES
  39. static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
  40. {
  41. free_page((unsigned long)pmd);
  42. }
  43. #define __pmd_free_tlb(tlb,x, address) tlb_remove_page((tlb),virt_to_page(x))
  44. #endif
  45. #define check_pgt_cache() do { } while (0)
  46. #endif