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