pgalloc.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. #include "asm/fixmap.h"
  11. #define pmd_populate_kernel(mm, pmd, pte) \
  12. set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte)))
  13. #define pmd_populate(mm, pmd, pte) \
  14. set_pmd(pmd, __pmd(_PAGE_TABLE + \
  15. ((unsigned long long)page_to_pfn(pte) << \
  16. (unsigned long long) PAGE_SHIFT)))
  17. #define pmd_pgtable(pmd) pmd_page(pmd)
  18. /*
  19. * Allocate and free page tables.
  20. */
  21. extern pgd_t *pgd_alloc(struct mm_struct *);
  22. extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
  23. extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long);
  24. extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long);
  25. static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
  26. {
  27. free_page((unsigned long) pte);
  28. }
  29. static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
  30. {
  31. pgtable_page_dtor(pte);
  32. __free_page(pte);
  33. }
  34. #define __pte_free_tlb(tlb,pte, address) \
  35. do { \
  36. pgtable_page_dtor(pte); \
  37. tlb_remove_page((tlb),(pte)); \
  38. } while (0)
  39. #ifdef CONFIG_3_LEVEL_PGTABLES
  40. static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
  41. {
  42. free_page((unsigned long)pmd);
  43. }
  44. #define __pmd_free_tlb(tlb,x, address) tlb_remove_page((tlb),virt_to_page(x))
  45. #endif
  46. #define check_pgt_cache() do { } while (0)
  47. #endif