root/include/linux/page_ext.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. page_ext_init_flatmem
  2. page_ext_init
  3. page_ext_next
  4. pgdat_page_ext_init
  5. lookup_page_ext
  6. page_ext_init
  7. page_ext_init_flatmem

   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 
   9 struct pglist_data;
  10 struct 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 
  19 enum page_ext_flags {
  20         PAGE_EXT_OWNER,
  21         PAGE_EXT_OWNER_ALLOCATED,
  22 #if defined(CONFIG_IDLE_PAGE_TRACKING) && !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  */
  35 struct page_ext {
  36         unsigned long flags;
  37 };
  38 
  39 extern unsigned long page_ext_size;
  40 extern void pgdat_page_ext_init(struct pglist_data *pgdat);
  41 
  42 #ifdef CONFIG_SPARSEMEM
  43 static inline void page_ext_init_flatmem(void)
  44 {
  45 }
  46 extern void page_ext_init(void);
  47 #else
  48 extern void page_ext_init_flatmem(void);
  49 static inline void page_ext_init(void)
  50 {
  51 }
  52 #endif
  53 
  54 struct page_ext *lookup_page_ext(const struct page *page);
  55 
  56 static inline struct page_ext *page_ext_next(struct page_ext *curr)
  57 {
  58         void *next = curr;
  59         next += page_ext_size;
  60         return next;
  61 }
  62 
  63 #else /* !CONFIG_PAGE_EXTENSION */
  64 struct page_ext;
  65 
  66 static inline void pgdat_page_ext_init(struct pglist_data *pgdat)
  67 {
  68 }
  69 
  70 static inline struct page_ext *lookup_page_ext(const struct page *page)
  71 {
  72         return NULL;
  73 }
  74 
  75 static inline void page_ext_init(void)
  76 {
  77 }
  78 
  79 static inline void page_ext_init_flatmem(void)
  80 {
  81 }
  82 #endif /* CONFIG_PAGE_EXTENSION */
  83 #endif /* __LINUX_PAGE_EXT_H */

/* [<][>][^][v][top][bottom][index][help] */