at v3.5 1.4 kB view raw
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 12void show_mem(unsigned int filter) 13{ 14 pg_data_t *pgdat; 15 unsigned long total = 0, reserved = 0, shared = 0, 16 nonshared = 0, highmem = 0; 17 18 printk("Mem-Info:\n"); 19 show_free_areas(filter); 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("%lu pages RAM\n", total); 53#ifdef CONFIG_HIGHMEM 54 printk("%lu pages HighMem\n", highmem); 55#endif 56 printk("%lu pages reserved\n", reserved); 57 printk("%lu pages shared\n", shared); 58 printk("%lu pages non-shared\n", nonshared); 59#ifdef CONFIG_QUICKLIST 60 printk("%lu pages in pagetable cache\n", 61 quicklist_total_size()); 62#endif 63}