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
mips
include
asm
hugetlb.h
Go to the documentation of this file.
1
/*
2
* This file is subject to the terms and conditions of the GNU General Public
3
* License. See the file "COPYING" in the main directory of this archive
4
* for more details.
5
*
6
* Copyright (C) 2008, 2009 Cavium Networks, Inc.
7
*/
8
9
#ifndef __ASM_HUGETLB_H
10
#define __ASM_HUGETLB_H
11
12
#include <asm/page.h>
13
14
15
static
inline
int
is_hugepage_only_range
(
struct
mm_struct
*mm,
16
unsigned
long
addr
,
17
unsigned
long
len)
18
{
19
return
0;
20
}
21
22
static
inline
int
prepare_hugepage_range
(
struct
file
*
file
,
23
unsigned
long
addr
,
24
unsigned
long
len)
25
{
26
unsigned
long
task_size
=
STACK_TOP
;
27
struct
hstate
*
h
=
hstate_file
(file);
28
29
if
(len & ~
huge_page_mask
(h))
30
return
-
EINVAL
;
31
if
(addr & ~
huge_page_mask
(h))
32
return
-
EINVAL
;
33
if
(len > task_size)
34
return
-
ENOMEM
;
35
if
(task_size - len < addr)
36
return
-
EINVAL
;
37
return
0;
38
}
39
40
static
inline
void
hugetlb_prefault_arch_hook
(
struct
mm_struct
*mm)
41
{
42
}
43
44
static
inline
void
hugetlb_free_pgd_range
(
struct
mmu_gather
*tlb,
45
unsigned
long
addr,
46
unsigned
long
end
,
47
unsigned
long
floor
,
48
unsigned
long
ceiling)
49
{
50
free_pgd_range
(tlb, addr, end, floor, ceiling);
51
}
52
53
static
inline
void
set_huge_pte_at(
struct
mm_struct
*mm,
unsigned
long
addr,
54
pte_t
*ptep,
pte_t
pte
)
55
{
56
set_pte_at
(mm, addr, ptep, pte);
57
}
58
59
static
inline
pte_t
huge_ptep_get_and_clear(
struct
mm_struct
*mm,
60
unsigned
long
addr,
pte_t
*ptep)
61
{
62
pte_t
clear
;
63
pte_t
pte
= *ptep;
64
65
pte_val
(clear) = (
unsigned
long
)
invalid_pte_table
;
66
set_pte_at
(mm, addr, ptep, clear);
67
return
pte
;
68
}
69
70
static
inline
void
huge_ptep_clear_flush(
struct
vm_area_struct
*vma,
71
unsigned
long
addr,
pte_t
*ptep)
72
{
73
flush_tlb_page
(vma, addr &
huge_page_mask
(
hstate_vma
(vma)));
74
}
75
76
static
inline
int
huge_pte_none(
pte_t
pte
)
77
{
78
unsigned
long
val
=
pte_val
(pte) & ~
_PAGE_GLOBAL
;
79
return
!val || (val == (
unsigned
long
)
invalid_pte_table
);
80
}
81
82
static
inline
pte_t
huge_pte_wrprotect(
pte_t
pte
)
83
{
84
return
pte_wrprotect
(pte);
85
}
86
87
static
inline
void
huge_ptep_set_wrprotect
(
struct
mm_struct
*mm,
88
unsigned
long
addr,
pte_t
*ptep)
89
{
90
ptep_set_wrprotect
(mm, addr, ptep);
91
}
92
93
static
inline
int
huge_ptep_set_access_flags
(
struct
vm_area_struct
*vma,
94
unsigned
long
addr,
95
pte_t
*ptep,
pte_t
pte
,
96
int
dirty
)
97
{
98
int
changed
= !
pte_same
(*ptep, pte);
99
100
if
(changed) {
101
set_pte_at
(vma->
vm_mm
, addr, ptep, pte);
102
/*
103
* There could be some standard sized pages in there,
104
* get them all.
105
*/
106
flush_tlb_range
(vma, addr, addr +
HPAGE_SIZE
);
107
}
108
return
changed
;
109
}
110
111
static
inline
pte_t
huge_ptep_get(
pte_t
*ptep)
112
{
113
return
*ptep;
114
}
115
116
static
inline
int
arch_prepare_hugepage(
struct
page
*
page
)
117
{
118
return
0;
119
}
120
121
static
inline
void
arch_release_hugepage(
struct
page
*
page
)
122
{
123
}
124
125
static
inline
void
arch_clear_hugepage_flags
(
struct
page
*
page
)
126
{
127
}
128
129
#endif
/* __ASM_HUGETLB_H */
Generated on Thu Jan 10 2013 13:06:10 for Linux Kernel by
1.8.2