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