home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / ia64 / include / asm / pgalloc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.7 KB  |  123 lines

  1. #ifndef _ASM_IA64_PGALLOC_H
  2. #define _ASM_IA64_PGALLOC_H
  3.  
  4. /*
  5.  * This file contains the functions and defines necessary to allocate
  6.  * page tables.
  7.  *
  8.  * This hopefully works with any (fixed) ia-64 page-size, as defined
  9.  * in <asm/page.h> (currently 8192).
  10.  *
  11.  * Copyright (C) 1998-2001 Hewlett-Packard Co
  12.  *    David Mosberger-Tang <davidm@hpl.hp.com>
  13.  * Copyright (C) 2000, Goutham Rao <goutham.rao@intel.com>
  14.  */
  15.  
  16.  
  17. #include <linux/compiler.h>
  18. #include <linux/mm.h>
  19. #include <linux/page-flags.h>
  20. #include <linux/threads.h>
  21. #include <linux/quicklist.h>
  22.  
  23. #include <asm/mmu_context.h>
  24.  
  25. static inline pgd_t *pgd_alloc(struct mm_struct *mm)
  26. {
  27.     return quicklist_alloc(0, GFP_KERNEL, NULL);
  28. }
  29.  
  30. static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
  31. {
  32.     quicklist_free(0, NULL, pgd);
  33. }
  34.  
  35. #ifdef CONFIG_PGTABLE_4
  36. static inline void
  37. pgd_populate(struct mm_struct *mm, pgd_t * pgd_entry, pud_t * pud)
  38. {
  39.     pgd_val(*pgd_entry) = __pa(pud);
  40. }
  41.  
  42. static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
  43. {
  44.     return quicklist_alloc(0, GFP_KERNEL, NULL);
  45. }
  46.  
  47. static inline void pud_free(struct mm_struct *mm, pud_t *pud)
  48. {
  49.     quicklist_free(0, NULL, pud);
  50. }
  51. #define __pud_free_tlb(tlb, pud)    pud_free((tlb)->mm, pud)
  52. #endif /* CONFIG_PGTABLE_4 */
  53.  
  54. static inline void
  55. pud_populate(struct mm_struct *mm, pud_t * pud_entry, pmd_t * pmd)
  56. {
  57.     pud_val(*pud_entry) = __pa(pmd);
  58. }
  59.  
  60. static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
  61. {
  62.     return quicklist_alloc(0, GFP_KERNEL, NULL);
  63. }
  64.  
  65. static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
  66. {
  67.     quicklist_free(0, NULL, pmd);
  68. }
  69.  
  70. #define __pmd_free_tlb(tlb, pmd)    pmd_free((tlb)->mm, pmd)
  71.  
  72. static inline void
  73. pmd_populate(struct mm_struct *mm, pmd_t * pmd_entry, pgtable_t pte)
  74. {
  75.     pmd_val(*pmd_entry) = page_to_phys(pte);
  76. }
  77. #define pmd_pgtable(pmd) pmd_page(pmd)
  78.  
  79. static inline void
  80. pmd_populate_kernel(struct mm_struct *mm, pmd_t * pmd_entry, pte_t * pte)
  81. {
  82.     pmd_val(*pmd_entry) = __pa(pte);
  83. }
  84.  
  85. static inline pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long addr)
  86. {
  87.     struct page *page;
  88.     void *pg;
  89.  
  90.     pg = quicklist_alloc(0, GFP_KERNEL, NULL);
  91.     if (!pg)
  92.         return NULL;
  93.     page = virt_to_page(pg);
  94.     pgtable_page_ctor(page);
  95.     return page;
  96. }
  97.  
  98. static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
  99.                       unsigned long addr)
  100. {
  101.     return quicklist_alloc(0, GFP_KERNEL, NULL);
  102. }
  103.  
  104. static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
  105. {
  106.     pgtable_page_dtor(pte);
  107.     quicklist_free_page(0, NULL, pte);
  108. }
  109.  
  110. static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
  111. {
  112.     quicklist_free(0, NULL, pte);
  113. }
  114.  
  115. static inline void check_pgt_cache(void)
  116. {
  117.     quicklist_trim(0, NULL, 25, 16);
  118. }
  119.  
  120. #define __pte_free_tlb(tlb, pte)    pte_free((tlb)->mm, pte)
  121.  
  122. #endif                /* _ASM_IA64_PGALLOC_H */
  123.