blob: 9450250236f5b8d78319881734cb7b1f353ada21
1 | /* |
2 | * Generic show_mem() implementation |
3 | * |
4 | * Copyright (C) 2008 Johannes Weiner <hannes@saeurebad.de> |
5 | * All code subject to the GPL version 2. |
6 | */ |
7 | |
8 | #include <linux/mm.h> |
9 | #include <linux/quicklist.h> |
10 | #include <linux/cma.h> |
11 | |
12 | void show_mem(unsigned int filter) |
13 | { |
14 | pg_data_t *pgdat; |
15 | unsigned long total = 0, reserved = 0, highmem = 0; |
16 | |
17 | printk("Mem-Info:\n"); |
18 | show_free_areas(filter); |
19 | |
20 | for_each_online_pgdat(pgdat) { |
21 | unsigned long flags; |
22 | int zoneid; |
23 | |
24 | pgdat_resize_lock(pgdat, &flags); |
25 | for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) { |
26 | struct zone *zone = &pgdat->node_zones[zoneid]; |
27 | if (!populated_zone(zone)) |
28 | continue; |
29 | |
30 | total += zone->present_pages; |
31 | reserved += zone->present_pages - zone->managed_pages; |
32 | |
33 | if (is_highmem_idx(zoneid)) |
34 | highmem += zone->present_pages; |
35 | } |
36 | pgdat_resize_unlock(pgdat, &flags); |
37 | } |
38 | |
39 | printk("%lu pages RAM\n", total); |
40 | printk("%lu pages HighMem/MovableOnly\n", highmem); |
41 | printk("%lu pages reserved\n", reserved); |
42 | #ifdef CONFIG_CMA |
43 | printk("%lu pages cma reserved\n", totalcma_pages); |
44 | #endif |
45 | #ifdef CONFIG_QUICKLIST |
46 | printk("%lu pages in pagetable cache\n", |
47 | quicklist_total_size()); |
48 | #endif |
49 | #ifdef CONFIG_MEMORY_FAILURE |
50 | printk("%lu pages hwpoisoned\n", atomic_long_read(&num_poisoned_pages)); |
51 | #endif |
52 | } |
53 | EXPORT_SYMBOL(show_mem); |
54 |