blob: 2ccc8b414e5c7bc76b8377ae2585c700189c127c [file] [log] [blame]
Joonsoo Kimeefa8642014-12-12 16:55:46 -08001#ifndef __LINUX_PAGE_EXT_H
2#define __LINUX_PAGE_EXT_H
3
4struct pglist_data;
5struct page_ext_operations {
6 bool (*need)(void);
7 void (*init)(void);
8};
9
10#ifdef CONFIG_PAGE_EXTENSION
11
12/*
13 * Page Extension can be considered as an extended mem_map.
14 * A page_ext page is associated with every page descriptor. The
15 * page_ext helps us add more information about the page.
16 * All page_ext are allocated at boot or memory hotplug event,
17 * then the page_ext for pfn always exists.
18 */
19struct page_ext {
20 unsigned long flags;
21};
22
23extern void pgdat_page_ext_init(struct pglist_data *pgdat);
24
25#ifdef CONFIG_SPARSEMEM
26static inline void page_ext_init_flatmem(void)
27{
28}
29extern void page_ext_init(void);
30#else
31extern void page_ext_init_flatmem(void);
32static inline void page_ext_init(void)
33{
34}
35#endif
36
37struct page_ext *lookup_page_ext(struct page *page);
38
39#else /* !CONFIG_PAGE_EXTENSION */
40struct page_ext;
41
42static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
43{
44}
45
46static inline struct page_ext *lookup_page_ext(struct page *page)
47{
48 return NULL;
49}
50
51static inline void page_ext_init(void)
52{
53}
54
55static inline void page_ext_init_flatmem(void)
56{
57}
58#endif /* CONFIG_PAGE_EXTENSION */
59#endif /* __LINUX_PAGE_EXT_H */