18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Generic show_mem() implementation
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2008 Johannes Weiner <hannes@saeurebad.de>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/mm.h>
98c2ecf20Sopenharmony_ci#include <linux/cma.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_civoid show_mem(unsigned int filter, nodemask_t *nodemask)
128c2ecf20Sopenharmony_ci{
138c2ecf20Sopenharmony_ci	pg_data_t *pgdat;
148c2ecf20Sopenharmony_ci	unsigned long total = 0, reserved = 0, highmem = 0;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci	printk("Mem-Info:\n");
178c2ecf20Sopenharmony_ci	show_free_areas(filter, nodemask);
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	for_each_online_pgdat(pgdat) {
208c2ecf20Sopenharmony_ci		int zoneid;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci		for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) {
238c2ecf20Sopenharmony_ci			struct zone *zone = &pgdat->node_zones[zoneid];
248c2ecf20Sopenharmony_ci			if (!populated_zone(zone))
258c2ecf20Sopenharmony_ci				continue;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci			total += zone->present_pages;
288c2ecf20Sopenharmony_ci			reserved += zone->present_pages - zone_managed_pages(zone);
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci			if (is_highmem_idx(zoneid))
318c2ecf20Sopenharmony_ci				highmem += zone->present_pages;
328c2ecf20Sopenharmony_ci		}
338c2ecf20Sopenharmony_ci	}
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	printk("%lu pages RAM\n", total);
368c2ecf20Sopenharmony_ci	printk("%lu pages HighMem/MovableOnly\n", highmem);
378c2ecf20Sopenharmony_ci	printk("%lu pages reserved\n", reserved);
388c2ecf20Sopenharmony_ci#ifdef CONFIG_CMA
398c2ecf20Sopenharmony_ci	printk("%lu pages cma reserved\n", totalcma_pages);
408c2ecf20Sopenharmony_ci#endif
418c2ecf20Sopenharmony_ci#ifdef CONFIG_MEMORY_FAILURE
428c2ecf20Sopenharmony_ci	printk("%lu pages hwpoisoned\n", atomic_long_read(&num_poisoned_pages));
438c2ecf20Sopenharmony_ci#endif
448c2ecf20Sopenharmony_ci}
45