Blame view

include/asm-ia64/pgalloc.h 2.44 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  #ifndef _ASM_IA64_PGALLOC_H
  #define _ASM_IA64_PGALLOC_H
  
  /*
   * This file contains the functions and defines necessary to allocate
   * page tables.
   *
   * This hopefully works with any (fixed) ia-64 page-size, as defined
   * in <asm/page.h> (currently 8192).
   *
   * Copyright (C) 1998-2001 Hewlett-Packard Co
   *	David Mosberger-Tang <davidm@hpl.hp.com>
   * Copyright (C) 2000, Goutham Rao <goutham.rao@intel.com>
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
15
16
17
18
19
  
  #include <linux/compiler.h>
  #include <linux/mm.h>
  #include <linux/page-flags.h>
  #include <linux/threads.h>
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
20
  #include <linux/quicklist.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
  
  #include <asm/mmu_context.h>
fde740e4d   Robin Holt   [IA64] Percpu qui...
23
  static inline pgd_t *pgd_alloc(struct mm_struct *mm)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
25
  	return quicklist_alloc(0, GFP_KERNEL, NULL);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  }
fde740e4d   Robin Holt   [IA64] Percpu qui...
27
  static inline void pgd_free(pgd_t * pgd)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
28
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
29
  	quicklist_free(0, NULL, pgd);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
  }
837cd0bdf   Robin Holt   [IA64] 4-level pa...
31
32
33
34
35
36
37
38
39
  #ifdef CONFIG_PGTABLE_4
  static inline void
  pgd_populate(struct mm_struct *mm, pgd_t * pgd_entry, pud_t * pud)
  {
  	pgd_val(*pgd_entry) = __pa(pud);
  }
  
  static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
40
  	return quicklist_alloc(0, GFP_KERNEL, NULL);
837cd0bdf   Robin Holt   [IA64] 4-level pa...
41
42
43
44
  }
  
  static inline void pud_free(pud_t * pud)
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
45
  	quicklist_free(0, NULL, pud);
837cd0bdf   Robin Holt   [IA64] 4-level pa...
46
47
48
  }
  #define __pud_free_tlb(tlb, pud)	pud_free(pud)
  #endif /* CONFIG_PGTABLE_4 */
fde740e4d   Robin Holt   [IA64] Percpu qui...
49
50
  static inline void
  pud_populate(struct mm_struct *mm, pud_t * pud_entry, pmd_t * pmd)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
51
  {
fde740e4d   Robin Holt   [IA64] Percpu qui...
52
53
  	pud_val(*pud_entry) = __pa(pmd);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54

fde740e4d   Robin Holt   [IA64] Percpu qui...
55
56
  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
57
  	return quicklist_alloc(0, GFP_KERNEL, NULL);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
58
  }
fde740e4d   Robin Holt   [IA64] Percpu qui...
59
  static inline void pmd_free(pmd_t * pmd)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
61
  	quicklist_free(0, NULL, pmd);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
65
66
  }
  
  #define __pmd_free_tlb(tlb, pmd)	pmd_free(pmd)
  
  static inline void
fde740e4d   Robin Holt   [IA64] Percpu qui...
67
  pmd_populate(struct mm_struct *mm, pmd_t * pmd_entry, struct page *pte)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
70
71
72
  {
  	pmd_val(*pmd_entry) = page_to_phys(pte);
  }
  
  static inline void
fde740e4d   Robin Holt   [IA64] Percpu qui...
73
  pmd_populate_kernel(struct mm_struct *mm, pmd_t * pmd_entry, pte_t * pte)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
75
76
  {
  	pmd_val(*pmd_entry) = __pa(pte);
  }
fde740e4d   Robin Holt   [IA64] Percpu qui...
77
78
  static inline struct page *pte_alloc_one(struct mm_struct *mm,
  					 unsigned long addr)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
79
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
80
  	void *pg = quicklist_alloc(0, GFP_KERNEL, NULL);
71120061f   Kirill Korotaev   [IA64] virt_to_pa...
81
  	return pg ? virt_to_page(pg) : NULL;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
82
  }
fde740e4d   Robin Holt   [IA64] Percpu qui...
83
84
  static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
  					  unsigned long addr)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
85
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
86
  	return quicklist_alloc(0, GFP_KERNEL, NULL);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
  }
fde740e4d   Robin Holt   [IA64] Percpu qui...
88
  static inline void pte_free(struct page *pte)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
89
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
90
  	quicklist_free_page(0, NULL, pte);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
91
  }
fde740e4d   Robin Holt   [IA64] Percpu qui...
92
  static inline void pte_free_kernel(pte_t * pte)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93
  {
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
94
  	quicklist_free(0, NULL, pte);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
  }
2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
96
97
98
99
  static inline void check_pgt_cache(void)
  {
  	quicklist_trim(0, NULL, 25, 16);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100

2bd62a40f   Christoph Lameter   [IA64] Quicklist ...
101
  #define __pte_free_tlb(tlb, pte)	pte_free(pte)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102

fde740e4d   Robin Holt   [IA64] Percpu qui...
103
  #endif				/* _ASM_IA64_PGALLOC_H */