6#ifndef __GENERATING_BOUNDS_H
19#include <linux/pageblock-flags.h>
20#include <linux/page-flags-layout.h>
23#include <linux/page-flags.h>
24#include <linux/local_lock.h>
25#include <linux/zswap.h>
30#ifndef CONFIG_ARCH_FORCE_MAX_ORDER
31#define MAX_PAGE_ORDER 10
33#define MAX_PAGE_ORDER CONFIG_ARCH_FORCE_MAX_ORDER
35#define MAX_ORDER_NR_PAGES (1 << MAX_PAGE_ORDER)
37#define IS_MAX_ORDER_ALIGNED(pfn) IS_ALIGNED(pfn, MAX_ORDER_NR_PAGES)
39#define NR_PAGE_ORDERS (MAX_PAGE_ORDER + 1)
42#ifndef CONFIG_PAGE_BLOCK_MAX_ORDER
43#define PAGE_BLOCK_MAX_ORDER MAX_PAGE_ORDER
45#define PAGE_BLOCK_MAX_ORDER CONFIG_PAGE_BLOCK_MAX_ORDER
53#if (PAGE_BLOCK_MAX_ORDER > MAX_PAGE_ORDER)
54#error MAX_PAGE_ORDER must be >= PAGE_BLOCK_MAX_ORDER
63#define PAGE_ALLOC_COSTLY_ORDER 3
65#if !defined(CONFIG_HAVE_GIGANTIC_FOLIOS)
70#define MAX_FOLIO_ORDER MAX_PAGE_ORDER
71#elif defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP)
77#define MAX_FOLIO_ORDER PFN_SECTION_SHIFT
78#elif defined(CONFIG_HUGETLB_PAGE)
85#define MAX_FOLIO_ORDER (ilog2(SZ_16G) - PAGE_SHIFT)
87#define MAX_FOLIO_ORDER (ilog2(SZ_1G) - PAGE_SHIFT)
94#define MAX_FOLIO_ORDER (PUD_SHIFT - PAGE_SHIFT)
97#define MAX_FOLIO_NR_PAGES (1UL << MAX_FOLIO_ORDER)
105#define MAX_FOLIO_VMEMMAP_ALIGN \
106 (IS_ENABLED(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP) && \
107 is_power_of_2(sizeof(struct page)) ? \
108 MAX_FOLIO_NR_PAGES * sizeof(struct page) : 0)
114#define VMEMMAP_TAIL_MIN_ORDER (ilog2(2 * PAGE_SIZE / sizeof(struct page)))
115#define __NR_VMEMMAP_TAILS (MAX_FOLIO_ORDER - VMEMMAP_TAIL_MIN_ORDER + 1)
116#define NR_VMEMMAP_TAILS (__NR_VMEMMAP_TAILS > 0 ? __NR_VMEMMAP_TAILS : 0)
140#ifdef CONFIG_MEMORY_ISOLATION
150# define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
151# define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
156# define is_migrate_cma_folio(folio, pfn) \
157 (get_pfnblock_migratetype(&folio->page, pfn) == MIGRATE_CMA)
159# define is_migrate_cma(migratetype) false
160# define is_migrate_cma_page(_page) false
161# define is_migrate_cma_folio(folio, pfn) false
164static inline bool is_migrate_movable(
int mt)
175static inline bool migratetype_is_mergeable(
int mt)
180#define for_each_free_list(list, zone, order) \
181 for (order = 0; order < NR_PAGE_ORDERS; order++) \
182 for (unsigned int __type = 0; \
183 __type < MIGRATE_TYPES && \
184 (list = &(zone)->free_area[order].free_list[__type], 1); \
189#define get_pageblock_migratetype(page) \
190 get_pfnblock_migratetype(page, page_to_pfn(page))
192#define folio_migratetype(folio) \
193 get_pageblock_migratetype(&folio->page)
213#define NR_VM_NUMA_EVENT_ITEMS 0
227#if IS_ENABLED(CONFIG_ZSMALLOC)
231#ifdef CONFIG_UNACCEPTED_MEMORY
280#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
285#ifdef CONFIG_IOMMU_SUPPORT
291#ifdef CONFIG_NUMA_BALANCING
307 PGPROMOTE_CANDIDATE_NRL,
327#ifdef CONFIG_HUGETLB_PAGE
404#define for_each_lru(lru) for (lru = 0; lru < NR_LRU_LISTS; lru++)
406#define for_each_evictable_lru(lru) for (lru = 0; lru <= LRU_ACTIVE_FILE; lru++)
408static inline bool is_file_lru(
enum lru_list lru)
413static inline bool is_active_lru(
enum lru_list lru)
418#define WORKINGSET_ANON 0
419#define WORKINGSET_FILE 1
420#define ANON_AND_FILE 2
469#define MIN_NR_GENS 2U
470#define MAX_NR_GENS 4U
492#define MAX_NR_TIERS 4U
494#ifndef __GENERATING_BOUNDS_H
496#define LRU_GEN_MASK ((BIT(LRU_GEN_WIDTH) - 1) << LRU_GEN_PGOFF)
497#define LRU_REFS_MASK ((BIT(LRU_REFS_WIDTH) - 1) << LRU_REFS_PGOFF)
520#define LRU_REFS_FLAGS (LRU_REFS_MASK | BIT(PG_referenced))
523struct page_vma_mapped_walk;
535 LRU_GEN_NONLEAF_YOUNG,
539#define MIN_LRU_BATCH BITS_PER_LONG
540#define MAX_LRU_BATCH (MIN_LRU_BATCH * 64)
543#ifdef CONFIG_LRU_GEN_STATS
544#define NR_HIST_GENS MAX_NR_GENS
546#define NR_HIST_GENS 1U
561struct lru_gen_folio {
563 unsigned long max_seq;
600#define NR_BLOOM_FILTERS 2
602struct lru_gen_mm_state {
610 unsigned long *filters[NR_BLOOM_FILTERS];
612 unsigned long stats[NR_HIST_GENS][NR_MM_STATS];
615struct lru_gen_mm_walk {
621 unsigned long next_addr;
625 int mm_stats[NR_MM_STATS];
674#define MEMCG_NR_GENS 3
675#define MEMCG_NR_BINS 8
677struct lru_gen_memcg {
681 unsigned long nr_memcgs[MEMCG_NR_GENS];
690bool lru_gen_look_around(
struct page_vma_mapped_walk *pvmw,
unsigned int nr);
692void lru_gen_init_memcg(
struct mem_cgroup *memcg);
693void lru_gen_exit_memcg(
struct mem_cgroup *memcg);
694void lru_gen_online_memcg(
struct mem_cgroup *memcg);
695void lru_gen_offline_memcg(
struct mem_cgroup *memcg);
696void lru_gen_release_memcg(
struct mem_cgroup *memcg);
697void lru_gen_soft_reclaim(
struct mem_cgroup *memcg,
int nid);
698void max_lru_gen_memcg(
struct mem_cgroup *memcg,
int nid);
699bool recheck_lru_gen_max_memcg(
struct mem_cgroup *memcg,
int nid);
700void lru_gen_reparent_memcg(
struct mem_cgroup *memcg,
struct mem_cgroup *
parent,
int nid);
704static inline void lru_gen_init_pgdat(
struct pglist_data *pgdat)
708static inline void lru_gen_init_lruvec(
struct lruvec *
lruvec)
712static inline bool lru_gen_look_around(
struct page_vma_mapped_walk *pvmw,
718static inline void lru_gen_init_memcg(
struct mem_cgroup *memcg)
722static inline void lru_gen_exit_memcg(
struct mem_cgroup *memcg)
726static inline void lru_gen_online_memcg(
struct mem_cgroup *memcg)
730static inline void lru_gen_offline_memcg(
struct mem_cgroup *memcg)
734static inline void lru_gen_release_memcg(
struct mem_cgroup *memcg)
738static inline void lru_gen_soft_reclaim(
struct mem_cgroup *memcg,
int nid)
742static inline void max_lru_gen_memcg(
struct mem_cgroup *memcg,
int nid)
746static inline bool recheck_lru_gen_max_memcg(
struct mem_cgroup *memcg,
int nid)
752void lru_gen_reparent_memcg(
struct mem_cgroup *memcg,
struct mem_cgroup *
parent,
int nid)
777 struct lru_gen_folio lrugen;
778#ifdef CONFIG_LRU_GEN_WALKS_MMU
780 struct lru_gen_mm_state mm_state;
790#define ISOLATE_ASYNC_MIGRATE ((__force isolate_mode_t)0x4)
792#define ISOLATE_UNEVICTABLE ((__force isolate_mode_t)0x8)
810#ifdef CONFIG_TRANSPARENT_HUGEPAGE
815#define NR_LOWORDER_PCP_LISTS (MIGRATE_PCPTYPES * (PAGE_ALLOC_COSTLY_ORDER + 1))
816#define NR_PCP_LISTS (NR_LOWORDER_PCP_LISTS + NR_PCP_THP)
830#define PCPF_PREV_FREE_HIGH_ORDER BIT(0)
831#define PCPF_FREE_HIGH_BATCH BIT(1)
884#ifdef CONFIG_ZONE_DMA
887#ifdef CONFIG_ZONE_DMA32
957#ifdef CONFIG_ZONE_DEVICE
964#ifndef __GENERATING_BOUNDS_H
966#define ASYNC_AND_SYNC 2
1003#ifndef CONFIG_SPARSEMEM
1059#if defined(CONFIG_MEMORY_HOTPLUG)
1060 unsigned long present_early_pages;
1063 unsigned long cma_pages;
1068#ifdef CONFIG_MEMORY_ISOLATION
1074 unsigned long nr_isolate_pageblock;
1077#ifdef CONFIG_MEMORY_HOTPLUG
1090#ifdef CONFIG_UNACCEPTED_MEMORY
1117#if defined CONFIG_COMPACTION || defined CONFIG_CMA
1119 unsigned long compact_cached_free_pfn;
1122 unsigned long compact_init_migrate_pfn;
1123 unsigned long compact_init_free_pfn;
1126#ifdef CONFIG_COMPACTION
1133 unsigned int compact_considered;
1134 unsigned int compact_defer_shift;
1135 int compact_order_failed;
1138#if defined CONFIG_COMPACTION || defined CONFIG_CMA
1140 bool compact_blockskip_flush;
1149#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP
1169static inline unsigned long wmark_pages(
const struct zone *z,
1175static inline unsigned long min_wmark_pages(
const struct zone *z)
1180static inline unsigned long low_wmark_pages(
const struct zone *z)
1185static inline unsigned long high_wmark_pages(
const struct zone *z)
1190static inline unsigned long promo_wmark_pages(
const struct zone *z)
1195static inline unsigned long zone_managed_pages(
const struct zone *
zone)
1200static inline unsigned long zone_cma_pages(
struct zone *
zone)
1203 return zone->cma_pages;
1209static inline unsigned long zone_end_pfn(
const struct zone *
zone)
1214static inline bool zone_spans_pfn(
const struct zone *
zone,
unsigned long pfn)
1219static inline bool zone_is_initialized(
const struct zone *
zone)
1224static inline bool zone_is_empty(
const struct zone *
zone)
1229#ifndef BUILD_VDSO32_64
1236#define SECTIONS_PGOFF ((sizeof(unsigned long)*8) - SECTIONS_WIDTH)
1237#define NODES_PGOFF (SECTIONS_PGOFF - NODES_WIDTH)
1238#define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH)
1239#define LAST_CPUPID_PGOFF (ZONES_PGOFF - LAST_CPUPID_WIDTH)
1240#define KASAN_TAG_PGOFF (LAST_CPUPID_PGOFF - KASAN_TAG_WIDTH)
1241#define LRU_GEN_PGOFF (KASAN_TAG_PGOFF - LRU_GEN_WIDTH)
1242#define LRU_REFS_PGOFF (LRU_GEN_PGOFF - LRU_REFS_WIDTH)
1249#define SECTIONS_PGSHIFT (SECTIONS_PGOFF * (SECTIONS_WIDTH != 0))
1250#define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0))
1251#define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0))
1252#define LAST_CPUPID_PGSHIFT (LAST_CPUPID_PGOFF * (LAST_CPUPID_WIDTH != 0))
1253#define KASAN_TAG_PGSHIFT (KASAN_TAG_PGOFF * (KASAN_TAG_WIDTH != 0))
1256#ifdef NODE_NOT_IN_PAGE_FLAGS
1257#define ZONEID_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT)
1258#define ZONEID_PGOFF ((SECTIONS_PGOFF < ZONES_PGOFF) ? \
1259 SECTIONS_PGOFF : ZONES_PGOFF)
1261#define ZONEID_SHIFT (NODES_SHIFT + ZONES_SHIFT)
1262#define ZONEID_PGOFF ((NODES_PGOFF < ZONES_PGOFF) ? \
1263 NODES_PGOFF : ZONES_PGOFF)
1266#define ZONEID_PGSHIFT (ZONEID_PGOFF * (ZONEID_SHIFT != 0))
1268#define ZONES_MASK ((1UL << ZONES_WIDTH) - 1)
1269#define NODES_MASK ((1UL << NODES_WIDTH) - 1)
1270#define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1)
1271#define LAST_CPUPID_MASK ((1UL << LAST_CPUPID_SHIFT) - 1)
1272#define KASAN_TAG_MASK ((1UL << KASAN_TAG_WIDTH) - 1)
1273#define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1)
1275static inline enum zone_type memdesc_zonenum(memdesc_flags_t
flags)
1283 return memdesc_zonenum(
page->flags);
1291#ifdef CONFIG_ZONE_DEVICE
1292static inline bool memdesc_is_zone_device(memdesc_flags_t mdf)
1294 return memdesc_zonenum(mdf) == ZONE_DEVICE;
1297static inline struct dev_pagemap *page_pgmap(
const struct page *
page)
1299 VM_WARN_ON_ONCE_PAGE(!memdesc_is_zone_device(
page->flags),
page);
1300 return page_folio(
page)->pgmap;
1311static inline bool zone_device_pages_have_same_pgmap(
const struct page *
a,
1312 const struct page *
b)
1314 if (memdesc_is_zone_device(
a->flags) != memdesc_is_zone_device(
b->flags))
1316 if (!memdesc_is_zone_device(
a->flags))
1318 return page_pgmap(
a) == page_pgmap(
b);
1321extern void memmap_init_zone_device(
struct zone *,
unsigned long,
1322 unsigned long,
struct dev_pagemap *);
1324static inline bool memdesc_is_zone_device(memdesc_flags_t mdf)
1328static inline bool zone_device_pages_have_same_pgmap(
const struct page *
a,
1329 const struct page *
b)
1333static inline struct dev_pagemap *page_pgmap(
const struct page *
page)
1339static inline bool is_zone_device_page(
const struct page *
page)
1341 return memdesc_is_zone_device(
page->flags);
1344static inline bool folio_is_zone_device(
const struct folio *
folio)
1349static inline bool is_zone_movable_page(
const struct page *
page)
1354static inline bool folio_is_zone_movable(
const struct folio *
folio)
1364static inline bool zone_intersects(
const struct zone *
zone,
1365 unsigned long start_pfn,
unsigned long nr_pages)
1367 if (zone_is_empty(
zone))
1369 if (start_pfn >= zone_end_pfn(
zone) ||
1370 start_pfn + nr_pages <= zone->zone_start_pfn)
1381#define DEF_PRIORITY 12
1384#define MAX_ZONES_PER_ZONELIST (MAX_NUMNODES * MAX_NR_ZONES)
1393 ZONELIST_NOFALLBACK,
1432#ifdef CONFIG_MEMORY_FAILURE
1436struct memory_failure_stats {
1443 unsigned long total;
1450 unsigned long ignored;
1451 unsigned long failed;
1452 unsigned long delayed;
1453 unsigned long recovered;
1481#ifdef CONFIG_FLATMEM
1482 struct page *node_mem_map;
1483#ifdef CONFIG_PAGE_EXTENSION
1484 struct page_ext *node_page_ext;
1487#if defined(CONFIG_MEMORY_HOTPLUG) || defined(CONFIG_DEFERRED_STRUCT_PAGE_INIT)
1516#ifdef CONFIG_MEMORY_HOTPLUG
1517 struct mutex kswapd_lock;
1525#ifdef CONFIG_COMPACTION
1526 int kcompactd_max_order;
1527 enum zone_type kcompactd_highest_zoneidx;
1530 bool proactive_compact_trigger;
1542 unsigned long min_unmapped_pages;
1543 unsigned long min_slab_pages;
1549#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
1554 unsigned long first_deferred_pfn;
1557#ifdef CONFIG_NUMA_BALANCING
1559 unsigned int nbp_rl_start;
1561 unsigned long nbp_rl_nr_cand;
1563 unsigned int nbp_threshold;
1565 unsigned int nbp_th_start;
1570 unsigned long nbp_th_nr_cand;
1583#ifdef CONFIG_LRU_GEN
1585 struct lru_gen_mm_walk mm_walk;
1587 struct lru_gen_memcg memcg_lru;
1596 struct memory_tier
__rcu *memtier;
1598#ifdef CONFIG_MEMORY_FAILURE
1599 struct memory_failure_stats mf_stats;
1603#define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages)
1604#define node_spanned_pages(nid) (NODE_DATA(nid)->node_spanned_pages)
1606#define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
1607#define node_end_pfn(nid) pgdat_end_pfn(NODE_DATA(nid))
1609static inline unsigned long pgdat_end_pfn(
pg_data_t *pgdat)
1614#include <linux/memory_hotplug.h>
1618 int highest_zoneidx,
unsigned int alloc_flags,
1621 unsigned long mark,
int highest_zoneidx,
1622 unsigned int alloc_flags);
1634 unsigned int order,
int highest_zoneidx);
1648 unsigned long size);
1661#ifdef CONFIG_HAVE_MEMORYLESS_NODES
1662int local_memory_node(
int node_id);
1664static inline int local_memory_node(
int node_id) {
return node_id; };
1670#define zone_idx(zone) ((zone) - (zone)->zone_pgdat->node_zones)
1672#ifdef CONFIG_ZONE_DEVICE
1673static inline bool zone_is_zone_device(
const struct zone *
zone)
1678static inline bool zone_is_zone_device(
const struct zone *
zone)
1690static inline bool managed_zone(
const struct zone *
zone)
1692 return zone_managed_pages(
zone);
1696static inline bool populated_zone(
const struct zone *
zone)
1702static inline int zone_to_nid(
const struct zone *
zone)
1707static inline void zone_set_nid(
struct zone *
zone,
int nid)
1712static inline int zone_to_nid(
const struct zone *
zone)
1717static inline void zone_set_nid(
struct zone *
zone,
int nid) {}
1722static inline int is_highmem_idx(
enum zone_type idx)
1724#ifdef CONFIG_HIGHMEM
1725 return (idx == ZONE_HIGHMEM ||
1739static inline int is_highmem(
const struct zone *
zone)
1745static inline bool has_managed_dma(
void)
1747#ifdef CONFIG_ZONE_DMA
1758static inline struct pglist_data *NODE_DATA(
int nid)
1765#include <asm/mmzone.h>
1777#define for_each_online_pgdat(pgdat) \
1778 for (pgdat = first_online_pgdat(); \
1780 pgdat = next_online_pgdat(pgdat))
1788#define for_each_zone(zone) \
1789 for (zone = (first_online_pgdat())->node_zones; \
1791 zone = next_zone(zone))
1793#define for_each_populated_zone(zone) \
1794 for (zone = (first_online_pgdat())->node_zones; \
1796 zone = next_zone(zone)) \
1797 if (!populated_zone(zone)) \
1806static inline int zonelist_zone_idx(
const struct zoneref *
zoneref)
1811static inline int zonelist_node_idx(
const struct zoneref *
zoneref)
1839 if (
likely(!
nodes && zonelist_zone_idx(z) <= highest_zoneidx))
1866 highest_zoneidx,
nodes);
1880#define for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, nodemask) \
1881 for (z = first_zones_zonelist(zlist, highidx, nodemask), zone = zonelist_zone(z); \
1883 z = next_zones_zonelist(++z, highidx, nodemask), \
1884 zone = zonelist_zone(z))
1886#define for_next_zone_zonelist_nodemask(zone, z, highidx, nodemask) \
1887 for (zone = zonelist_zone(z); \
1889 z = next_zones_zonelist(++z, highidx, nodemask), \
1890 zone = zonelist_zone(z))
1902#define for_each_zone_zonelist(zone, z, zlist, highidx) \
1903 for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, NULL)
1923 return (!zonelist_zone(z)) ?
true :
false;
1927#ifdef CONFIG_SPARSEMEM
1928#include <asm/sparsemem.h>
1931#ifdef CONFIG_FLATMEM
1932#define pfn_to_nid(pfn) (0)
1935#ifdef CONFIG_SPARSEMEM
1941#define PA_SECTION_SHIFT (SECTION_SIZE_BITS)
1942#define PFN_SECTION_SHIFT (SECTION_SIZE_BITS - PAGE_SHIFT)
1944#define NR_MEM_SECTIONS (1UL << SECTIONS_SHIFT)
1946#define PAGES_PER_SECTION (1UL << PFN_SECTION_SHIFT)
1947#define PAGE_SECTION_MASK (~(PAGES_PER_SECTION-1))
1949#define SECTION_BLOCKFLAGS_BITS \
1950 ((1UL << (PFN_SECTION_SHIFT - pageblock_order)) * NR_PAGEBLOCK_BITS)
1952#if (MAX_PAGE_ORDER + PAGE_SHIFT) > SECTION_SIZE_BITS
1953#error Allocator MAX_PAGE_ORDER exceeds SECTION_SIZE
1956static inline unsigned long pfn_to_section_nr(
unsigned long pfn)
1958 return pfn >> PFN_SECTION_SHIFT;
1960static inline unsigned long section_nr_to_pfn(
unsigned long sec)
1962 return sec << PFN_SECTION_SHIFT;
1965#define SECTION_ALIGN_UP(pfn) (((pfn) + PAGES_PER_SECTION - 1) & PAGE_SECTION_MASK)
1966#define SECTION_ALIGN_DOWN(pfn) ((pfn) & PAGE_SECTION_MASK)
1968#define SUBSECTION_SHIFT 21
1969#define SUBSECTION_SIZE (1UL << SUBSECTION_SHIFT)
1971#define PFN_SUBSECTION_SHIFT (SUBSECTION_SHIFT - PAGE_SHIFT)
1972#define PAGES_PER_SUBSECTION (1UL << PFN_SUBSECTION_SHIFT)
1973#define PAGE_SUBSECTION_MASK (~(PAGES_PER_SUBSECTION-1))
1975#if SUBSECTION_SHIFT > SECTION_SIZE_BITS
1976#error Subsection size exceeds section size
1978#define SUBSECTIONS_PER_SECTION (1UL << (SECTION_SIZE_BITS - SUBSECTION_SHIFT))
1981#define SUBSECTION_ALIGN_UP(pfn) ALIGN((pfn), PAGES_PER_SUBSECTION)
1982#define SUBSECTION_ALIGN_DOWN(pfn) ((pfn) & PAGE_SUBSECTION_MASK)
1984struct mem_section_usage {
1986#ifdef CONFIG_SPARSEMEM_VMEMMAP
1990 unsigned long pageblock_flags[0];
2008 unsigned long section_mem_map;
2010 struct mem_section_usage *usage;
2011#ifdef CONFIG_PAGE_EXTENSION
2016 struct page_ext *page_ext;
2025#ifdef CONFIG_SPARSEMEM_EXTREME
2026#define SECTIONS_PER_ROOT (PAGE_SIZE / sizeof (struct mem_section))
2028#define SECTIONS_PER_ROOT 1
2031#define SECTION_NR_TO_ROOT(sec) ((sec) / SECTIONS_PER_ROOT)
2032#define NR_SECTION_ROOTS DIV_ROUND_UP(NR_MEM_SECTIONS, SECTIONS_PER_ROOT)
2033#define SECTION_ROOT_MASK (SECTIONS_PER_ROOT - 1)
2035#ifdef CONFIG_SPARSEMEM_EXTREME
2036extern struct mem_section **mem_section;
2038extern struct mem_section mem_section[NR_SECTION_ROOTS][SECTIONS_PER_ROOT];
2041static inline unsigned long *section_to_usemap(
struct mem_section *ms)
2043 return ms->usage->pageblock_flags;
2046static inline struct mem_section *__nr_to_section(
unsigned long nr)
2048 unsigned long root = SECTION_NR_TO_ROOT(nr);
2053#ifdef CONFIG_SPARSEMEM_EXTREME
2054 if (!mem_section || !mem_section[
root])
2057 return &mem_section[
root][nr & SECTION_ROOT_MASK];
2059extern size_t mem_section_usage_size(
void);
2074 SECTION_MARKED_PRESENT_BIT,
2075 SECTION_HAS_MEM_MAP_BIT,
2076 SECTION_IS_ONLINE_BIT,
2077 SECTION_IS_EARLY_BIT,
2078#ifdef CONFIG_ZONE_DEVICE
2079 SECTION_TAINT_ZONE_DEVICE_BIT,
2081#ifdef CONFIG_SPARSEMEM_VMEMMAP_PREINIT
2082 SECTION_IS_VMEMMAP_PREINIT_BIT,
2084 SECTION_MAP_LAST_BIT,
2087#define SECTION_MARKED_PRESENT BIT(SECTION_MARKED_PRESENT_BIT)
2088#define SECTION_HAS_MEM_MAP BIT(SECTION_HAS_MEM_MAP_BIT)
2089#define SECTION_IS_ONLINE BIT(SECTION_IS_ONLINE_BIT)
2090#define SECTION_IS_EARLY BIT(SECTION_IS_EARLY_BIT)
2091#ifdef CONFIG_ZONE_DEVICE
2092#define SECTION_TAINT_ZONE_DEVICE BIT(SECTION_TAINT_ZONE_DEVICE_BIT)
2094#ifdef CONFIG_SPARSEMEM_VMEMMAP_PREINIT
2095#define SECTION_IS_VMEMMAP_PREINIT BIT(SECTION_IS_VMEMMAP_PREINIT_BIT)
2097#define SECTION_MAP_MASK (~(BIT(SECTION_MAP_LAST_BIT) - 1))
2098#define SECTION_NID_SHIFT SECTION_MAP_LAST_BIT
2100static inline struct page *__section_mem_map_addr(
struct mem_section *section)
2102 unsigned long map = section->section_mem_map;
2103 map &= SECTION_MAP_MASK;
2107static inline int present_section(
const struct mem_section *section)
2109 return (section && (section->section_mem_map & SECTION_MARKED_PRESENT));
2112static inline int present_section_nr(
unsigned long nr)
2114 return present_section(__nr_to_section(nr));
2117static inline int valid_section(
const struct mem_section *section)
2119 return (section && (section->section_mem_map & SECTION_HAS_MEM_MAP));
2122static inline int early_section(
const struct mem_section *section)
2124 return (section && (section->section_mem_map & SECTION_IS_EARLY));
2127static inline int valid_section_nr(
unsigned long nr)
2129 return valid_section(__nr_to_section(nr));
2132static inline int online_section(
const struct mem_section *section)
2134 return (section && (section->section_mem_map & SECTION_IS_ONLINE));
2137#ifdef CONFIG_ZONE_DEVICE
2138static inline int online_device_section(
const struct mem_section *section)
2140 unsigned long flags = SECTION_IS_ONLINE | SECTION_TAINT_ZONE_DEVICE;
2142 return section && ((section->section_mem_map &
flags) ==
flags);
2145static inline int online_device_section(
const struct mem_section *section)
2151#ifdef CONFIG_SPARSEMEM_VMEMMAP_PREINIT
2152static inline int preinited_vmemmap_section(
const struct mem_section *section)
2155 (section->section_mem_map & SECTION_IS_VMEMMAP_PREINIT));
2162static inline int preinited_vmemmap_section(
const struct mem_section *section)
2175static inline int online_section_nr(
unsigned long nr)
2177 return online_section(__nr_to_section(nr));
2180#ifdef CONFIG_MEMORY_HOTPLUG
2181void online_mem_sections(
unsigned long start_pfn,
unsigned long end_pfn);
2182void offline_mem_sections(
unsigned long start_pfn,
unsigned long end_pfn);
2185static inline struct mem_section *__pfn_to_section(
unsigned long pfn)
2187 return __nr_to_section(pfn_to_section_nr(pfn));
2190extern unsigned long __highest_present_section_nr;
2192static inline int subsection_map_index(
unsigned long pfn)
2194 return (pfn & ~(PAGE_SECTION_MASK)) / PAGES_PER_SUBSECTION;
2197#ifdef CONFIG_SPARSEMEM_VMEMMAP
2198static inline int pfn_section_valid(
struct mem_section *ms,
unsigned long pfn)
2200 int idx = subsection_map_index(pfn);
2201 struct mem_section_usage *usage =
READ_ONCE(ms->usage);
2203 return usage ?
test_bit(idx, usage->subsection_map) : 0;
2206static inline bool pfn_section_first_valid(
struct mem_section *ms,
unsigned long *pfn)
2208 struct mem_section_usage *usage =
READ_ONCE(ms->usage);
2209 int idx = subsection_map_index(*pfn);
2215 if (
test_bit(idx, usage->subsection_map))
2219 bit = find_next_bit(usage->subsection_map, SUBSECTIONS_PER_SECTION, idx);
2220 if (bit == SUBSECTIONS_PER_SECTION)
2223 *pfn = (*pfn & PAGE_SECTION_MASK) + (bit * PAGES_PER_SUBSECTION);
2227static inline int pfn_section_valid(
struct mem_section *ms,
unsigned long pfn)
2232static inline bool pfn_section_first_valid(
struct mem_section *ms,
unsigned long *pfn)
2238void sparse_init_early_section(
int nid,
struct page *
map,
unsigned long pnum,
2239 unsigned long flags);
2241#ifndef CONFIG_HAVE_ARCH_PFN_VALID
2253static inline int pfn_valid(
unsigned long pfn)
2255 struct mem_section *ms;
2264 if (PHYS_PFN(PFN_PHYS(pfn)) != pfn)
2267 if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
2269 ms = __pfn_to_section(pfn);
2271 if (!valid_section(ms)) {
2279 ret = early_section(ms) || pfn_section_valid(ms, pfn);
2286static inline unsigned long first_valid_pfn(
unsigned long pfn,
unsigned long end_pfn)
2288 unsigned long nr = pfn_to_section_nr(pfn);
2292 while (nr <= __highest_present_section_nr && pfn < end_pfn) {
2293 struct mem_section *ms = __pfn_to_section(pfn);
2295 if (valid_section(ms) &&
2296 (early_section(ms) || pfn_section_first_valid(ms, &pfn))) {
2303 pfn = section_nr_to_pfn(nr);
2310static inline unsigned long next_valid_pfn(
unsigned long pfn,
unsigned long end_pfn)
2323 if (pfn & ~(
IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP) ?
2324 PAGE_SUBSECTION_MASK : PAGE_SECTION_MASK))
2327 return first_valid_pfn(pfn, end_pfn);
2331#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \
2332 for ((_pfn) = first_valid_pfn((_start_pfn), (_end_pfn)); \
2333 (_pfn) < (_end_pfn); \
2334 (_pfn) = next_valid_pfn((_pfn), (_end_pfn)))
2340 if (pfn_to_section_nr(pfn) >= NR_MEM_SECTIONS)
2342 return present_section(__pfn_to_section(pfn));
2345static inline unsigned long next_present_section_nr(
unsigned long section_nr)
2347 while (++section_nr <= __highest_present_section_nr) {
2348 if (present_section_nr(section_nr))
2355#define for_each_present_section_nr(start, section_nr) \
2356 for (section_nr = next_present_section_nr(start - 1); \
2358 section_nr = next_present_section_nr(section_nr))
2366#define pfn_to_nid(pfn) \
2368 unsigned long __pfn_to_nid_pfn = (pfn); \
2369 page_to_nid(pfn_to_page(__pfn_to_nid_pfn)); \
2372#define pfn_to_nid(pfn) (0)
2376#define sparse_vmemmap_init_nid_early(_nid) do {} while (0)
2377#define sparse_vmemmap_init_nid_late(_nid) do {} while (0)
2378#define pfn_in_present_section pfn_valid
2385#ifndef for_each_valid_pfn
2386#define for_each_valid_pfn(_pfn, _start_pfn, _end_pfn) \
2387 for ((_pfn) = (_start_pfn); (_pfn) < (_end_pfn); (_pfn)++) \
2388 if (pfn_valid(_pfn))
#define true
Definition stdbool.h:36
uint8_t flags
Definition virtio.h:0
size_t a
Definition main.cpp:156
size_t b
Definition main.cpp:156
XEProcessList * list
Definition main.cpp:27
#define NULL
Definition actypes.h:561
#define test_bit(nr, addr)
Definition bitops.h:124
#define DECLARE_BITMAP(name, bits)
Definition bitops.h:63
#define __bitwise
Definition compiler.h:57
#define likely(x)
Definition compiler.h:29
#define unlikely(x)
Definition compiler.h:30
#define __always_inline
Definition compiler_attributes.h:55
#define __rcu
Definition compiler_types.h:72
#define __percpu
Definition compiler_types.h:71
bool enabled
Definition compose3d.cpp:135
#define container_of(ptr, type, member)
Definition container_of.h:19
int map
Definition d_mode.c:31
size_t size
Definition drm_bridge.h:1299
#define IS_ENABLED(option)
Definition kconfig.h:80
#define ASSERT_EXCLUSIVE_BITS(var, mask)
Definition kcsan-checks.h:525
struct kobject * parent
Definition kobject.h:91
void int node
Definition kthread.h:31
int w
Definition layout.c:118
uint8_t u8
Definition kernel.h:14
#define READ_ONCE(x)
Definition kernel.h:605
unsigned int gfp_t
Definition kernel.h:56
int8_t s8
Definition kernel.h:18
int spinlock_t
Definition kernel.h:44
int const struct list_head const struct list_head struct list_head * head
Definition list_sort.h:13
void kswapd_clear_hopeless(pg_data_t *pgdat, enum kswapd_clear_hopeless_reason reason)
int page_group_by_mobility_disabled
void init_currently_empty_zone(struct zone *zone, unsigned long start_pfn, unsigned long size)
#define NR_VM_NUMA_EVENT_ITEMS
Definition mmzone.h:213
void kswapd_try_clear_hopeless(struct pglist_data *pgdat, unsigned int order, int highest_zoneidx)
node_stat_item
Definition mmzone.h:236
@ NR_BALLOON_PAGES
Definition mmzone.h:330
@ NR_ACTIVE_FILE
Definition mmzone.h:241
@ WORKINGSET_RESTORE_ANON
Definition mmzone.h:255
@ WORKINGSET_ACTIVATE_ANON
Definition mmzone.h:252
@ NR_GPU_RECLAIM
Definition mmzone.h:333
@ NR_FILE_THPS
Definition mmzone.h:267
@ NR_INACTIVE_FILE
Definition mmzone.h:240
@ NR_WRITTEN
Definition mmzone.h:273
@ PGDEMOTE_KHUGEPAGED
Definition mmzone.h:312
@ NR_SLAB_UNRECLAIMABLE_B
Definition mmzone.h:244
@ WORKINGSET_ACTIVATE_FILE
Definition mmzone.h:253
@ NR_FOLL_PIN_RELEASED
Definition mmzone.h:277
@ NR_DIRTIED
Definition mmzone.h:272
@ PGSCAN_DIRECT
Definition mmzone.h:321
@ NR_FILE_PMDMAPPED
Definition mmzone.h:268
@ WORKINGSET_RESTORE_BASE
Definition mmzone.h:254
@ NR_FILE_MAPPED
Definition mmzone.h:259
@ NR_KERNEL_FILE_PAGES
Definition mmzone.h:331
@ PGSTEAL_KHUGEPAGED
Definition mmzone.h:316
@ PGSCAN_KHUGEPAGED
Definition mmzone.h:322
@ NR_SHMEM_THPS
Definition mmzone.h:265
@ NR_SHMEM
Definition mmzone.h:264
@ NR_SHMEM_PMDMAPPED
Definition mmzone.h:266
@ PGREFILL
Definition mmzone.h:326
@ NR_SECONDARY_PAGETABLE
Definition mmzone.h:284
@ PGSTEAL_DIRECT
Definition mmzone.h:315
@ NR_KERNEL_STACK_KB
Definition mmzone.h:279
@ WORKINGSET_REFAULT_BASE
Definition mmzone.h:248
@ NR_VMSCAN_IMMEDIATE
Definition mmzone.h:271
@ NR_KERNEL_MISC_RECLAIMABLE
Definition mmzone.h:275
@ NR_FILE_DIRTY
Definition mmzone.h:262
@ PGSTEAL_KSWAPD
Definition mmzone.h:314
@ PGSTEAL_FILE
Definition mmzone.h:319
@ WORKINGSET_REFAULT_ANON
Definition mmzone.h:249
@ NR_ANON_MAPPED
Definition mmzone.h:258
@ WORKINGSET_REFAULT_FILE
Definition mmzone.h:250
@ PGSTEAL_ANON
Definition mmzone.h:318
@ WORKINGSET_NODES
Definition mmzone.h:247
@ PGSCAN_KSWAPD
Definition mmzone.h:320
@ PGDEMOTE_DIRECT
Definition mmzone.h:311
@ WORKINGSET_NODERECLAIM
Definition mmzone.h:257
@ NR_THROTTLED_WRITTEN
Definition mmzone.h:274
@ NR_ACTIVE_ANON
Definition mmzone.h:239
@ NR_FOLL_PIN_ACQUIRED
Definition mmzone.h:276
@ NR_INACTIVE_ANON
Definition mmzone.h:238
@ NR_WRITEBACK
Definition mmzone.h:263
@ NR_ISOLATED_ANON
Definition mmzone.h:245
@ NR_GPU_ACTIVE
Definition mmzone.h:332
@ NR_UNEVICTABLE
Definition mmzone.h:242
@ NR_VMSCAN_WRITE
Definition mmzone.h:270
@ NR_VMALLOC
Definition mmzone.h:278
@ NR_LRU_BASE
Definition mmzone.h:237
@ WORKINGSET_ACTIVATE_BASE
Definition mmzone.h:251
@ NR_PAGETABLE
Definition mmzone.h:283
@ PGSCAN_PROACTIVE
Definition mmzone.h:323
@ NR_SLAB_RECLAIMABLE_B
Definition mmzone.h:243
@ PGDEMOTE_PROACTIVE
Definition mmzone.h:313
@ PGSCAN_ANON
Definition mmzone.h:324
@ NR_ANON_THPS
Definition mmzone.h:269
@ PGDEMOTE_KSWAPD
Definition mmzone.h:310
@ PGSTEAL_PROACTIVE
Definition mmzone.h:317
@ NR_VM_NODE_STAT_ITEMS
Definition mmzone.h:334
@ PGSCAN_FILE
Definition mmzone.h:325
@ WORKINGSET_RESTORE_FILE
Definition mmzone.h:256
@ NR_ISOLATED_FILE
Definition mmzone.h:246
@ NR_FILE_PAGES
Definition mmzone.h:261
zone_type
Definition mmzone.h:873
@ ZONE_MOVABLE
Definition mmzone.h:956
@ __MAX_NR_ZONES
Definition mmzone.h:960
@ ZONE_NORMAL
Definition mmzone.h:895
bool zone_watermark_ok(struct zone *z, unsigned int order, unsigned long mark, int highest_zoneidx, unsigned int alloc_flags)
#define MAX_NR_GENS
Definition mmzone.h:470
kswapd_clear_hopeless_reason
Definition mmzone.h:1624
@ KSWAPD_CLEAR_HOPELESS_KSWAPD
Definition mmzone.h:1626
@ KSWAPD_CLEAR_HOPELESS_OTHER
Definition mmzone.h:1625
@ KSWAPD_CLEAR_HOPELESS_PCP
Definition mmzone.h:1628
@ KSWAPD_CLEAR_HOPELESS_DIRECT
Definition mmzone.h:1627
bool __zone_watermark_ok(struct zone *z, unsigned int order, unsigned long mark, int highest_zoneidx, unsigned int alloc_flags, long free_pages)
#define zone_idx(zone)
Definition mmzone.h:1670
void wakeup_kswapd(struct zone *zone, gfp_t gfp_mask, int order, enum zone_type highest_zoneidx)
#define NR_VMEMMAP_TAILS
Definition mmzone.h:116
struct pglist_data * first_online_pgdat(void)
zone_watermarks
Definition mmzone.h:797
@ WMARK_LOW
Definition mmzone.h:799
@ WMARK_MIN
Definition mmzone.h:798
@ NR_WMARK
Definition mmzone.h:802
@ WMARK_HIGH
Definition mmzone.h:800
@ WMARK_PROMO
Definition mmzone.h:801
#define MAX_NR_TIERS
Definition mmzone.h:492
@ MAX_ZONELISTS
Definition mmzone.h:1395
@ ZONELIST_FALLBACK
Definition mmzone.h:1387
meminit_context
Definition mmzone.h:1642
@ MEMINIT_EARLY
Definition mmzone.h:1643
@ MEMINIT_HOTPLUG
Definition mmzone.h:1644
unsigned __bitwise isolate_mode_t
Definition mmzone.h:795
struct pglist_data * next_online_pgdat(struct pglist_data *pgdat)
#define ZONES_MASK
Definition mmzone.h:1268
void build_all_zonelists(pg_data_t *pgdat)
struct zoneref * __next_zones_zonelist(struct zoneref *z, enum zone_type highest_zoneidx, nodemask_t *nodes)
#define ASYNC_AND_SYNC
Definition mmzone.h:966
#define is_migrate_cma(migratetype)
Definition mmzone.h:159
#define MAX_ZONES_PER_ZONELIST
Definition mmzone.h:1384
#define LRU_FILE
Definition mmzone.h:385
#define sparse_vmemmap_init_nid_early(_nid)
Definition mmzone.h:2376
#define ZONES_PGSHIFT
Definition mmzone.h:1251
#define NR_PCP_LISTS
Definition mmzone.h:816
lruvec_flags
Definition mmzone.h:422
@ LRUVEC_NODE_CONGESTED
Definition mmzone.h:437
@ LRUVEC_CGROUP_CONGESTED
Definition mmzone.h:436
lru_list
Definition mmzone.h:387
@ LRU_INACTIVE_FILE
Definition mmzone.h:390
@ LRU_UNEVICTABLE
Definition mmzone.h:392
@ LRU_ACTIVE_FILE
Definition mmzone.h:391
@ NR_LRU_LISTS
Definition mmzone.h:393
@ LRU_INACTIVE_ANON
Definition mmzone.h:388
@ LRU_ACTIVE_ANON
Definition mmzone.h:389
void lruvec_init(struct lruvec *lruvec)
zone_flags
Definition mmzone.h:1161
@ ZONE_RECLAIM_ACTIVE
Definition mmzone.h:1165
@ ZONE_BOOSTED_WATERMARK
Definition mmzone.h:1162
@ ZONE_BELOW_HIGH
Definition mmzone.h:1166
const char *const migratetype_names[MIGRATE_TYPES]
#define sparse_vmemmap_init_nid_late(_nid)
Definition mmzone.h:2377
bool has_managed_zone(enum zone_type zone)
struct zone ____cacheline_internodealigned_in_smp
zone_stat_item
Definition mmzone.h:216
@ NR_ZONE_ACTIVE_ANON
Definition mmzone.h:221
@ NR_ZONE_UNEVICTABLE
Definition mmzone.h:224
@ NR_ZONE_LRU_BASE
Definition mmzone.h:219
@ NR_FREE_PAGES
Definition mmzone.h:217
@ NR_FREE_CMA_PAGES
Definition mmzone.h:230
@ NR_ZONE_INACTIVE_ANON
Definition mmzone.h:220
@ NR_ZONE_INACTIVE_FILE
Definition mmzone.h:222
@ NR_ZONE_ACTIVE_FILE
Definition mmzone.h:223
@ NR_ZONE_WRITE_PENDING
Definition mmzone.h:225
@ NR_MLOCK
Definition mmzone.h:226
@ NR_FREE_PAGES_BLOCKS
Definition mmzone.h:218
@ NR_VM_ZONE_STAT_ITEMS
Definition mmzone.h:234
struct pglist_data pg_data_t
#define LRU_ACTIVE
Definition mmzone.h:384
struct pglist_data contig_page_data
#define NR_PAGE_ORDERS
Definition mmzone.h:39
bool kswapd_test_hopeless(pg_data_t *pgdat)
pgdat_flags
Definition mmzone.h:1154
@ PGDAT_RECLAIM_LOCKED
Definition mmzone.h:1158
@ PGDAT_WRITEBACK
Definition mmzone.h:1155
#define ANON_AND_FILE
Definition mmzone.h:420
struct zone * next_zone(struct zone *zone)
migratetype
Definition mmzone.h:118
@ MIGRATE_UNMOVABLE
Definition mmzone.h:119
@ MIGRATE_RECLAIMABLE
Definition mmzone.h:121
@ MIGRATE_PCPTYPES
Definition mmzone.h:122
@ MIGRATE_HIGHATOMIC
Definition mmzone.h:123
@ MIGRATE_TYPES
Definition mmzone.h:143
@ __MIGRATE_TYPE_END
Definition mmzone.h:138
@ MIGRATE_MOVABLE
Definition mmzone.h:120
#define LRU_BASE
Definition mmzone.h:383
vmscan_throttle_state
Definition mmzone.h:396
@ NR_VMSCAN_THROTTLE
Definition mmzone.h:401
@ VMSCAN_THROTTLE_NOPROGRESS
Definition mmzone.h:399
@ VMSCAN_THROTTLE_CONGESTED
Definition mmzone.h:400
@ VMSCAN_THROTTLE_WRITEBACK
Definition mmzone.h:397
@ VMSCAN_THROTTLE_ISOLATED
Definition mmzone.h:398
struct per_cpu_pages ____cacheline_aligned_in_smp
#define pfn_in_present_section
Definition mmzone.h:2378
#define nodes_empty(src)
Definition nodemask.h:229
#define first_node(src)
Definition nodemask.h:250
node_t * nodes
Definition p_setup.c:64
#define rcu_read_unlock_sched()
Definition rcupdate.h:35
#define rcu_read_lock_sched()
Definition rcupdate.h:34
struct seqlock seqlock_t
Definition seqlock_types.h:108
unsigned long flags
Definition mm_types.h:17
unsigned long nr_free
Definition mmzone.h:197
struct list_head free_list[MIGRATE_TYPES]
Definition mmzone.h:196
Definition list_nulls.h:21
Definition list_nulls.h:25
atomic_long_t nonresident_age
Definition mmzone.h:770
unsigned long flags
Definition mmzone.h:774
unsigned long file_cost
Definition mmzone.h:768
struct zswap_lruvec_state zswap_lruvec_state
Definition mmzone.h:786
unsigned long refaults[ANON_AND_FILE]
Definition mmzone.h:772
spinlock_t lru_lock
Definition mmzone.h:761
unsigned long anon_cost
Definition mmzone.h:767
struct list_head lists[NR_LRU_LISTS]
Definition mmzone.h:759
Definition nodemask_types.h:17
s8 stat_threshold
Definition mmzone.h:867
s8 vm_node_stat_diff[NR_VM_NODE_STAT_ITEMS]
Definition mmzone.h:868
short free_count
Definition mmzone.h:845
int batch
Definition mmzone.h:839
int high
Definition mmzone.h:836
u8 flags
Definition mmzone.h:840
int high_min
Definition mmzone.h:837
spinlock_t lock
Definition mmzone.h:834
int count
Definition mmzone.h:835
int high_max
Definition mmzone.h:838
struct list_head lists[NR_PCP_LISTS]
Definition mmzone.h:848
u8 alloc_factor
Definition mmzone.h:841
int kswapd_order
Definition mmzone.h:1520
CACHELINE_PADDING(_pad1_)
enum zone_type kswapd_highest_zoneidx
Definition mmzone.h:1521
atomic_t nr_writeback_throttled
Definition mmzone.h:1513
struct zone node_zones[MAX_NR_ZONES]
Definition mmzone.h:1471
CACHELINE_PADDING(_pad2_)
struct lruvec __lruvec
Definition mmzone.h:1579
int nr_zones
Definition mmzone.h:1480
wait_queue_head_t pfmemalloc_wait
Definition mmzone.h:1508
wait_queue_head_t kswapd_wait
Definition mmzone.h:1507
unsigned long node_present_pages
Definition mmzone.h:1503
struct per_cpu_nodestat __percpu * per_cpu_nodestats
Definition mmzone.h:1593
struct zonelist node_zonelists[MAX_ZONELISTS]
Definition mmzone.h:1478
unsigned long node_start_pfn
Definition mmzone.h:1502
atomic_t kswapd_failures
Definition mmzone.h:1523
unsigned long nr_reclaim_start
Definition mmzone.h:1514
atomic_long_t vm_stat[NR_VM_NODE_STAT_ITEMS]
Definition mmzone.h:1594
struct task_struct * kswapd
Definition mmzone.h:1519
unsigned long totalreserve_pages
Definition mmzone.h:1536
wait_queue_head_t reclaim_wait[NR_VMSCAN_THROTTLE]
Definition mmzone.h:1511
unsigned long flags
Definition mmzone.h:1581
unsigned long node_spanned_pages
Definition mmzone.h:1504
int node_id
Definition mmzone.h:1506
Definition workqueue.h:44
unsigned long nr_reserved_highatomic
Definition mmzone.h:975
unsigned long spanned_pages
Definition mmzone.h:1057
struct per_cpu_pages __percpu * per_cpu_pageset
Definition mmzone.h:993
const char * name
Definition mmzone.h:1066
unsigned long nr_free_highatomic
Definition mmzone.h:976
unsigned long _watermark[NR_WMARK]
Definition mmzone.h:972
CACHELINE_PADDING(_pad3_)
atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]
Definition mmzone.h:1147
int initialized
Definition mmzone.h:1082
int pageset_high_min
Definition mmzone.h:999
unsigned long watermark_boost
Definition mmzone.h:973
atomic_long_t managed_pages
Definition mmzone.h:1056
int pageset_batch
Definition mmzone.h:1001
unsigned long flags
Definition mmzone.h:1099
bool contiguous
Definition mmzone.h:1143
struct per_cpu_zonestat __percpu * per_cpu_zonestats
Definition mmzone.h:994
struct pglist_data * zone_pgdat
Definition mmzone.h:992
unsigned long zone_start_pfn
Definition mmzone.h:1012
CACHELINE_PADDING(_pad1_)
spinlock_t lock
Definition mmzone.h:1102
atomic_long_t vm_numa_event[NR_VM_NUMA_EVENT_ITEMS]
Definition mmzone.h:1148
struct llist_head trylock_free_pages
Definition mmzone.h:1105
int pageset_high_max
Definition mmzone.h:1000
long lowmem_reserve[MAX_NR_ZONES]
Definition mmzone.h:987
unsigned long present_pages
Definition mmzone.h:1058
CACHELINE_PADDING(_pad2_)
unsigned long percpu_drift_mark
Definition mmzone.h:1115
unsigned long * pageblock_flags
Definition mmzone.h:1008
struct zoneref _zonerefs[MAX_ZONES_PER_ZONELIST+1]
Definition mmzone.h:1422
int zone_idx
Definition mmzone.h:1404
struct zone * zone
Definition mmzone.h:1403
TTY * root
Definition tty.cpp:47