From e4a087feec28dfb8c656fb27e18b477cf5ed8d65 Mon Sep 17 00:00:00 2001 From: gao xu Date: Sat, 12 Apr 2025 09:27:24 +0000 Subject: [PATCH] FROMLIST: BACKPORT: mm: add nr_free_highatomic in show_free_areas commit c928807f6f6b6("mm/page_alloc: keep track of free highatomic") adds a new variable nr_free_highatomic, which is useful for analyzing low mem issues. add nr_free_highatomic in show_free_areas. Signed-off-by: gao xu Link: https://lkml.kernel.org/r/d92eeff74f7a4578a14ac777cfe3603a@honor.com Acked-by: David Hildenbrand Reviewed-by: Barry Song Acked-by: David Rientjes Reviewed-by: Anshuman Khandual Cc: Mike Rapoport Cc: Suren Baghdasaryan Cc: Yu Zhao Signed-off-by: Andrew Morton Bug: 415703030 [In 6.6, there is no zone->nr_free_highatomic, replace it with free_highatomics[MAX_NR_ZONES]] Change-Id: I16ee8d70826904fb32774208c167776c519f6668 Signed-off-by: yipeng xiang (cherry picked from commit 66900132777164146aa4386b36b73b66784b8ae2) --- mm/internal.h | 1 + mm/show_mem.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/mm/internal.h b/mm/internal.h index a388b591fc45..914e6968c8dc 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -470,6 +470,7 @@ pmd_t *mm_find_pmd(struct mm_struct *mm, unsigned long address); #define K(x) ((x) << (PAGE_SHIFT-10)) extern char * const zone_names[MAX_NR_ZONES]; +extern unsigned long free_highatomics[MAX_NR_ZONES]; /* perform sanity checks on struct pages being allocated or freed */ DECLARE_STATIC_KEY_MAYBE(CONFIG_DEBUG_VM, check_pages_enabled); diff --git a/mm/show_mem.c b/mm/show_mem.c index 2b80cff80ee6..ecc8bc2c030c 100644 --- a/mm/show_mem.c +++ b/mm/show_mem.c @@ -320,6 +320,7 @@ static void show_free_areas(unsigned int filter, nodemask_t *nodemask, int max_z " low:%lukB" " high:%lukB" " reserved_highatomic:%luKB" + " free_highatomic:%luKB" " active_anon:%lukB" " inactive_anon:%lukB" " active_file:%lukB" @@ -341,6 +342,7 @@ static void show_free_areas(unsigned int filter, nodemask_t *nodemask, int max_z K(low_wmark_pages(zone)), K(high_wmark_pages(zone)), K(zone->nr_reserved_highatomic), + K(free_highatomics[zone_idx(zone)]), K(zone_page_state(zone, NR_ZONE_ACTIVE_ANON)), K(zone_page_state(zone, NR_ZONE_INACTIVE_ANON)), K(zone_page_state(zone, NR_ZONE_ACTIVE_FILE)),