1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#ifndef PAGEBLOCK_FLAGS_H
24#define PAGEBLOCK_FLAGS_H
25
26#include <linux/types.h>
27
28
29enum pageblock_bits {
30 PB_migrate,
31 PB_migrate_end = PB_migrate + 3 - 1,
32
33 PB_migrate_skip,
34
35
36
37
38
39 NR_PAGEBLOCK_BITS
40};
41
42#ifdef CONFIG_HUGETLB_PAGE
43
44#ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
45
46
47extern unsigned int pageblock_order;
48
49#else
50
51
52#define pageblock_order HUGETLB_PAGE_ORDER
53
54#endif
55
56#else
57
58
59#define pageblock_order (MAX_ORDER-1)
60
61#endif
62
63#define pageblock_nr_pages (1UL << pageblock_order)
64
65
66struct page;
67
68unsigned long get_pfnblock_flags_mask(struct page *page,
69 unsigned long pfn,
70 unsigned long end_bitidx,
71 unsigned long mask);
72
73void set_pfnblock_flags_mask(struct page *page,
74 unsigned long flags,
75 unsigned long pfn,
76 unsigned long end_bitidx,
77 unsigned long mask);
78
79
80#define get_pageblock_flags_group(page, start_bitidx, end_bitidx) \
81 get_pfnblock_flags_mask(page, page_to_pfn(page), \
82 end_bitidx, \
83 (1 << (end_bitidx - start_bitidx + 1)) - 1)
84#define set_pageblock_flags_group(page, flags, start_bitidx, end_bitidx) \
85 set_pfnblock_flags_mask(page, flags, page_to_pfn(page), \
86 end_bitidx, \
87 (1 << (end_bitidx - start_bitidx + 1)) - 1)
88
89#ifdef CONFIG_COMPACTION
90#define get_pageblock_skip(page) \
91 get_pageblock_flags_group(page, PB_migrate_skip, \
92 PB_migrate_skip)
93#define clear_pageblock_skip(page) \
94 set_pageblock_flags_group(page, 0, PB_migrate_skip, \
95 PB_migrate_skip)
96#define set_pageblock_skip(page) \
97 set_pageblock_flags_group(page, 1, PB_migrate_skip, \
98 PB_migrate_skip)
99#endif
100
101#endif
102