Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / lib / show_mem.c
diff --git a/kernel/lib/show_mem.c b/kernel/lib/show_mem.c
new file mode 100644 (file)
index 0000000..adc98e1
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * 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/quicklist.h>
+#include <linux/cma.h>
+
+void show_mem(unsigned int filter)
+{
+       pg_data_t *pgdat;
+       unsigned long total = 0, reserved = 0, highmem = 0;
+
+       printk("Mem-Info:\n");
+       show_free_areas(filter);
+
+       for_each_online_pgdat(pgdat) {
+               unsigned long flags;
+               int zoneid;
+
+               pgdat_resize_lock(pgdat, &flags);
+               for (zoneid = 0; zoneid < MAX_NR_ZONES; zoneid++) {
+                       struct zone *zone = &pgdat->node_zones[zoneid];
+                       if (!populated_zone(zone))
+                               continue;
+
+                       total += zone->present_pages;
+                       reserved += zone->present_pages - zone->managed_pages;
+
+                       if (is_highmem_idx(zoneid))
+                               highmem += zone->present_pages;
+               }
+               pgdat_resize_unlock(pgdat, &flags);
+       }
+
+       printk("%lu pages RAM\n", total);
+       printk("%lu pages HighMem/MovableOnly\n", highmem);
+#ifdef CONFIG_CMA
+       printk("%lu pages reserved\n", (reserved - totalcma_pages));
+       printk("%lu pages cma reserved\n", totalcma_pages);
+#else
+       printk("%lu pages reserved\n", reserved);
+#endif
+#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
+}