]>
Commit | Line | Data |
---|---|---|
454c63b0 JW |
1 | /* |
2 | * Generic show_mem() implementation | |
3 | * | |
4 | * Copyright (C) 2008 Johannes Weiner <[email protected]> | |
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 | ||
b2b755b5 | 12 | void show_mem(unsigned int filter) |
454c63b0 JW |
13 | { |
14 | pg_data_t *pgdat; | |
15 | unsigned long total = 0, reserved = 0, shared = 0, | |
16 | nonshared = 0, highmem = 0; | |
17 | ||
f047f4f3 | 18 | printk("Mem-Info:\n"); |
7bf02ea2 | 19 | show_free_areas(filter); |
454c63b0 JW |
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 | ||
f047f4f3 | 52 | printk("%lu pages RAM\n", total); |
454c63b0 | 53 | #ifdef CONFIG_HIGHMEM |
f047f4f3 | 54 | printk("%lu pages HighMem\n", highmem); |
454c63b0 | 55 | #endif |
f047f4f3 AW |
56 | printk("%lu pages reserved\n", reserved); |
57 | printk("%lu pages shared\n", shared); | |
58 | printk("%lu pages non-shared\n", nonshared); | |
454c63b0 | 59 | #ifdef CONFIG_QUICKLIST |
f047f4f3 | 60 | printk("%lu pages in pagetable cache\n", |
454c63b0 JW |
61 | quicklist_total_size()); |
62 | #endif | |
63 | } |