1#ifndef __LINUX_PAGE_EXT_H 2#define __LINUX_PAGE_EXT_H 3 4#include <linux/types.h> 5#include <linux/stacktrace.h> 6 7struct pglist_data; 8struct page_ext_operations { 9 bool (*need)(void); 10 void (*init)(void); 11}; 12 13#ifdef CONFIG_PAGE_EXTENSION 14 15/* 16 * page_ext->flags bits: 17 * 18 * PAGE_EXT_DEBUG_POISON is set for poisoned pages. This is used to 19 * implement generic debug pagealloc feature. The pages are filled with 20 * poison patterns and set this flag after free_pages(). The poisoned 21 * pages are verified whether the patterns are not corrupted and clear 22 * the flag before alloc_pages(). 23 */ 24 25enum page_ext_flags { 26 PAGE_EXT_DEBUG_POISON, /* Page is poisoned */ 27 PAGE_EXT_DEBUG_GUARD, 28 PAGE_EXT_OWNER, 29#if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT) 30 PAGE_EXT_YOUNG, 31 PAGE_EXT_IDLE, 32#endif 33}; 34 35/* 36 * Page Extension can be considered as an extended mem_map. 37 * A page_ext page is associated with every page descriptor. The 38 * page_ext helps us add more information about the page. 39 * All page_ext are allocated at boot or memory hotplug event, 40 * then the page_ext for pfn always exists. 41 */ 42struct page_ext { 43 unsigned long flags; 44#ifdef CONFIG_PAGE_OWNER 45 unsigned int order; 46 gfp_t gfp_mask; 47 unsigned int nr_entries; 48 unsigned long trace_entries[8]; 49#endif 50}; 51 52extern void pgdat_page_ext_init(struct pglist_data *pgdat); 53 54#ifdef CONFIG_SPARSEMEM 55static inline void page_ext_init_flatmem(void) 56{ 57} 58extern void page_ext_init(void); 59#else 60extern void page_ext_init_flatmem(void); 61static inline void page_ext_init(void) 62{ 63} 64#endif 65 66struct page_ext *lookup_page_ext(struct page *page); 67 68#else /* !CONFIG_PAGE_EXTENSION */ 69struct page_ext; 70 71static inline void pgdat_page_ext_init(struct pglist_data *pgdat) 72{ 73} 74 75static inline struct page_ext *lookup_page_ext(struct page *page) 76{ 77 return NULL; 78} 79 80static inline void page_ext_init(void) 81{ 82} 83 84static inline void page_ext_init_flatmem(void) 85{ 86} 87#endif /* CONFIG_PAGE_EXTENSION */ 88#endif /* __LINUX_PAGE_EXT_H */ 89