From nobody Mon Feb 9 04:44:32 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 33B811D516F for ; Mon, 2 Jun 2025 09:24:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748856245; cv=none; b=DI3AKmkyjn6/YaJzd0Bk+lubXqaqRtpmah4YeR4UsPV2xlczQ6BO4zEluiCnP85tpR0kdZHBM6aXRREitpBFAfoQ6mTDzh/XWk4GXe0kjm4cf9smH/4ebES49DPS/C6anhzKtkWhevxNVgH9RNjEfUTtuQqqd4HP5MHTzXqF1r4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748856245; c=relaxed/simple; bh=jjCGcVLT1bBN28MXqaH8zoc4qx6D91yWTG4EESSqAl0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=t1fTyOd0yeUQGHBzeJo4GJjutEDwXX0Ey7KlyxR9sLIHnWCnDiUXxg79yxKTYwBMnHqjkGxDJPxOBZ1wdbKKbljxiWI7KrdTPcf2dWIGProciKfDhbe9b/YpaZlGSGd94HwdqfcRX6z2ON4g+kxceDxdb7F432Flu7PEIKppquI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.helo=mgamail.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=QMvxsbUZ; arc=none smtp.client-ip=192.198.163.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.helo=mgamail.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="QMvxsbUZ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1748856243; x=1780392243; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=jjCGcVLT1bBN28MXqaH8zoc4qx6D91yWTG4EESSqAl0=; b=QMvxsbUZDhCtMZl8nKt2qkFP2Xp+aUsHgKYQFvw5RE1e0eIvCjejERm6 +s466auReoVH46Klv5vMGpODxpVN8/nqk3wHiu+2gH0HHAztxeu6KtWNY H3KgAGARA77rjZafusbyFljEB18t+6GJMqyQAkxF3dK3fB7psB76EdqOB JHLcUTQzNiNo4azlgLHzi0aisGlofVVJFYCBmTXvYRYPFS/bG4XKjX57y NQZYZSRjZ1s7zrG9aiWty2SJUCAlhixmaTJ4eW+O003rGNLC0AlPZIqYq KzSQxgMY22gZSSN8cXKLF3mYVpZu7Ui4IHN4HnYCW45H+Z0UhQfXXEIaE A==; X-CSE-ConnectionGUID: Mac7VLrQRL6ClwRxJYTjBg== X-CSE-MsgGUID: NRa6SWFaSaGPBoLrwTbnFA== X-IronPort-AV: E=McAfee;i="6700,10204,11450"; a="49981859" X-IronPort-AV: E=Sophos;i="6.16,203,1744095600"; d="scan'208";a="49981859" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jun 2025 02:24:02 -0700 X-CSE-ConnectionGUID: Zz6giRLzRbuOXVsGtm6KMw== X-CSE-MsgGUID: 2EfPp4X7Qta+XV15xM/tTQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,203,1744095600"; d="scan'208";a="145440804" Received: from black.fi.intel.com ([10.237.72.28]) by orviesa008.jf.intel.com with ESMTP; 02 Jun 2025 02:24:00 -0700 Received: by black.fi.intel.com (Postfix, from userid 1000) id BB0C9139; Mon, 02 Jun 2025 12:23:57 +0300 (EEST) From: "Kirill A. Shutemov" To: Andrew Morton , David Hildenbrand Cc: lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com, hch@lst.de, linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [PATCH] mm/vmstat: Utilize designated initializers for the vmstat_text array Date: Mon, 2 Jun 2025 12:23:51 +0300 Message-ID: <20250602092351.3807465-1-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.47.2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. Signed-off-by: Kirill A. Shutemov Acked-by: Vlastimil Babka Reviewed-by: Christoph Hellwig --- mm/vmstat.c | 439 +++++++++++++++++++++++++++------------------------- 1 file changed, 230 insertions(+), 209 deletions(-) diff --git a/mm/vmstat.c b/mm/vmstat.c index 0903adace423..8ff621af253b 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1163,318 +1163,339 @@ int fragmentation_index(struct zone *zone, unsign= ed 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] =3D yy "_dma", #else -#define TEXT_FOR_DMA(xx) +#define TEXT_FOR_DMA(xx, yy) #endif =20 #ifdef CONFIG_ZONE_DMA32 -#define TEXT_FOR_DMA32(xx) xx "_dma32", +#define TEXT_FOR_DMA32(xx, yy) [xx##_DMA32] =3D yy "_dma32", #else -#define TEXT_FOR_DMA32(xx) +#define TEXT_FOR_DMA32(xx, yy) #endif =20 #ifdef CONFIG_HIGHMEM -#define TEXT_FOR_HIGHMEM(xx) xx "_high", +#define TEXT_FOR_HIGHMEM(xx, yy) [xx##_HIGH] =3D yy "_high", #else -#define TEXT_FOR_HIGHMEM(xx) +#define TEXT_FOR_HIGHMEM(xx, yy) #endif =20 #ifdef CONFIG_ZONE_DEVICE -#define TEXT_FOR_DEVICE(xx) xx "_device", +#define TEXT_FOR_DEVICE(xx, yy) [xx##_DEVICE] =3D yy "_device", #else -#define TEXT_FOR_DEVICE(xx) +#define TEXT_FOR_DEVICE(xx, yy) #endif =20 -#define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_norma= l", \ - 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] =3D yy "_normal", \ + TEXT_FOR_HIGHMEM(xx, yy) \ + [xx##_MOVABLE] =3D yy "_movable", \ + TEXT_FOR_DEVICE(xx, yy) =20 const char * const vmstat_text[] =3D { /* 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)] =3D "nr_free_pages", + [I(NR_FREE_PAGES_BLOCKS)] =3D "nr_free_pages_blocks", + [I(NR_ZONE_INACTIVE_ANON)] =3D "nr_zone_inactive_anon", + [I(NR_ZONE_ACTIVE_ANON)] =3D "nr_zone_active_anon", + [I(NR_ZONE_INACTIVE_FILE)] =3D "nr_zone_inactive_file", + [I(NR_ZONE_ACTIVE_FILE)] =3D "nr_zone_active_file", + [I(NR_ZONE_UNEVICTABLE)] =3D "nr_zone_unevictable", + [I(NR_ZONE_WRITE_PENDING)] =3D "nr_zone_write_pending", + [I(NR_MLOCK)] =3D "nr_mlock", #if IS_ENABLED(CONFIG_ZSMALLOC) - "nr_zspages", + [I(NR_ZSPAGES)] =3D "nr_zspages", #endif - "nr_free_cma", + [I(NR_FREE_CMA_PAGES)] =3D "nr_free_cma", #ifdef CONFIG_UNACCEPTED_MEMORY - "nr_unaccepted", + [I(NR_UNACCEPTED)] =3D "nr_unaccepted", #endif +#undef I =20 /* 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)] =3D "numa_hit", + [I(NUMA_MISS)] =3D "numa_miss", + [I(NUMA_FOREIGN)] =3D "numa_foreign", + [I(NUMA_INTERLEAVE_HIT)] =3D "numa_interleave", + [I(NUMA_LOCAL)] =3D "numa_local", + [I(NUMA_OTHER)] =3D "numa_other", #endif +#undef I =20 /* 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)] =3D "nr_inactive_anon", + [I(NR_ACTIVE_ANON)] =3D "nr_active_anon", + [I(NR_INACTIVE_FILE)] =3D "nr_inactive_file", + [I(NR_ACTIVE_FILE)] =3D "nr_active_file", + [I(NR_UNEVICTABLE)] =3D "nr_unevictable", + [I(NR_SLAB_RECLAIMABLE_B)] =3D "nr_slab_reclaimable", + [I(NR_SLAB_UNRECLAIMABLE_B)] =3D "nr_slab_unreclaimable", + [I(NR_ISOLATED_ANON)] =3D "nr_isolated_anon", + [I(NR_ISOLATED_FILE)] =3D "nr_isolated_file", + [I(WORKINGSET_NODES)] =3D "workingset_nodes", + [I(WORKINGSET_REFAULT_ANON)] =3D "workingset_refault_anon", + [I(WORKINGSET_REFAULT_FILE)] =3D "workingset_refault_file", + [I(WORKINGSET_ACTIVATE_ANON)] =3D "workingset_activate_anon", + [I(WORKINGSET_ACTIVATE_FILE)] =3D "workingset_activate_file", + [I(WORKINGSET_RESTORE_ANON)] =3D "workingset_restore_anon", + [I(WORKINGSET_RESTORE_FILE)] =3D "workingset_restore_file", + [I(WORKINGSET_NODERECLAIM)] =3D "workingset_nodereclaim", + [I(NR_ANON_MAPPED)] =3D "nr_anon_pages", + [I(NR_FILE_MAPPED)] =3D "nr_mapped", + [I(NR_FILE_PAGES)] =3D "nr_file_pages", + [I(NR_FILE_DIRTY)] =3D "nr_dirty", + [I(NR_WRITEBACK)] =3D "nr_writeback", + [I(NR_WRITEBACK_TEMP)] =3D "nr_writeback_temp", + [I(NR_SHMEM)] =3D "nr_shmem", + [I(NR_SHMEM_THPS)] =3D "nr_shmem_hugepages", + [I(NR_SHMEM_PMDMAPPED)] =3D "nr_shmem_pmdmapped", + [I(NR_FILE_THPS)] =3D "nr_file_hugepages", + [I(NR_FILE_PMDMAPPED)] =3D "nr_file_pmdmapped", + [I(NR_ANON_THPS)] =3D "nr_anon_transparent_hugepages", + [I(NR_VMSCAN_WRITE)] =3D "nr_vmscan_write", + [I(NR_VMSCAN_IMMEDIATE)] =3D "nr_vmscan_immediate_reclaim", + [I(NR_DIRTIED)] =3D "nr_dirtied", + [I(NR_WRITTEN)] =3D "nr_written", + [I(NR_THROTTLED_WRITTEN)] =3D "nr_throttled_written", + [I(NR_KERNEL_MISC_RECLAIMABLE)] =3D "nr_kernel_misc_reclaimable", + [I(NR_FOLL_PIN_ACQUIRED)] =3D "nr_foll_pin_acquired", + [I(NR_FOLL_PIN_RELEASED)] =3D "nr_foll_pin_released", + [I(NR_KERNEL_STACK_KB)] =3D "nr_kernel_stack", #if IS_ENABLED(CONFIG_SHADOW_CALL_STACK) - "nr_shadow_call_stack", + [I(NR_KERNEL_SCS_KB)] =3D "nr_shadow_call_stack", #endif - "nr_page_table_pages", - "nr_sec_page_table_pages", + [I(NR_PAGETABLE)] =3D "nr_page_table_pages", + [I(NR_SECONDARY_PAGETABLE)] =3D "nr_sec_page_table_pages", #ifdef CONFIG_IOMMU_SUPPORT - "nr_iommu_pages", + [I(NR_IOMMU_PAGES)] =3D "nr_iommu_pages", #endif #ifdef CONFIG_SWAP - "nr_swapcached", + [I(NR_SWAPCACHE)] =3D "nr_swapcached", #endif #ifdef CONFIG_NUMA_BALANCING - "pgpromote_success", - "pgpromote_candidate", + [I(PGPROMOTE_SUCCESS)] =3D "pgpromote_success", + [I(PGPROMOTE_CANDIDATE)] =3D "pgpromote_candidate", #endif - "pgdemote_kswapd", - "pgdemote_direct", - "pgdemote_khugepaged", - "pgdemote_proactive", + [I(PGDEMOTE_KSWAPD)] =3D "pgdemote_kswapd", + [I(PGDEMOTE_DIRECT)] =3D "pgdemote_direct", + [I(PGDEMOTE_KHUGEPAGED)] =3D "pgdemote_khugepaged", + [I(PGDEMOTE_PROACTIVE)] =3D "pgdemote_proactive", #ifdef CONFIG_HUGETLB_PAGE - "nr_hugetlb", + [I(NR_HUGETLB)] =3D "nr_hugetlb", #endif - "nr_balloon_pages", + [I(NR_BALLOON_PAGES)] =3D "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)] =3D "nr_dirty_threshold", + [I(NR_DIRTY_BG_THRESHOLD)] =3D "nr_dirty_background_threshold", + [I(NR_MEMMAP_PAGES)] =3D "nr_memmap_pages", + [I(NR_MEMMAP_BOOT_PAGES)] =3D "nr_memmap_boot_pages", +#undef I =20 #if defined(CONFIG_VM_EVENT_COUNTERS) || defined(CONFIG_MEMCG) /* 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) =20 - TEXTS_FOR_ZONES("pgalloc") - TEXTS_FOR_ZONES("allocstall") - TEXTS_FOR_ZONES("pgskip") + [I(PGPGIN)] =3D "pgpgin", + [I(PGPGOUT)] =3D "pgpgout", + [I(PSWPIN)] =3D "pswpin", + [I(PSWPOUT)] =3D "pswpout", =20 - "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 =20 - "pgfault", - "pgmajfault", - "pglazyfreed", + [I(PGFREE)] =3D "pgfree", + [I(PGACTIVATE)] =3D "pgactivate", + [I(PGDEACTIVATE)] =3D "pgdeactivate", + [I(PGLAZYFREE)] =3D "pglazyfree", =20 - "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)] =3D "pgfault", + [I(PGMAJFAULT)] =3D "pgmajfault", + [I(PGLAZYFREED)] =3D "pglazyfreed", + + [I(PGREFILL)] =3D "pgrefill", + [I(PGREUSE)] =3D "pgreuse", + [I(PGSTEAL_KSWAPD)] =3D "pgsteal_kswapd", + [I(PGSTEAL_DIRECT)] =3D "pgsteal_direct", + [I(PGSTEAL_KHUGEPAGED)] =3D "pgsteal_khugepaged", + [I(PGSTEAL_PROACTIVE)] =3D "pgsteal_proactive", + [I(PGSCAN_KSWAPD)] =3D "pgscan_kswapd", + [I(PGSCAN_DIRECT)] =3D "pgscan_direct", + [I(PGSCAN_KHUGEPAGED)] =3D "pgscan_khugepaged", + [I(PGSCAN_PROACTIVE)] =3D "pgscan_proactive", + [I(PGSCAN_DIRECT_THROTTLE)] =3D "pgscan_direct_throttle", + [I(PGSCAN_ANON)] =3D "pgscan_anon", + [I(PGSCAN_FILE)] =3D "pgscan_file", + [I(PGSTEAL_ANON)] =3D "pgsteal_anon", + [I(PGSTEAL_FILE)] =3D "pgsteal_file", =20 #ifdef CONFIG_NUMA - "zone_reclaim_success", - "zone_reclaim_failed", + [I(PGSCAN_ZONE_RECLAIM_SUCCESS)] =3D "zone_reclaim_success", + [I(PGSCAN_ZONE_RECLAIM_FAILED)] =3D "zone_reclaim_failed", #endif - "pginodesteal", - "slabs_scanned", - "kswapd_inodesteal", - "kswapd_low_wmark_hit_quickly", - "kswapd_high_wmark_hit_quickly", - "pageoutrun", + [I(PGINODESTEAL)] =3D "pginodesteal", + [I(SLABS_SCANNED)] =3D "slabs_scanned", + [I(KSWAPD_INODESTEAL)] =3D "kswapd_inodesteal", + [I(KSWAPD_LOW_WMARK_HIT_QUICKLY)] =3D "kswapd_low_wmark_hit_quickly", + [I(KSWAPD_HIGH_WMARK_HIT_QUICKLY)] =3D "kswapd_high_wmark_hit_quickly", + [I(PAGEOUTRUN)] =3D "pageoutrun", =20 - "pgrotated", + [I(PGROTATED)] =3D "pgrotated", =20 - "drop_pagecache", - "drop_slab", - "oom_kill", + [I(DROP_PAGECACHE)] =3D "drop_pagecache", + [I(DROP_SLAB)] =3D "drop_slab", + [I(OOM_KILL)] =3D "oom_kill", =20 #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)] =3D "numa_pte_updates", + [I(NUMA_HUGE_PTE_UPDATES)] =3D "numa_huge_pte_updates", + [I(NUMA_HINT_FAULTS)] =3D "numa_hint_faults", + [I(NUMA_HINT_FAULTS_LOCAL)] =3D "numa_hint_faults_local", + [I(NUMA_PAGE_MIGRATE)] =3D "numa_pages_migrated", #endif #ifdef CONFIG_MIGRATION - "pgmigrate_success", - "pgmigrate_fail", - "thp_migration_success", - "thp_migration_fail", - "thp_migration_split", + [I(PGMIGRATE_SUCCESS)] =3D "pgmigrate_success", + [I(PGMIGRATE_FAIL)] =3D "pgmigrate_fail", + [I(THP_MIGRATION_SUCCESS)] =3D "thp_migration_success", + [I(THP_MIGRATION_FAIL)] =3D "thp_migration_fail", + [I(THP_MIGRATION_SPLIT)] =3D "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)] =3D "compact_migrate_scanned", + [I(COMPACTFREE_SCANNED)] =3D "compact_free_scanned", + [I(COMPACTISOLATED)] =3D "compact_isolated", + [I(COMPACTSTALL)] =3D "compact_stall", + [I(COMPACTFAIL)] =3D "compact_fail", + [I(COMPACTSUCCESS)] =3D "compact_success", + [I(KCOMPACTD_WAKE)] =3D "compact_daemon_wake", + [I(KCOMPACTD_MIGRATE_SCANNED)] =3D "compact_daemon_migrate_scanned", + [I(KCOMPACTD_FREE_SCANNED)] =3D "compact_daemon_free_scanned", #endif =20 #ifdef CONFIG_HUGETLB_PAGE - "htlb_buddy_alloc_success", - "htlb_buddy_alloc_fail", + [I(HTLB_BUDDY_PGALLOC)] =3D "htlb_buddy_alloc_success", + [I(HTLB_BUDDY_PGALLOC_FAIL)] =3D "htlb_buddy_alloc_fail", #endif #ifdef CONFIG_CMA - "cma_alloc_success", - "cma_alloc_fail", + [I(CMA_ALLOC_SUCCESS)] =3D "cma_alloc_success", + [I(CMA_ALLOC_FAIL)] =3D "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)] =3D "unevictable_pgs_culled", + [I(UNEVICTABLE_PGSCANNED)] =3D "unevictable_pgs_scanned", + [I(UNEVICTABLE_PGRESCUED)] =3D "unevictable_pgs_rescued", + [I(UNEVICTABLE_PGMLOCKED)] =3D "unevictable_pgs_mlocked", + [I(UNEVICTABLE_PGMUNLOCKED)] =3D "unevictable_pgs_munlocked", + [I(UNEVICTABLE_PGCLEARED)] =3D "unevictable_pgs_cleared", + [I(UNEVICTABLE_PGSTRANDED)] =3D "unevictable_pgs_stranded", =20 #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)] =3D "thp_fault_alloc", + [I(THP_FAULT_FALLBACK)] =3D "thp_fault_fallback", + [I(THP_FAULT_FALLBACK_CHARGE)] =3D "thp_fault_fallback_charge", + [I(THP_COLLAPSE_ALLOC)] =3D "thp_collapse_alloc", + [I(THP_COLLAPSE_ALLOC_FAILED)] =3D "thp_collapse_alloc_failed", + [I(THP_FILE_ALLOC)] =3D "thp_file_alloc", + [I(THP_FILE_FALLBACK)] =3D "thp_file_fallback", + [I(THP_FILE_FALLBACK_CHARGE)] =3D "thp_file_fallback_charge", + [I(THP_FILE_MAPPED)] =3D "thp_file_mapped", + [I(THP_SPLIT_PAGE)] =3D "thp_split_page", + [I(THP_SPLIT_PAGE_FAILED)] =3D "thp_split_page_failed", + [I(THP_DEFERRED_SPLIT_PAGE)] =3D "thp_deferred_split_page", + [I(THP_UNDERUSED_SPLIT_PAGE)] =3D "thp_underused_split_page", + [I(THP_SPLIT_PMD)] =3D "thp_split_pmd", + [I(THP_SCAN_EXCEED_NONE_PTE)] =3D "thp_scan_exceed_none_pte", + [I(THP_SCAN_EXCEED_SWAP_PTE)] =3D "thp_scan_exceed_swap_pte", + [I(THP_SCAN_EXCEED_SHARED_PTE)] =3D "thp_scan_exceed_share_pte", #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD - "thp_split_pud", + [I(THP_SPLIT_PUD)] =3D "thp_split_pud", #endif - "thp_zero_page_alloc", - "thp_zero_page_alloc_failed", - "thp_swpout", - "thp_swpout_fallback", + [I(THP_ZERO_PAGE_ALLOC)] =3D "thp_zero_page_alloc", + [I(THP_ZERO_PAGE_ALLOC_FAILED)] =3D "thp_zero_page_alloc_failed", + [I(THP_SWPOUT)] =3D "thp_swpout", + [I(THP_SWPOUT_FALLBACK)] =3D "thp_swpout_fallback", #endif #ifdef CONFIG_MEMORY_BALLOON - "balloon_inflate", - "balloon_deflate", + [I(BALLOON_INFLATE)] =3D "balloon_inflate", + [I(BALLOON_DEFLATE)] =3D "balloon_deflate", #ifdef CONFIG_BALLOON_COMPACTION - "balloon_migrate", + [I(BALLOON_MIGRATE)] =3D "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)] =3D "nr_tlb_remote_flush", + [I(NR_TLB_REMOTE_FLUSH_RECEIVED)] =3D "nr_tlb_remote_flush_received", + [I(NR_TLB_LOCAL_FLUSH_ALL)] =3D "nr_tlb_local_flush_all", + [I(NR_TLB_LOCAL_FLUSH_ONE)] =3D "nr_tlb_local_flush_one", #endif /* CONFIG_DEBUG_TLBFLUSH */ =20 #ifdef CONFIG_SWAP - "swap_ra", - "swap_ra_hit", - "swpin_zero", - "swpout_zero", + [I(SWAP_RA)] =3D "swap_ra", + [I(SWAP_RA_HIT)] =3D "swap_ra_hit", + [I(SWPIN_ZERO)] =3D "swpin_zero", + [I(SWPOUT_ZERO)] =3D "swpout_zero", #ifdef CONFIG_KSM - "ksm_swpin_copy", + [I(KSM_SWPIN_COPY)] =3D "ksm_swpin_copy", #endif #endif #ifdef CONFIG_KSM - "cow_ksm", + [I(COW_KSM)] =3D "cow_ksm", #endif #ifdef CONFIG_ZSWAP - "zswpin", - "zswpout", - "zswpwb", + [I(ZSWPIN)] =3D "zswpin", + [I(ZSWPOUT)] =3D "zswpout", + [I(ZSWPWB)] =3D "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)] =3D "direct_map_level2_splits", + [I(DIRECT_MAP_LEVEL3_SPLIT)] =3D "direct_map_level3_splits", + [I(DIRECT_MAP_LEVEL2_COLLAPSE)] =3D "direct_map_level2_collapses", + [I(DIRECT_MAP_LEVEL3_COLLAPSE)] =3D "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)] =3D "vma_lock_success", + [I(VMA_LOCK_ABORT)] =3D "vma_lock_abort", + [I(VMA_LOCK_RETRY)] =3D "vma_lock_retry", + [I(VMA_LOCK_MISS)] =3D "vma_lock_miss", #endif #ifdef CONFIG_DEBUG_STACK_USAGE - "kstack_1k", + [I(KSTACK_1K)] =3D "kstack_1k", #if THREAD_SIZE > 1024 - "kstack_2k", + [I(KSTACK_2K)] =3D "kstack_2k", #endif #if THREAD_SIZE > 2048 - "kstack_4k", + [I(KSTACK_4K)] =3D "kstack_4k", #endif #if THREAD_SIZE > 4096 - "kstack_8k", + [I(KSTACK_8K)] =3D "kstack_8k", #endif #if THREAD_SIZE > 8192 - "kstack_16k", + [I(KSTACK_16K)] =3D "kstack_16k", #endif #if THREAD_SIZE > 16384 - "kstack_32k", + [I(KSTACK_32K)] =3D "kstack_32k", #endif #if THREAD_SIZE > 32768 - "kstack_64k", + [I(KSTACK_64K)] =3D "kstack_64k", #endif #if THREAD_SIZE > 65536 - "kstack_rest", + [I(KSTACK_REST)] =3D "kstack_rest", #endif #endif +#undef I #endif /* CONFIG_VM_EVENT_COUNTERS || CONFIG_MEMCG */ }; #endif /* CONFIG_PROC_FS || CONFIG_SYSFS || CONFIG_NUMA || CONFIG_MEMCG */ --=20 2.47.2