]>
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 | 20 | |
4b59e6c4 DR |
21 | if (filter & SHOW_MEM_FILTER_PAGE_COUNT) |
22 | return; | |
23 | ||
454c63b0 JW |
24 | for_each_online_pgdat(pgdat) { |
25 | unsigned long i, flags; | |
26 | ||
27 | pgdat_resize_lock(pgdat, &flags); | |
28 | for (i = 0; i < pgdat->node_spanned_pages; i++) { | |
29 | struct page *page; | |
30 | unsigned long pfn = pgdat->node_start_pfn + i; | |
31 | ||
32 | if (unlikely(!(i % MAX_ORDER_NR_PAGES))) | |
33 | touch_nmi_watchdog(); | |
34 | ||
35 | if (!pfn_valid(pfn)) | |
36 | continue; | |
37 | ||
38 | page = pfn_to_page(pfn); | |
39 | ||
40 | if (PageHighMem(page)) | |
41 | highmem++; | |
42 | ||
43 | if (PageReserved(page)) | |
44 | reserved++; | |
45 | else if (page_count(page) == 1) | |
46 | nonshared++; | |
47 | else if (page_count(page) > 1) | |
48 | shared += page_count(page) - 1; | |
49 | ||
50 | total++; | |
51 | } | |
52 | pgdat_resize_unlock(pgdat, &flags); | |
53 | } | |
54 | ||
f047f4f3 | 55 | printk("%lu pages RAM\n", total); |
454c63b0 | 56 | #ifdef CONFIG_HIGHMEM |
f047f4f3 | 57 | printk("%lu pages HighMem\n", highmem); |
454c63b0 | 58 | #endif |
f047f4f3 AW |
59 | printk("%lu pages reserved\n", reserved); |
60 | printk("%lu pages shared\n", shared); | |
61 | printk("%lu pages non-shared\n", nonshared); | |
454c63b0 | 62 | #ifdef CONFIG_QUICKLIST |
f047f4f3 | 63 | printk("%lu pages in pagetable cache\n", |
454c63b0 JW |
64 | quicklist_total_size()); |
65 | #endif | |
66 | } |