Commit 454c63b02e530f10b4345343f63596dd705888d0

Authored by Johannes Weiner
Committed by Linus Torvalds
1 parent 2c97b7fc0d

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 Inline Diff

1 # 1 #
2 # Makefile for some libs needed in the kernel. 2 # Makefile for some libs needed in the kernel.
3 # 3 #
4 4
5 ifdef CONFIG_FTRACE 5 ifdef CONFIG_FTRACE
6 ORIG_CFLAGS := $(KBUILD_CFLAGS) 6 ORIG_CFLAGS := $(KBUILD_CFLAGS)
7 KBUILD_CFLAGS = $(subst -pg,,$(ORIG_CFLAGS)) 7 KBUILD_CFLAGS = $(subst -pg,,$(ORIG_CFLAGS))
8 endif 8 endif
9 9
10 lib-y := ctype.o string.o vsprintf.o cmdline.o \ 10 lib-y := ctype.o string.o vsprintf.o cmdline.o \
11 rbtree.o radix-tree.o dump_stack.o \ 11 rbtree.o radix-tree.o dump_stack.o \
12 idr.o int_sqrt.o extable.o prio_tree.o \ 12 idr.o int_sqrt.o extable.o prio_tree.o \
13 sha1.o irq_regs.o reciprocal_div.o argv_split.o \ 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 lib-$(CONFIG_MMU) += ioremap.o 16 lib-$(CONFIG_MMU) += ioremap.o
17 lib-$(CONFIG_SMP) += cpumask.o 17 lib-$(CONFIG_SMP) += cpumask.o
18 18
19 lib-y += kobject.o kref.o klist.o 19 lib-y += kobject.o kref.o klist.o
20 20
21 obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ 21 obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \
22 bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o 22 bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o
23 23
24 ifeq ($(CONFIG_DEBUG_KOBJECT),y) 24 ifeq ($(CONFIG_DEBUG_KOBJECT),y)
25 CFLAGS_kobject.o += -DDEBUG 25 CFLAGS_kobject.o += -DDEBUG
26 CFLAGS_kobject_uevent.o += -DDEBUG 26 CFLAGS_kobject_uevent.o += -DDEBUG
27 endif 27 endif
28 28
29 lib-$(CONFIG_HOTPLUG) += kobject_uevent.o 29 lib-$(CONFIG_HOTPLUG) += kobject_uevent.o
30 obj-$(CONFIG_GENERIC_IOMAP) += iomap.o 30 obj-$(CONFIG_GENERIC_IOMAP) += iomap.o
31 obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o 31 obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o
32 obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o 32 obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o
33 obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o 33 obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o
34 obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock_debug.o 34 obj-$(CONFIG_DEBUG_SPINLOCK) += spinlock_debug.o
35 lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o 35 lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
36 lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o 36 lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
37 lib-$(CONFIG_GENERIC_FIND_FIRST_BIT) += find_next_bit.o 37 lib-$(CONFIG_GENERIC_FIND_FIRST_BIT) += find_next_bit.o
38 lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o 38 lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o
39 obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o 39 obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o
40 obj-$(CONFIG_LOCK_KERNEL) += kernel_lock.o 40 obj-$(CONFIG_LOCK_KERNEL) += kernel_lock.o
41 obj-$(CONFIG_PLIST) += plist.o 41 obj-$(CONFIG_PLIST) += plist.o
42 obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o 42 obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o
43 obj-$(CONFIG_DEBUG_LIST) += list_debug.o 43 obj-$(CONFIG_DEBUG_LIST) += list_debug.o
44 obj-$(CONFIG_DEBUG_OBJECTS) += debugobjects.o 44 obj-$(CONFIG_DEBUG_OBJECTS) += debugobjects.o
45 45
46 ifneq ($(CONFIG_HAVE_DEC_LOCK),y) 46 ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
47 lib-y += dec_and_lock.o 47 lib-y += dec_and_lock.o
48 endif 48 endif
49 49
50 obj-$(CONFIG_BITREVERSE) += bitrev.o 50 obj-$(CONFIG_BITREVERSE) += bitrev.o
51 obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o 51 obj-$(CONFIG_CRC_CCITT) += crc-ccitt.o
52 obj-$(CONFIG_CRC16) += crc16.o 52 obj-$(CONFIG_CRC16) += crc16.o
53 obj-$(CONFIG_CRC_T10DIF)+= crc-t10dif.o 53 obj-$(CONFIG_CRC_T10DIF)+= crc-t10dif.o
54 obj-$(CONFIG_CRC_ITU_T) += crc-itu-t.o 54 obj-$(CONFIG_CRC_ITU_T) += crc-itu-t.o
55 obj-$(CONFIG_CRC32) += crc32.o 55 obj-$(CONFIG_CRC32) += crc32.o
56 obj-$(CONFIG_CRC7) += crc7.o 56 obj-$(CONFIG_CRC7) += crc7.o
57 obj-$(CONFIG_LIBCRC32C) += libcrc32c.o 57 obj-$(CONFIG_LIBCRC32C) += libcrc32c.o
58 obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o 58 obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o
59 59
60 obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/ 60 obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/
61 obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/ 61 obj-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate/
62 obj-$(CONFIG_REED_SOLOMON) += reed_solomon/ 62 obj-$(CONFIG_REED_SOLOMON) += reed_solomon/
63 obj-$(CONFIG_LZO_COMPRESS) += lzo/ 63 obj-$(CONFIG_LZO_COMPRESS) += lzo/
64 obj-$(CONFIG_LZO_DECOMPRESS) += lzo/ 64 obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
65 65
66 obj-$(CONFIG_TEXTSEARCH) += textsearch.o 66 obj-$(CONFIG_TEXTSEARCH) += textsearch.o
67 obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o 67 obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o
68 obj-$(CONFIG_TEXTSEARCH_BM) += ts_bm.o 68 obj-$(CONFIG_TEXTSEARCH_BM) += ts_bm.o
69 obj-$(CONFIG_TEXTSEARCH_FSM) += ts_fsm.o 69 obj-$(CONFIG_TEXTSEARCH_FSM) += ts_fsm.o
70 obj-$(CONFIG_SMP) += percpu_counter.o 70 obj-$(CONFIG_SMP) += percpu_counter.o
71 obj-$(CONFIG_AUDIT_GENERIC) += audit.o 71 obj-$(CONFIG_AUDIT_GENERIC) += audit.o
72 72
73 obj-$(CONFIG_SWIOTLB) += swiotlb.o 73 obj-$(CONFIG_SWIOTLB) += swiotlb.o
74 obj-$(CONFIG_IOMMU_HELPER) += iommu-helper.o 74 obj-$(CONFIG_IOMMU_HELPER) += iommu-helper.o
75 obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o 75 obj-$(CONFIG_FAULT_INJECTION) += fault-inject.o
76 76
77 lib-$(CONFIG_GENERIC_BUG) += bug.o 77 lib-$(CONFIG_GENERIC_BUG) += bug.o
78 78
79 obj-$(CONFIG_HAVE_LMB) += lmb.o 79 obj-$(CONFIG_HAVE_LMB) += lmb.o
80 80
81 obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o 81 obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o
82 82
83 hostprogs-y := gen_crc32table 83 hostprogs-y := gen_crc32table
84 clean-files := crc32table.h 84 clean-files := crc32table.h
85 85
86 $(obj)/crc32.o: $(obj)/crc32table.h 86 $(obj)/crc32.o: $(obj)/crc32table.h
87 87
88 quiet_cmd_crc32 = GEN $@ 88 quiet_cmd_crc32 = GEN $@
89 cmd_crc32 = $< > $@ 89 cmd_crc32 = $< > $@
90 90
91 $(obj)/crc32table.h: $(obj)/gen_crc32table 91 $(obj)/crc32table.h: $(obj)/gen_crc32table
92 $(call cmd,crc32) 92 $(call cmd,crc32)
93 93
File was created 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 }
64