Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
sparc
include
asm
pgalloc_64.h
Go to the documentation of this file.
1
#ifndef _SPARC64_PGALLOC_H
2
#define _SPARC64_PGALLOC_H
3
4
#include <linux/kernel.h>
5
#include <linux/sched.h>
6
#include <
linux/mm.h
>
7
#include <linux/slab.h>
8
9
#include <
asm/spitfire.h
>
10
#include <
asm/cpudata.h
>
11
#include <asm/cacheflush.h>
12
#include <asm/page.h>
13
14
/* Page table allocation/freeing. */
15
16
extern
struct
kmem_cache
*
pgtable_cache
;
17
18
static
inline
pgd_t
*
pgd_alloc
(
struct
mm_struct
*mm)
19
{
20
return
kmem_cache_alloc
(pgtable_cache,
GFP_KERNEL
);
21
}
22
23
static
inline
void
pgd_free
(
struct
mm_struct
*mm,
pgd_t
*pgd)
24
{
25
kmem_cache_free
(pgtable_cache, pgd);
26
}
27
28
#define pud_populate(MM, PUD, PMD) pud_set(PUD, PMD)
29
30
static
inline
pmd_t
*
pmd_alloc_one
(
struct
mm_struct
*mm,
unsigned
long
addr
)
31
{
32
return
kmem_cache_alloc
(pgtable_cache,
33
GFP_KERNEL
|
__GFP_REPEAT
);
34
}
35
36
static
inline
void
pmd_free
(
struct
mm_struct
*mm,
pmd_t
*
pmd
)
37
{
38
kmem_cache_free
(pgtable_cache, pmd);
39
}
40
41
extern
pte_t
*
pte_alloc_one_kernel
(
struct
mm_struct
*mm,
42
unsigned
long
address
);
43
extern
pgtable_t
pte_alloc_one
(
struct
mm_struct
*mm,
44
unsigned
long
address
);
45
extern
void
pte_free_kernel
(
struct
mm_struct
*mm,
pte_t
*
pte
);
46
extern
void
pte_free
(
struct
mm_struct
*mm,
pgtable_t
ptepage);
47
48
#define pmd_populate_kernel(MM, PMD, PTE) pmd_set(MM, PMD, PTE)
49
#define pmd_populate(MM, PMD, PTE) pmd_set(MM, PMD, PTE)
50
#define pmd_pgtable(PMD) ((pte_t *)__pmd_page(PMD))
51
52
#define check_pgt_cache() do { } while (0)
53
54
extern
void
pgtable_free
(
void
*
table
,
bool
is_page);
55
56
#ifdef CONFIG_SMP
57
58
struct
mmu_gather
;
59
extern
void
tlb_remove_table
(
struct
mmu_gather
*,
void
*);
60
61
static
inline
void
pgtable_free_tlb(
struct
mmu_gather
*tlb,
void
*
table
,
bool
is_page)
62
{
63
unsigned
long
pgf = (
unsigned
long
)table;
64
if
(is_page)
65
pgf |= 0x1
UL
;
66
tlb_remove_table
(tlb, (
void
*)pgf);
67
}
68
69
static
inline
void
__tlb_remove_table
(
void
*_table)
70
{
71
void
*table = (
void
*)((
unsigned
long
)_table & ~0x1
UL
);
72
bool
is_page =
false
;
73
74
if
((
unsigned
long
)_table & 0x1
UL
)
75
is_page =
true
;
76
pgtable_free
(table, is_page);
77
}
78
#else
/* CONFIG_SMP */
79
static
inline
void
pgtable_free_tlb(
struct
mmu_gather
*tlb,
void
*table,
bool
is_page)
80
{
81
pgtable_free
(table, is_page);
82
}
83
#endif
/* !CONFIG_SMP */
84
85
static
inline
void
__pte_free_tlb
(
struct
mmu_gather
*tlb,
pte_t
*
pte
,
86
unsigned
long
address
)
87
{
88
pgtable_free_tlb(tlb, pte,
true
);
89
}
90
91
#define __pmd_free_tlb(tlb, pmd, addr) \
92
pgtable_free_tlb(tlb, pmd, false)
93
94
#endif
/* _SPARC64_PGALLOC_H */
Generated on Thu Jan 10 2013 13:18:13 for Linux Kernel by
1.8.2