|
@@ -421,12 +421,47 @@ void __kprobes flush_icache_range(unsigned long start, unsigned long end)
|
|
|
|
|
|
void show_mem(void)
|
|
|
{
|
|
|
+ unsigned long total = 0, reserved = 0;
|
|
|
+ unsigned long shared = 0, cached = 0;
|
|
|
+ pg_data_t *pgdat;
|
|
|
+
|
|
|
printk(KERN_INFO "Mem-info:\n");
|
|
|
show_free_areas();
|
|
|
printk(KERN_INFO "Free swap: %6ldkB\n",
|
|
|
nr_swap_pages << (PAGE_SHIFT-10));
|
|
|
- printk(KERN_INFO "%ld pages of RAM\n", num_physpages);
|
|
|
- printk(KERN_INFO "%lu free pages\n", nr_free_pages());
|
|
|
+ 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 = pgdat_page_nr(pgdat, i);
|
|
|
+ total++;
|
|
|
+ if (PageReserved(page))
|
|
|
+ reserved++;
|
|
|
+ else if (PageSwapCache(page))
|
|
|
+ cached++;
|
|
|
+ else if (page_count(page))
|
|
|
+ shared += page_count(page) - 1;
|
|
|
+ }
|
|
|
+ pgdat_resize_unlock(pgdat, &flags);
|
|
|
+ }
|
|
|
+
|
|
|
+ printk(KERN_INFO "%lu pages of RAM\n", total);
|
|
|
+ printk(KERN_INFO "%lu reserved pages\n", reserved);
|
|
|
+ printk(KERN_INFO "%lu pages shared\n", shared);
|
|
|
+ printk(KERN_INFO "%lu pages swap cached\n", cached);
|
|
|
+
|
|
|
+ printk(KERN_INFO "%lu pages dirty\n",
|
|
|
+ global_page_state(NR_FILE_DIRTY));
|
|
|
+ printk(KERN_INFO "%lu pages writeback\n",
|
|
|
+ global_page_state(NR_WRITEBACK));
|
|
|
+ printk(KERN_INFO "%lu pages mapped\n",
|
|
|
+ global_page_state(NR_FILE_MAPPED));
|
|
|
+ printk(KERN_INFO "%lu pages slab\n",
|
|
|
+ global_page_state(NR_SLAB_RECLAIMABLE) +
|
|
|
+ global_page_state(NR_SLAB_UNRECLAIMABLE));
|
|
|
+ printk(KERN_INFO "%lu pages pagetables\n",
|
|
|
+ global_page_state(NR_PAGETABLE));
|
|
|
}
|
|
|
|
|
|
void mmu_info(struct seq_file *m)
|