page_ext.h (1877B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __LINUX_PAGE_EXT_H 3#define __LINUX_PAGE_EXT_H 4 5#include <linux/types.h> 6#include <linux/stacktrace.h> 7#include <linux/stackdepot.h> 8 9struct pglist_data; 10struct page_ext_operations { 11 size_t offset; 12 size_t size; 13 bool (*need)(void); 14 void (*init)(void); 15}; 16 17#ifdef CONFIG_PAGE_EXTENSION 18 19enum page_ext_flags { 20 PAGE_EXT_OWNER, 21 PAGE_EXT_OWNER_ALLOCATED, 22#if defined(CONFIG_PAGE_IDLE_FLAG) && !defined(CONFIG_64BIT) 23 PAGE_EXT_YOUNG, 24 PAGE_EXT_IDLE, 25#endif 26}; 27 28/* 29 * Page Extension can be considered as an extended mem_map. 30 * A page_ext page is associated with every page descriptor. The 31 * page_ext helps us add more information about the page. 32 * All page_ext are allocated at boot or memory hotplug event, 33 * then the page_ext for pfn always exists. 34 */ 35struct page_ext { 36 unsigned long flags; 37}; 38 39extern unsigned long page_ext_size; 40extern void pgdat_page_ext_init(struct pglist_data *pgdat); 41 42#ifdef CONFIG_SPARSEMEM 43static inline void page_ext_init_flatmem(void) 44{ 45} 46extern void page_ext_init(void); 47static inline void page_ext_init_flatmem_late(void) 48{ 49} 50#else 51extern void page_ext_init_flatmem(void); 52extern void page_ext_init_flatmem_late(void); 53static inline void page_ext_init(void) 54{ 55} 56#endif 57 58struct page_ext *lookup_page_ext(const struct page *page); 59 60static inline struct page_ext *page_ext_next(struct page_ext *curr) 61{ 62 void *next = curr; 63 next += page_ext_size; 64 return next; 65} 66 67#else /* !CONFIG_PAGE_EXTENSION */ 68struct page_ext; 69 70static inline void pgdat_page_ext_init(struct pglist_data *pgdat) 71{ 72} 73 74static inline struct page_ext *lookup_page_ext(const struct page *page) 75{ 76 return NULL; 77} 78 79static inline void page_ext_init(void) 80{ 81} 82 83static inline void page_ext_init_flatmem_late(void) 84{ 85} 86 87static inline void page_ext_init_flatmem(void) 88{ 89} 90#endif /* CONFIG_PAGE_EXTENSION */ 91#endif /* __LINUX_PAGE_EXT_H */