Commit 454c63b02e530f10b4345343f63596dd705888d0
Committed by
Linus Torvalds
1 parent
2c97b7fc0d
Exists in
master
and in
39 other branches
lib: generic show_mem()
This implements a platform-independent version of show_mem(). Signed-off-by: Johannes Weiner <hannes@saeurebad.de> Cc: Richard Henderson <rth@twiddle.net> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Haavard Skinnemoen <hskinnemoen@atmel.com> Cc: Bryan Wu <cooloney@kernel.org> Cc: Chris Zankel <chris@zankel.net> Cc: Ingo Molnar <mingo@elte.hu> Cc: Jeff Dike <jdike@addtoit.com> Cc: David S. Miller <davem@davemloft.net> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: David Howells <dhowells@redhat.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Greg Ungerer <gerg@uclinux.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: Hirokazu Takata <takata@linux-m32r.org> Cc: Mikael Starvik <starvik@axis.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 64 additions and 1 deletions Side-by-side Diff
lib/Makefile
... | ... | @@ -11,7 +11,7 @@ |
11 | 11 | rbtree.o radix-tree.o dump_stack.o \ |
12 | 12 | idr.o int_sqrt.o extable.o prio_tree.o \ |
13 | 13 | sha1.o irq_regs.o reciprocal_div.o argv_split.o \ |
14 | - proportions.o prio_heap.o ratelimit.o | |
14 | + proportions.o prio_heap.o ratelimit.o show_mem.o | |
15 | 15 | |
16 | 16 | lib-$(CONFIG_MMU) += ioremap.o |
17 | 17 | lib-$(CONFIG_SMP) += cpumask.o |
lib/show_mem.c
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/nmi.h> | |
10 | +#include <linux/quicklist.h> | |
11 | + | |
12 | +void show_mem(void) | |
13 | +{ | |
14 | + pg_data_t *pgdat; | |
15 | + unsigned long total = 0, reserved = 0, shared = 0, | |
16 | + nonshared = 0, highmem = 0; | |
17 | + | |
18 | + printk(KERN_INFO "Mem-Info:\n"); | |
19 | + show_free_areas(); | |
20 | + | |
21 | + for_each_online_pgdat(pgdat) { | |
22 | + unsigned long i, flags; | |
23 | + | |
24 | + pgdat_resize_lock(pgdat, &flags); | |
25 | + for (i = 0; i < pgdat->node_spanned_pages; i++) { | |
26 | + struct page *page; | |
27 | + unsigned long pfn = pgdat->node_start_pfn + i; | |
28 | + | |
29 | + if (unlikely(!(i % MAX_ORDER_NR_PAGES))) | |
30 | + touch_nmi_watchdog(); | |
31 | + | |
32 | + if (!pfn_valid(pfn)) | |
33 | + continue; | |
34 | + | |
35 | + page = pfn_to_page(pfn); | |
36 | + | |
37 | + if (PageHighMem(page)) | |
38 | + highmem++; | |
39 | + | |
40 | + if (PageReserved(page)) | |
41 | + reserved++; | |
42 | + else if (page_count(page) == 1) | |
43 | + nonshared++; | |
44 | + else if (page_count(page) > 1) | |
45 | + shared += page_count(page) - 1; | |
46 | + | |
47 | + total++; | |
48 | + } | |
49 | + pgdat_resize_unlock(pgdat, &flags); | |
50 | + } | |
51 | + | |
52 | + printk(KERN_INFO "%lu pages RAM\n", total); | |
53 | +#ifdef CONFIG_HIGHMEM | |
54 | + printk(KERN_INFO "%lu pages HighMem\n", highmem); | |
55 | +#endif | |
56 | + printk(KERN_INFO "%lu pages reserved\n", reserved); | |
57 | + printk(KERN_INFO "%lu pages shared\n", shared); | |
58 | + printk(KERN_INFO "%lu pages non-shared\n", nonshared); | |
59 | +#ifdef CONFIG_QUICKLIST | |
60 | + printk(KERN_INFO "%lu pages in pagetable cache\n", | |
61 | + quicklist_total_size()); | |
62 | +#endif | |
63 | +} |