diff options
Diffstat (limited to 'lib/show_mem.c')
| -rw-r--r-- | lib/show_mem.c | 46 | 
1 files changed, 16 insertions, 30 deletions
diff --git a/lib/show_mem.c b/lib/show_mem.c index fdc77c82f92..09225796991 100644 --- a/lib/show_mem.c +++ b/lib/show_mem.c @@ -9,55 +9,41 @@  #include <linux/nmi.h>  #include <linux/quicklist.h> -void show_mem(void) +void show_mem(unsigned int filter)  {  	pg_data_t *pgdat; -	unsigned long total = 0, reserved = 0, shared = 0, -		nonshared = 0, highmem = 0; +	unsigned long total = 0, reserved = 0, highmem = 0;  	printk("Mem-Info:\n"); -	show_free_areas(); +	show_free_areas(filter);  	for_each_online_pgdat(pgdat) { -		unsigned long i, flags; +		unsigned long flags; +		int zoneid;  		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)) +		for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) { +			struct zone *zone = &pgdat->node_zones[zoneid]; +			if (!populated_zone(zone))  				continue; -			page = pfn_to_page(pfn); - -			if (PageHighMem(page)) -				highmem++; +			total += zone->present_pages; +			reserved = zone->present_pages - zone->managed_pages; -			if (PageReserved(page)) -				reserved++; -			else if (page_count(page) == 1) -				nonshared++; -			else if (page_count(page) > 1) -				shared += page_count(page) - 1; - -			total++; +			if (is_highmem_idx(zoneid)) +				highmem += zone->present_pages;  		}  		pgdat_resize_unlock(pgdat, &flags);  	}  	printk("%lu pages RAM\n", total); -#ifdef CONFIG_HIGHMEM -	printk("%lu pages HighMem\n", highmem); -#endif +	printk("%lu pages HighMem/MovableOnly\n", highmem);  	printk("%lu pages reserved\n", reserved); -	printk("%lu pages shared\n", shared); -	printk("%lu pages non-shared\n", nonshared);  #ifdef CONFIG_QUICKLIST  	printk("%lu pages in pagetable cache\n",  		quicklist_total_size());  #endif +#ifdef CONFIG_MEMORY_FAILURE +	printk("%lu pages hwpoisoned\n", atomic_long_read(&num_poisoned_pages)); +#endif  }  | 
