2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

mm/vmstat: utilize designated initializers for the vmstat_text array

The vmstat_text array defines labels for counters displayed in
/proc/vmstat.  The current definition of the array implies a specific
order of the counters in their enums, making it fragile.

To make it clear which counter the label is for, use designated
initializers.

Link: https://lkml.kernel.org/r/20250603084556.113975-1-kirill.shutemov@linux.intel.com
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
Kirill A. Shutemov 2025-06-03 11:45:56 +03:00 committed by Andrew Morton
parent 8a63ff68e5
commit ed6a9068a0

View File

@ -1163,318 +1163,339 @@ int fragmentation_index(struct zone *zone, unsigned int order)
#if defined(CONFIG_PROC_FS) || defined(CONFIG_SYSFS) || \ #if defined(CONFIG_PROC_FS) || defined(CONFIG_SYSFS) || \
defined(CONFIG_NUMA) || defined(CONFIG_MEMCG) defined(CONFIG_NUMA) || defined(CONFIG_MEMCG)
#ifdef CONFIG_ZONE_DMA #ifdef CONFIG_ZONE_DMA
#define TEXT_FOR_DMA(xx) xx "_dma", #define TEXT_FOR_DMA(xx, yy) [xx##_DMA] = yy "_dma",
#else #else
#define TEXT_FOR_DMA(xx) #define TEXT_FOR_DMA(xx, yy)
#endif #endif
#ifdef CONFIG_ZONE_DMA32 #ifdef CONFIG_ZONE_DMA32
#define TEXT_FOR_DMA32(xx) xx "_dma32", #define TEXT_FOR_DMA32(xx, yy) [xx##_DMA32] = yy "_dma32",
#else #else
#define TEXT_FOR_DMA32(xx) #define TEXT_FOR_DMA32(xx, yy)
#endif #endif
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
#define TEXT_FOR_HIGHMEM(xx) xx "_high", #define TEXT_FOR_HIGHMEM(xx, yy) [xx##_HIGH] = yy "_high",
#else #else
#define TEXT_FOR_HIGHMEM(xx) #define TEXT_FOR_HIGHMEM(xx, yy)
#endif #endif
#ifdef CONFIG_ZONE_DEVICE #ifdef CONFIG_ZONE_DEVICE
#define TEXT_FOR_DEVICE(xx) xx "_device", #define TEXT_FOR_DEVICE(xx, yy) [xx##_DEVICE] = yy "_device",
#else #else
#define TEXT_FOR_DEVICE(xx) #define TEXT_FOR_DEVICE(xx, yy)
#endif #endif
#define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_normal", \ #define TEXTS_FOR_ZONES(xx, yy) \
TEXT_FOR_HIGHMEM(xx) xx "_movable", \ TEXT_FOR_DMA(xx, yy) \
TEXT_FOR_DEVICE(xx) TEXT_FOR_DMA32(xx, yy) \
[xx##_NORMAL] = yy "_normal", \
TEXT_FOR_HIGHMEM(xx, yy) \
[xx##_MOVABLE] = yy "_movable", \
TEXT_FOR_DEVICE(xx, yy)
const char * const vmstat_text[] = { const char * const vmstat_text[] = {
/* enum zone_stat_item counters */ /* enum zone_stat_item counters */
"nr_free_pages", #define I(x) (x)
"nr_free_pages_blocks", [I(NR_FREE_PAGES)] = "nr_free_pages",
"nr_zone_inactive_anon", [I(NR_FREE_PAGES_BLOCKS)] = "nr_free_pages_blocks",
"nr_zone_active_anon", [I(NR_ZONE_INACTIVE_ANON)] = "nr_zone_inactive_anon",
"nr_zone_inactive_file", [I(NR_ZONE_ACTIVE_ANON)] = "nr_zone_active_anon",
"nr_zone_active_file", [I(NR_ZONE_INACTIVE_FILE)] = "nr_zone_inactive_file",
"nr_zone_unevictable", [I(NR_ZONE_ACTIVE_FILE)] = "nr_zone_active_file",
"nr_zone_write_pending", [I(NR_ZONE_UNEVICTABLE)] = "nr_zone_unevictable",
"nr_mlock", [I(NR_ZONE_WRITE_PENDING)] = "nr_zone_write_pending",
[I(NR_MLOCK)] = "nr_mlock",
#if IS_ENABLED(CONFIG_ZSMALLOC) #if IS_ENABLED(CONFIG_ZSMALLOC)
"nr_zspages", [I(NR_ZSPAGES)] = "nr_zspages",
#endif #endif
"nr_free_cma", [I(NR_FREE_CMA_PAGES)] = "nr_free_cma",
#ifdef CONFIG_UNACCEPTED_MEMORY #ifdef CONFIG_UNACCEPTED_MEMORY
"nr_unaccepted", [I(NR_UNACCEPTED)] = "nr_unaccepted",
#endif #endif
#undef I
/* enum numa_stat_item counters */ /* enum numa_stat_item counters */
#define I(x) (NR_VM_ZONE_STAT_ITEMS + x)
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
"numa_hit", [I(NUMA_HIT)] = "numa_hit",
"numa_miss", [I(NUMA_MISS)] = "numa_miss",
"numa_foreign", [I(NUMA_FOREIGN)] = "numa_foreign",
"numa_interleave", [I(NUMA_INTERLEAVE_HIT)] = "numa_interleave",
"numa_local", [I(NUMA_LOCAL)] = "numa_local",
"numa_other", [I(NUMA_OTHER)] = "numa_other",
#endif #endif
#undef I
/* enum node_stat_item counters */ /* enum node_stat_item counters */
"nr_inactive_anon", #define I(x) (NR_VM_ZONE_STAT_ITEMS + NR_VM_NUMA_EVENT_ITEMS + x)
"nr_active_anon", [I(NR_INACTIVE_ANON)] = "nr_inactive_anon",
"nr_inactive_file", [I(NR_ACTIVE_ANON)] = "nr_active_anon",
"nr_active_file", [I(NR_INACTIVE_FILE)] = "nr_inactive_file",
"nr_unevictable", [I(NR_ACTIVE_FILE)] = "nr_active_file",
"nr_slab_reclaimable", [I(NR_UNEVICTABLE)] = "nr_unevictable",
"nr_slab_unreclaimable", [I(NR_SLAB_RECLAIMABLE_B)] = "nr_slab_reclaimable",
"nr_isolated_anon", [I(NR_SLAB_UNRECLAIMABLE_B)] = "nr_slab_unreclaimable",
"nr_isolated_file", [I(NR_ISOLATED_ANON)] = "nr_isolated_anon",
"workingset_nodes", [I(NR_ISOLATED_FILE)] = "nr_isolated_file",
"workingset_refault_anon", [I(WORKINGSET_NODES)] = "workingset_nodes",
"workingset_refault_file", [I(WORKINGSET_REFAULT_ANON)] = "workingset_refault_anon",
"workingset_activate_anon", [I(WORKINGSET_REFAULT_FILE)] = "workingset_refault_file",
"workingset_activate_file", [I(WORKINGSET_ACTIVATE_ANON)] = "workingset_activate_anon",
"workingset_restore_anon", [I(WORKINGSET_ACTIVATE_FILE)] = "workingset_activate_file",
"workingset_restore_file", [I(WORKINGSET_RESTORE_ANON)] = "workingset_restore_anon",
"workingset_nodereclaim", [I(WORKINGSET_RESTORE_FILE)] = "workingset_restore_file",
"nr_anon_pages", [I(WORKINGSET_NODERECLAIM)] = "workingset_nodereclaim",
"nr_mapped", [I(NR_ANON_MAPPED)] = "nr_anon_pages",
"nr_file_pages", [I(NR_FILE_MAPPED)] = "nr_mapped",
"nr_dirty", [I(NR_FILE_PAGES)] = "nr_file_pages",
"nr_writeback", [I(NR_FILE_DIRTY)] = "nr_dirty",
"nr_writeback_temp", [I(NR_WRITEBACK)] = "nr_writeback",
"nr_shmem", [I(NR_WRITEBACK_TEMP)] = "nr_writeback_temp",
"nr_shmem_hugepages", [I(NR_SHMEM)] = "nr_shmem",
"nr_shmem_pmdmapped", [I(NR_SHMEM_THPS)] = "nr_shmem_hugepages",
"nr_file_hugepages", [I(NR_SHMEM_PMDMAPPED)] = "nr_shmem_pmdmapped",
"nr_file_pmdmapped", [I(NR_FILE_THPS)] = "nr_file_hugepages",
"nr_anon_transparent_hugepages", [I(NR_FILE_PMDMAPPED)] = "nr_file_pmdmapped",
"nr_vmscan_write", [I(NR_ANON_THPS)] = "nr_anon_transparent_hugepages",
"nr_vmscan_immediate_reclaim", [I(NR_VMSCAN_WRITE)] = "nr_vmscan_write",
"nr_dirtied", [I(NR_VMSCAN_IMMEDIATE)] = "nr_vmscan_immediate_reclaim",
"nr_written", [I(NR_DIRTIED)] = "nr_dirtied",
"nr_throttled_written", [I(NR_WRITTEN)] = "nr_written",
"nr_kernel_misc_reclaimable", [I(NR_THROTTLED_WRITTEN)] = "nr_throttled_written",
"nr_foll_pin_acquired", [I(NR_KERNEL_MISC_RECLAIMABLE)] = "nr_kernel_misc_reclaimable",
"nr_foll_pin_released", [I(NR_FOLL_PIN_ACQUIRED)] = "nr_foll_pin_acquired",
"nr_kernel_stack", [I(NR_FOLL_PIN_RELEASED)] = "nr_foll_pin_released",
[I(NR_KERNEL_STACK_KB)] = "nr_kernel_stack",
#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK) #if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
"nr_shadow_call_stack", [I(NR_KERNEL_SCS_KB)] = "nr_shadow_call_stack",
#endif #endif
"nr_page_table_pages", [I(NR_PAGETABLE)] = "nr_page_table_pages",
"nr_sec_page_table_pages", [I(NR_SECONDARY_PAGETABLE)] = "nr_sec_page_table_pages",
#ifdef CONFIG_IOMMU_SUPPORT #ifdef CONFIG_IOMMU_SUPPORT
"nr_iommu_pages", [I(NR_IOMMU_PAGES)] = "nr_iommu_pages",
#endif #endif
#ifdef CONFIG_SWAP #ifdef CONFIG_SWAP
"nr_swapcached", [I(NR_SWAPCACHE)] = "nr_swapcached",
#endif #endif
#ifdef CONFIG_NUMA_BALANCING #ifdef CONFIG_NUMA_BALANCING
"pgpromote_success", [I(PGPROMOTE_SUCCESS)] = "pgpromote_success",
"pgpromote_candidate", [I(PGPROMOTE_CANDIDATE)] = "pgpromote_candidate",
#endif #endif
"pgdemote_kswapd", [I(PGDEMOTE_KSWAPD)] = "pgdemote_kswapd",
"pgdemote_direct", [I(PGDEMOTE_DIRECT)] = "pgdemote_direct",
"pgdemote_khugepaged", [I(PGDEMOTE_KHUGEPAGED)] = "pgdemote_khugepaged",
"pgdemote_proactive", [I(PGDEMOTE_PROACTIVE)] = "pgdemote_proactive",
#ifdef CONFIG_HUGETLB_PAGE #ifdef CONFIG_HUGETLB_PAGE
"nr_hugetlb", [I(NR_HUGETLB)] = "nr_hugetlb",
#endif #endif
"nr_balloon_pages", [I(NR_BALLOON_PAGES)] = "nr_balloon_pages",
#undef I
/* system-wide enum vm_stat_item counters */ /* system-wide enum vm_stat_item counters */
"nr_dirty_threshold", #define I(x) (NR_VM_ZONE_STAT_ITEMS + NR_VM_NUMA_EVENT_ITEMS + \
"nr_dirty_background_threshold", NR_VM_NODE_STAT_ITEMS + x)
"nr_memmap_pages", [I(NR_DIRTY_THRESHOLD)] = "nr_dirty_threshold",
"nr_memmap_boot_pages", [I(NR_DIRTY_BG_THRESHOLD)] = "nr_dirty_background_threshold",
[I(NR_MEMMAP_PAGES)] = "nr_memmap_pages",
[I(NR_MEMMAP_BOOT_PAGES)] = "nr_memmap_boot_pages",
#undef I
#if defined(CONFIG_VM_EVENT_COUNTERS) #if defined(CONFIG_VM_EVENT_COUNTERS)
/* enum vm_event_item counters */ /* enum vm_event_item counters */
"pgpgin", #define I(x) (NR_VM_ZONE_STAT_ITEMS + NR_VM_NUMA_EVENT_ITEMS + \
"pgpgout", NR_VM_NODE_STAT_ITEMS + NR_VM_STAT_ITEMS + x)
"pswpin",
"pswpout",
TEXTS_FOR_ZONES("pgalloc") [I(PGPGIN)] = "pgpgin",
TEXTS_FOR_ZONES("allocstall") [I(PGPGOUT)] = "pgpgout",
TEXTS_FOR_ZONES("pgskip") [I(PSWPIN)] = "pswpin",
[I(PSWPOUT)] = "pswpout",
"pgfree", #define OFF (NR_VM_ZONE_STAT_ITEMS + NR_VM_NUMA_EVENT_ITEMS + \
"pgactivate", NR_VM_NODE_STAT_ITEMS + NR_VM_STAT_ITEMS)
"pgdeactivate", TEXTS_FOR_ZONES(OFF+PGALLOC, "pgalloc")
"pglazyfree", TEXTS_FOR_ZONES(OFF+ALLOCSTALL, "allocstall")
TEXTS_FOR_ZONES(OFF+PGSCAN_SKIP, "pgskip")
#undef OFF
"pgfault", [I(PGFREE)] = "pgfree",
"pgmajfault", [I(PGACTIVATE)] = "pgactivate",
"pglazyfreed", [I(PGDEACTIVATE)] = "pgdeactivate",
[I(PGLAZYFREE)] = "pglazyfree",
"pgrefill", [I(PGFAULT)] = "pgfault",
"pgreuse", [I(PGMAJFAULT)] = "pgmajfault",
"pgsteal_kswapd", [I(PGLAZYFREED)] = "pglazyfreed",
"pgsteal_direct",
"pgsteal_khugepaged", [I(PGREFILL)] = "pgrefill",
"pgsteal_proactive", [I(PGREUSE)] = "pgreuse",
"pgscan_kswapd", [I(PGSTEAL_KSWAPD)] = "pgsteal_kswapd",
"pgscan_direct", [I(PGSTEAL_DIRECT)] = "pgsteal_direct",
"pgscan_khugepaged", [I(PGSTEAL_KHUGEPAGED)] = "pgsteal_khugepaged",
"pgscan_proactive", [I(PGSTEAL_PROACTIVE)] = "pgsteal_proactive",
"pgscan_direct_throttle", [I(PGSCAN_KSWAPD)] = "pgscan_kswapd",
"pgscan_anon", [I(PGSCAN_DIRECT)] = "pgscan_direct",
"pgscan_file", [I(PGSCAN_KHUGEPAGED)] = "pgscan_khugepaged",
"pgsteal_anon", [I(PGSCAN_PROACTIVE)] = "pgscan_proactive",
"pgsteal_file", [I(PGSCAN_DIRECT_THROTTLE)] = "pgscan_direct_throttle",
[I(PGSCAN_ANON)] = "pgscan_anon",
[I(PGSCAN_FILE)] = "pgscan_file",
[I(PGSTEAL_ANON)] = "pgsteal_anon",
[I(PGSTEAL_FILE)] = "pgsteal_file",
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
"zone_reclaim_success", [I(PGSCAN_ZONE_RECLAIM_SUCCESS)] = "zone_reclaim_success",
"zone_reclaim_failed", [I(PGSCAN_ZONE_RECLAIM_FAILED)] = "zone_reclaim_failed",
#endif #endif
"pginodesteal", [I(PGINODESTEAL)] = "pginodesteal",
"slabs_scanned", [I(SLABS_SCANNED)] = "slabs_scanned",
"kswapd_inodesteal", [I(KSWAPD_INODESTEAL)] = "kswapd_inodesteal",
"kswapd_low_wmark_hit_quickly", [I(KSWAPD_LOW_WMARK_HIT_QUICKLY)] = "kswapd_low_wmark_hit_quickly",
"kswapd_high_wmark_hit_quickly", [I(KSWAPD_HIGH_WMARK_HIT_QUICKLY)] = "kswapd_high_wmark_hit_quickly",
"pageoutrun", [I(PAGEOUTRUN)] = "pageoutrun",
"pgrotated", [I(PGROTATED)] = "pgrotated",
"drop_pagecache", [I(DROP_PAGECACHE)] = "drop_pagecache",
"drop_slab", [I(DROP_SLAB)] = "drop_slab",
"oom_kill", [I(OOM_KILL)] = "oom_kill",
#ifdef CONFIG_NUMA_BALANCING #ifdef CONFIG_NUMA_BALANCING
"numa_pte_updates", [I(NUMA_PTE_UPDATES)] = "numa_pte_updates",
"numa_huge_pte_updates", [I(NUMA_HUGE_PTE_UPDATES)] = "numa_huge_pte_updates",
"numa_hint_faults", [I(NUMA_HINT_FAULTS)] = "numa_hint_faults",
"numa_hint_faults_local", [I(NUMA_HINT_FAULTS_LOCAL)] = "numa_hint_faults_local",
"numa_pages_migrated", [I(NUMA_PAGE_MIGRATE)] = "numa_pages_migrated",
#endif #endif
#ifdef CONFIG_MIGRATION #ifdef CONFIG_MIGRATION
"pgmigrate_success", [I(PGMIGRATE_SUCCESS)] = "pgmigrate_success",
"pgmigrate_fail", [I(PGMIGRATE_FAIL)] = "pgmigrate_fail",
"thp_migration_success", [I(THP_MIGRATION_SUCCESS)] = "thp_migration_success",
"thp_migration_fail", [I(THP_MIGRATION_FAIL)] = "thp_migration_fail",
"thp_migration_split", [I(THP_MIGRATION_SPLIT)] = "thp_migration_split",
#endif #endif
#ifdef CONFIG_COMPACTION #ifdef CONFIG_COMPACTION
"compact_migrate_scanned", [I(COMPACTMIGRATE_SCANNED)] = "compact_migrate_scanned",
"compact_free_scanned", [I(COMPACTFREE_SCANNED)] = "compact_free_scanned",
"compact_isolated", [I(COMPACTISOLATED)] = "compact_isolated",
"compact_stall", [I(COMPACTSTALL)] = "compact_stall",
"compact_fail", [I(COMPACTFAIL)] = "compact_fail",
"compact_success", [I(COMPACTSUCCESS)] = "compact_success",
"compact_daemon_wake", [I(KCOMPACTD_WAKE)] = "compact_daemon_wake",
"compact_daemon_migrate_scanned", [I(KCOMPACTD_MIGRATE_SCANNED)] = "compact_daemon_migrate_scanned",
"compact_daemon_free_scanned", [I(KCOMPACTD_FREE_SCANNED)] = "compact_daemon_free_scanned",
#endif #endif
#ifdef CONFIG_HUGETLB_PAGE #ifdef CONFIG_HUGETLB_PAGE
"htlb_buddy_alloc_success", [I(HTLB_BUDDY_PGALLOC)] = "htlb_buddy_alloc_success",
"htlb_buddy_alloc_fail", [I(HTLB_BUDDY_PGALLOC_FAIL)] = "htlb_buddy_alloc_fail",
#endif #endif
#ifdef CONFIG_CMA #ifdef CONFIG_CMA
"cma_alloc_success", [I(CMA_ALLOC_SUCCESS)] = "cma_alloc_success",
"cma_alloc_fail", [I(CMA_ALLOC_FAIL)] = "cma_alloc_fail",
#endif #endif
"unevictable_pgs_culled", [I(UNEVICTABLE_PGCULLED)] = "unevictable_pgs_culled",
"unevictable_pgs_scanned", [I(UNEVICTABLE_PGSCANNED)] = "unevictable_pgs_scanned",
"unevictable_pgs_rescued", [I(UNEVICTABLE_PGRESCUED)] = "unevictable_pgs_rescued",
"unevictable_pgs_mlocked", [I(UNEVICTABLE_PGMLOCKED)] = "unevictable_pgs_mlocked",
"unevictable_pgs_munlocked", [I(UNEVICTABLE_PGMUNLOCKED)] = "unevictable_pgs_munlocked",
"unevictable_pgs_cleared", [I(UNEVICTABLE_PGCLEARED)] = "unevictable_pgs_cleared",
"unevictable_pgs_stranded", [I(UNEVICTABLE_PGSTRANDED)] = "unevictable_pgs_stranded",
#ifdef CONFIG_TRANSPARENT_HUGEPAGE #ifdef CONFIG_TRANSPARENT_HUGEPAGE
"thp_fault_alloc", [I(THP_FAULT_ALLOC)] = "thp_fault_alloc",
"thp_fault_fallback", [I(THP_FAULT_FALLBACK)] = "thp_fault_fallback",
"thp_fault_fallback_charge", [I(THP_FAULT_FALLBACK_CHARGE)] = "thp_fault_fallback_charge",
"thp_collapse_alloc", [I(THP_COLLAPSE_ALLOC)] = "thp_collapse_alloc",
"thp_collapse_alloc_failed", [I(THP_COLLAPSE_ALLOC_FAILED)] = "thp_collapse_alloc_failed",
"thp_file_alloc", [I(THP_FILE_ALLOC)] = "thp_file_alloc",
"thp_file_fallback", [I(THP_FILE_FALLBACK)] = "thp_file_fallback",
"thp_file_fallback_charge", [I(THP_FILE_FALLBACK_CHARGE)] = "thp_file_fallback_charge",
"thp_file_mapped", [I(THP_FILE_MAPPED)] = "thp_file_mapped",
"thp_split_page", [I(THP_SPLIT_PAGE)] = "thp_split_page",
"thp_split_page_failed", [I(THP_SPLIT_PAGE_FAILED)] = "thp_split_page_failed",
"thp_deferred_split_page", [I(THP_DEFERRED_SPLIT_PAGE)] = "thp_deferred_split_page",
"thp_underused_split_page", [I(THP_UNDERUSED_SPLIT_PAGE)] = "thp_underused_split_page",
"thp_split_pmd", [I(THP_SPLIT_PMD)] = "thp_split_pmd",
"thp_scan_exceed_none_pte", [I(THP_SCAN_EXCEED_NONE_PTE)] = "thp_scan_exceed_none_pte",
"thp_scan_exceed_swap_pte", [I(THP_SCAN_EXCEED_SWAP_PTE)] = "thp_scan_exceed_swap_pte",
"thp_scan_exceed_share_pte", [I(THP_SCAN_EXCEED_SHARED_PTE)] = "thp_scan_exceed_share_pte",
#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
"thp_split_pud", [I(THP_SPLIT_PUD)] = "thp_split_pud",
#endif #endif
"thp_zero_page_alloc", [I(THP_ZERO_PAGE_ALLOC)] = "thp_zero_page_alloc",
"thp_zero_page_alloc_failed", [I(THP_ZERO_PAGE_ALLOC_FAILED)] = "thp_zero_page_alloc_failed",
"thp_swpout", [I(THP_SWPOUT)] = "thp_swpout",
"thp_swpout_fallback", [I(THP_SWPOUT_FALLBACK)] = "thp_swpout_fallback",
#endif #endif
#ifdef CONFIG_MEMORY_BALLOON #ifdef CONFIG_MEMORY_BALLOON
"balloon_inflate", [I(BALLOON_INFLATE)] = "balloon_inflate",
"balloon_deflate", [I(BALLOON_DEFLATE)] = "balloon_deflate",
#ifdef CONFIG_BALLOON_COMPACTION #ifdef CONFIG_BALLOON_COMPACTION
"balloon_migrate", [I(BALLOON_MIGRATE)] = "balloon_migrate",
#endif #endif
#endif /* CONFIG_MEMORY_BALLOON */ #endif /* CONFIG_MEMORY_BALLOON */
#ifdef CONFIG_DEBUG_TLBFLUSH #ifdef CONFIG_DEBUG_TLBFLUSH
"nr_tlb_remote_flush", [I(NR_TLB_REMOTE_FLUSH)] = "nr_tlb_remote_flush",
"nr_tlb_remote_flush_received", [I(NR_TLB_REMOTE_FLUSH_RECEIVED)] = "nr_tlb_remote_flush_received",
"nr_tlb_local_flush_all", [I(NR_TLB_LOCAL_FLUSH_ALL)] = "nr_tlb_local_flush_all",
"nr_tlb_local_flush_one", [I(NR_TLB_LOCAL_FLUSH_ONE)] = "nr_tlb_local_flush_one",
#endif /* CONFIG_DEBUG_TLBFLUSH */ #endif /* CONFIG_DEBUG_TLBFLUSH */
#ifdef CONFIG_SWAP #ifdef CONFIG_SWAP
"swap_ra", [I(SWAP_RA)] = "swap_ra",
"swap_ra_hit", [I(SWAP_RA_HIT)] = "swap_ra_hit",
"swpin_zero", [I(SWPIN_ZERO)] = "swpin_zero",
"swpout_zero", [I(SWPOUT_ZERO)] = "swpout_zero",
#ifdef CONFIG_KSM #ifdef CONFIG_KSM
"ksm_swpin_copy", [I(KSM_SWPIN_COPY)] = "ksm_swpin_copy",
#endif #endif
#endif #endif
#ifdef CONFIG_KSM #ifdef CONFIG_KSM
"cow_ksm", [I(COW_KSM)] = "cow_ksm",
#endif #endif
#ifdef CONFIG_ZSWAP #ifdef CONFIG_ZSWAP
"zswpin", [I(ZSWPIN)] = "zswpin",
"zswpout", [I(ZSWPOUT)] = "zswpout",
"zswpwb", [I(ZSWPWB)] = "zswpwb",
#endif #endif
#ifdef CONFIG_X86 #ifdef CONFIG_X86
"direct_map_level2_splits", [I(DIRECT_MAP_LEVEL2_SPLIT)] = "direct_map_level2_splits",
"direct_map_level3_splits", [I(DIRECT_MAP_LEVEL3_SPLIT)] = "direct_map_level3_splits",
"direct_map_level2_collapses", [I(DIRECT_MAP_LEVEL2_COLLAPSE)] = "direct_map_level2_collapses",
"direct_map_level3_collapses", [I(DIRECT_MAP_LEVEL3_COLLAPSE)] = "direct_map_level3_collapses",
#endif #endif
#ifdef CONFIG_PER_VMA_LOCK_STATS #ifdef CONFIG_PER_VMA_LOCK_STATS
"vma_lock_success", [I(VMA_LOCK_SUCCESS)] = "vma_lock_success",
"vma_lock_abort", [I(VMA_LOCK_ABORT)] = "vma_lock_abort",
"vma_lock_retry", [I(VMA_LOCK_RETRY)] = "vma_lock_retry",
"vma_lock_miss", [I(VMA_LOCK_MISS)] = "vma_lock_miss",
#endif #endif
#ifdef CONFIG_DEBUG_STACK_USAGE #ifdef CONFIG_DEBUG_STACK_USAGE
"kstack_1k", [I(KSTACK_1K)] = "kstack_1k",
#if THREAD_SIZE > 1024 #if THREAD_SIZE > 1024
"kstack_2k", [I(KSTACK_2K)] = "kstack_2k",
#endif #endif
#if THREAD_SIZE > 2048 #if THREAD_SIZE > 2048
"kstack_4k", [I(KSTACK_4K)] = "kstack_4k",
#endif #endif
#if THREAD_SIZE > 4096 #if THREAD_SIZE > 4096
"kstack_8k", [I(KSTACK_8K)] = "kstack_8k",
#endif #endif
#if THREAD_SIZE > 8192 #if THREAD_SIZE > 8192
"kstack_16k", [I(KSTACK_16K)] = "kstack_16k",
#endif #endif
#if THREAD_SIZE > 16384 #if THREAD_SIZE > 16384
"kstack_32k", [I(KSTACK_32K)] = "kstack_32k",
#endif #endif
#if THREAD_SIZE > 32768 #if THREAD_SIZE > 32768
"kstack_64k", [I(KSTACK_64K)] = "kstack_64k",
#endif #endif
#if THREAD_SIZE > 65536 #if THREAD_SIZE > 65536
"kstack_rest", [I(KSTACK_REST)] = "kstack_rest",
#endif #endif
#endif #endif
#undef I
#endif /* CONFIG_VM_EVENT_COUNTERS */ #endif /* CONFIG_VM_EVENT_COUNTERS */
}; };
#endif /* CONFIG_PROC_FS || CONFIG_SYSFS || CONFIG_NUMA || CONFIG_MEMCG */ #endif /* CONFIG_PROC_FS || CONFIG_SYSFS || CONFIG_NUMA || CONFIG_MEMCG */