|
@@ -12,8 +12,7 @@
|
|
|
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(filter);
|
|
@@ -22,43 +21,27 @@ void show_mem(unsigned int filter)
|
|
|
return;
|
|
|
|
|
|
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());
|