]> git.karo-electronics.de Git - linux-beck.git/blob - include/linux/page_ext.h
mm/page_ext: resurrect struct page extending code for debugging
[linux-beck.git] / include / linux / page_ext.h
1 #ifndef __LINUX_PAGE_EXT_H
2 #define __LINUX_PAGE_EXT_H
3
4 struct pglist_data;
5 struct 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  */
19 struct page_ext {
20         unsigned long flags;
21 };
22
23 extern void pgdat_page_ext_init(struct pglist_data *pgdat);
24
25 #ifdef CONFIG_SPARSEMEM
26 static inline void page_ext_init_flatmem(void)
27 {
28 }
29 extern void page_ext_init(void);
30 #else
31 extern void page_ext_init_flatmem(void);
32 static inline void page_ext_init(void)
33 {
34 }
35 #endif
36
37 struct page_ext *lookup_page_ext(struct page *page);
38
39 #else /* !CONFIG_PAGE_EXTENSION */
40 struct page_ext;
41
42 static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
43 {
44 }
45
46 static inline struct page_ext *lookup_page_ext(struct page *page)
47 {
48         return NULL;
49 }
50
51 static inline void page_ext_init(void)
52 {
53 }
54
55 static inline void page_ext_init_flatmem(void)
56 {
57 }
58 #endif /* CONFIG_PAGE_EXTENSION */
59 #endif /* __LINUX_PAGE_EXT_H */