Blame view

lib/show_mem.c 1.34 KB
454c63b02   Johannes Weiner   lib: generic show...
1
2
3
4
5
6
7
8
9
10
  /*
   * Generic show_mem() implementation
   *
   * Copyright (C) 2008 Johannes Weiner <hannes@saeurebad.de>
   * All code subject to the GPL version 2.
   */
  
  #include <linux/mm.h>
  #include <linux/nmi.h>
  #include <linux/quicklist.h>
b2b755b5f   David Rientjes   lib, arch: add fi...
11
  void show_mem(unsigned int filter)
454c63b02   Johannes Weiner   lib: generic show...
12
13
14
15
  {
  	pg_data_t *pgdat;
  	unsigned long total = 0, reserved = 0, shared = 0,
  		nonshared = 0, highmem = 0;
f047f4f37   Amerigo Wang   mm: use the same ...
16
17
  	printk("Mem-Info:
  ");
7bf02ea22   David Rientjes   arch, mm: filter ...
18
  	show_free_areas(filter);
454c63b02   Johannes Weiner   lib: generic show...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  
  	for_each_online_pgdat(pgdat) {
  		unsigned long i, flags;
  
  		pgdat_resize_lock(pgdat, &flags);
  		for (i = 0; i < pgdat->node_spanned_pages; i++) {
  			struct page *page;
  			unsigned long pfn = pgdat->node_start_pfn + i;
  
  			if (unlikely(!(i % MAX_ORDER_NR_PAGES)))
  				touch_nmi_watchdog();
  
  			if (!pfn_valid(pfn))
  				continue;
  
  			page = pfn_to_page(pfn);
  
  			if (PageHighMem(page))
  				highmem++;
  
  			if (PageReserved(page))
  				reserved++;
  			else if (page_count(page) == 1)
  				nonshared++;
  			else if (page_count(page) > 1)
  				shared += page_count(page) - 1;
  
  			total++;
  		}
  		pgdat_resize_unlock(pgdat, &flags);
  	}
f047f4f37   Amerigo Wang   mm: use the same ...
50
51
  	printk("%lu pages RAM
  ", total);
454c63b02   Johannes Weiner   lib: generic show...
52
  #ifdef CONFIG_HIGHMEM
f047f4f37   Amerigo Wang   mm: use the same ...
53
54
  	printk("%lu pages HighMem
  ", highmem);
454c63b02   Johannes Weiner   lib: generic show...
55
  #endif
f047f4f37   Amerigo Wang   mm: use the same ...
56
57
58
59
60
61
  	printk("%lu pages reserved
  ", reserved);
  	printk("%lu pages shared
  ", shared);
  	printk("%lu pages non-shared
  ", nonshared);
454c63b02   Johannes Weiner   lib: generic show...
62
  #ifdef CONFIG_QUICKLIST
f047f4f37   Amerigo Wang   mm: use the same ...
63
64
  	printk("%lu pages in pagetable cache
  ",
454c63b02   Johannes Weiner   lib: generic show...
65
66
67
  		quicklist_total_size());
  #endif
  }