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
include
linux
hugetlb_cgroup.h
Go to the documentation of this file.
1
/*
2
* Copyright IBM Corporation, 2012
3
* Author Aneesh Kumar K.V <
[email protected]
>
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms of version 2.1 of the GNU Lesser General Public License
7
* as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it would be useful, but
10
* WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
*
13
*/
14
15
#ifndef _LINUX_HUGETLB_CGROUP_H
16
#define _LINUX_HUGETLB_CGROUP_H
17
18
#include <
linux/res_counter.h
>
19
20
struct
hugetlb_cgroup
;
21
/*
22
* Minimum page order trackable by hugetlb cgroup.
23
* At least 3 pages are necessary for all the tracking information.
24
*/
25
#define HUGETLB_CGROUP_MIN_ORDER 2
26
27
#ifdef CONFIG_CGROUP_HUGETLB
28
29
static
inline
struct
hugetlb_cgroup
*hugetlb_cgroup_from_page(
struct
page
*
page
)
30
{
31
VM_BUG_ON
(!
PageHuge
(page));
32
33
if
(compound_order(page) <
HUGETLB_CGROUP_MIN_ORDER
)
34
return
NULL
;
35
return
(
struct
hugetlb_cgroup
*)page[2].
lru
.next;
36
}
37
38
static
inline
39
int
set_hugetlb_cgroup(
struct
page
*
page
,
struct
hugetlb_cgroup
*h_cg)
40
{
41
VM_BUG_ON
(!
PageHuge
(page));
42
43
if
(compound_order(page) <
HUGETLB_CGROUP_MIN_ORDER
)
44
return
-1;
45
page[2].
lru
.next = (
void
*)h_cg;
46
return
0;
47
}
48
49
static
inline
bool
hugetlb_cgroup_disabled(
void
)
50
{
51
if
(
hugetlb_subsys
.disabled)
52
return
true
;
53
return
false
;
54
}
55
56
extern
int
hugetlb_cgroup_charge_cgroup
(
int
idx
,
unsigned
long
nr_pages,
57
struct
hugetlb_cgroup
**
ptr
);
58
extern
void
hugetlb_cgroup_commit_charge
(
int
idx
,
unsigned
long
nr_pages,
59
struct
hugetlb_cgroup
*h_cg,
60
struct
page *page);
61
extern
void
hugetlb_cgroup_uncharge_page
(
int
idx
,
unsigned
long
nr_pages,
62
struct
page *page);
63
extern
void
hugetlb_cgroup_uncharge_cgroup
(
int
idx
,
unsigned
long
nr_pages,
64
struct
hugetlb_cgroup
*h_cg);
65
extern
int
hugetlb_cgroup_file_init
(
int
idx
)
__init
;
66
extern
void
hugetlb_cgroup_migrate
(
struct
page *oldhpage,
67
struct
page *newhpage);
68
69
#else
70
static
inline
struct
hugetlb_cgroup
*hugetlb_cgroup_from_page(
struct
page *page)
71
{
72
return
NULL
;
73
}
74
75
static
inline
76
int
set_hugetlb_cgroup(
struct
page *page,
struct
hugetlb_cgroup
*h_cg)
77
{
78
return
0;
79
}
80
81
static
inline
bool
hugetlb_cgroup_disabled(
void
)
82
{
83
return
true
;
84
}
85
86
static
inline
int
87
hugetlb_cgroup_charge_cgroup
(
int
idx
,
unsigned
long
nr_pages,
88
struct
hugetlb_cgroup
**
ptr
)
89
{
90
return
0;
91
}
92
93
static
inline
void
94
hugetlb_cgroup_commit_charge
(
int
idx
,
unsigned
long
nr_pages,
95
struct
hugetlb_cgroup
*h_cg,
96
struct
page *page)
97
{
98
return
;
99
}
100
101
static
inline
void
102
hugetlb_cgroup_uncharge_page
(
int
idx
,
unsigned
long
nr_pages,
struct
page *page)
103
{
104
return
;
105
}
106
107
static
inline
void
108
hugetlb_cgroup_uncharge_cgroup
(
int
idx
,
unsigned
long
nr_pages,
109
struct
hugetlb_cgroup
*h_cg)
110
{
111
return
;
112
}
113
114
static
inline
int
__init
hugetlb_cgroup_file_init
(
int
idx
)
115
{
116
return
0;
117
}
118
119
static
inline
void
hugetlb_cgroup_migrate
(
struct
page *oldhpage,
120
struct
page *newhpage)
121
{
122
return
;
123
}
124
125
#endif
/* CONFIG_MEM_RES_CTLR_HUGETLB */
126
#endif
Generated on Thu Jan 10 2013 14:51:31 for Linux Kernel by
1.8.2