[PATCH] Drop __get_zone_counts()
[linux-drm-fsl-dcu.git] / mm / vmstat.c
index c1b5f4106b38d2c2f7c1ae56d9ba1c0f160bddcd..21ba6f88b35ccd5138be52f14507c67791a70d88 100644 (file)
@@ -9,42 +9,16 @@
  *             Christoph Lameter <christoph@lameter.com>
  */
 
-#include <linux/config.h>
 #include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/cpu.h>
 
-void __get_zone_counts(unsigned long *active, unsigned long *inactive,
-                       unsigned long *free, struct pglist_data *pgdat)
-{
-       struct zone *zones = pgdat->node_zones;
-       int i;
-
-       *active = 0;
-       *inactive = 0;
-       *free = 0;
-       for (i = 0; i < MAX_NR_ZONES; i++) {
-               *active += zones[i].nr_active;
-               *inactive += zones[i].nr_inactive;
-               *free += zones[i].free_pages;
-       }
-}
-
 void get_zone_counts(unsigned long *active,
                unsigned long *inactive, unsigned long *free)
 {
-       struct pglist_data *pgdat;
-
-       *active = 0;
-       *inactive = 0;
-       *free = 0;
-       for_each_online_pgdat(pgdat) {
-               unsigned long l, m, n;
-               __get_zone_counts(&l, &m, &n, pgdat);
-               *active += l;
-               *inactive += m;
-               *free += n;
-       }
+       *active = global_page_state(NR_ACTIVE);
+       *inactive = global_page_state(NR_INACTIVE);
+       *free = global_page_state(NR_FREE_PAGES);
 }
 
 #ifdef CONFIG_VM_EVENT_COUNTERS
@@ -240,7 +214,7 @@ EXPORT_SYMBOL(mod_zone_page_state);
  * in between and therefore the atomicity vs. interrupt cannot be exploited
  * in a useful way here.
  */
-static void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
+void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
 {
        struct per_cpu_pageset *pcp = zone_pcp(zone, smp_processor_id());
        s8 *p = pcp->vm_stat_diff + item;
@@ -261,9 +235,8 @@ void __inc_zone_page_state(struct page *page, enum zone_stat_item item)
 }
 EXPORT_SYMBOL(__inc_zone_page_state);
 
-void __dec_zone_page_state(struct page *page, enum zone_stat_item item)
+void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
 {
-       struct zone *zone = page_zone(page);
        struct per_cpu_pageset *pcp = zone_pcp(zone, smp_processor_id());
        s8 *p = pcp->vm_stat_diff + item;
 
@@ -276,6 +249,11 @@ void __dec_zone_page_state(struct page *page, enum zone_stat_item item)
                *p = overstep;
        }
 }
+
+void __dec_zone_page_state(struct page *page, enum zone_stat_item item)
+{
+       __dec_zone_state(page_zone(page), item);
+}
 EXPORT_SYMBOL(__dec_zone_page_state);
 
 void inc_zone_state(struct zone *zone, enum zone_stat_item item)
@@ -321,6 +299,9 @@ void refresh_cpu_vm_stats(int cpu)
        for_each_zone(zone) {
                struct per_cpu_pageset *pcp;
 
+               if (!populated_zone(zone))
+                       continue;
+
                pcp = zone_pcp(zone, cpu);
 
                for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
@@ -368,7 +349,7 @@ void zone_statistics(struct zonelist *zonelist, struct zone *z)
                __inc_zone_state(z, NUMA_MISS);
                __inc_zone_state(zonelist->zones[0], NUMA_FOREIGN);
        }
-       if (z->zone_pgdat == NODE_DATA(numa_node_id()))
+       if (z->node == numa_node_id())
                __inc_zone_state(z, NUMA_LOCAL);
        else
                __inc_zone_state(z, NUMA_OTHER);
@@ -428,24 +409,44 @@ static int frag_show(struct seq_file *m, void *arg)
        return 0;
 }
 
-struct seq_operations fragmentation_op = {
+const struct seq_operations fragmentation_op = {
        .start  = frag_start,
        .next   = frag_next,
        .stop   = frag_stop,
        .show   = frag_show,
 };
 
-static char *vmstat_text[] = {
+#ifdef CONFIG_ZONE_DMA32
+#define TEXT_FOR_DMA32(xx) xx "_dma32",
+#else
+#define TEXT_FOR_DMA32(xx)
+#endif
+
+#ifdef CONFIG_HIGHMEM
+#define TEXT_FOR_HIGHMEM(xx) xx "_high",
+#else
+#define TEXT_FOR_HIGHMEM(xx)
+#endif
+
+#define TEXTS_FOR_ZONES(xx) xx "_dma", TEXT_FOR_DMA32(xx) xx "_normal", \
+                                       TEXT_FOR_HIGHMEM(xx)
+
+static const char * const vmstat_text[] = {
        /* Zoned VM counters */
+       "nr_free_pages",
+       "nr_active",
+       "nr_inactive",
        "nr_anon_pages",
        "nr_mapped",
        "nr_file_pages",
-       "nr_slab",
-       "nr_page_table_pages",
        "nr_dirty",
        "nr_writeback",
+       "nr_slab_reclaimable",
+       "nr_slab_unreclaimable",
+       "nr_page_table_pages",
        "nr_unstable",
        "nr_bounce",
+       "nr_vmscan_write",
 
 #ifdef CONFIG_NUMA
        "numa_hit",
@@ -462,10 +463,7 @@ static char *vmstat_text[] = {
        "pswpin",
        "pswpout",
 
-       "pgalloc_dma",
-       "pgalloc_dma32",
-       "pgalloc_normal",
-       "pgalloc_high",
+       TEXTS_FOR_ZONES("pgalloc")
 
        "pgfree",
        "pgactivate",
@@ -474,25 +472,10 @@ static char *vmstat_text[] = {
        "pgfault",
        "pgmajfault",
 
-       "pgrefill_dma",
-       "pgrefill_dma32",
-       "pgrefill_normal",
-       "pgrefill_high",
-
-       "pgsteal_dma",
-       "pgsteal_dma32",
-       "pgsteal_normal",
-       "pgsteal_high",
-
-       "pgscan_kswapd_dma",
-       "pgscan_kswapd_dma32",
-       "pgscan_kswapd_normal",
-       "pgscan_kswapd_high",
-
-       "pgscan_direct_dma",
-       "pgscan_direct_dma32",
-       "pgscan_direct_normal",
-       "pgscan_direct_high",
+       TEXTS_FOR_ZONES("pgrefill")
+       TEXTS_FOR_ZONES("pgsteal")
+       TEXTS_FOR_ZONES("pgscan_kswapd")
+       TEXTS_FOR_ZONES("pgscan_direct")
 
        "pginodesteal",
        "slabs_scanned",
@@ -528,17 +511,13 @@ static int zoneinfo_show(struct seq_file *m, void *arg)
                           "\n        min      %lu"
                           "\n        low      %lu"
                           "\n        high     %lu"
-                          "\n        active   %lu"
-                          "\n        inactive %lu"
                           "\n        scanned  %lu (a: %lu i: %lu)"
                           "\n        spanned  %lu"
                           "\n        present  %lu",
-                          zone->free_pages,
+                          zone_page_state(zone, NR_FREE_PAGES),
                           zone->pages_min,
                           zone->pages_low,
                           zone->pages_high,
-                          zone->nr_active,
-                          zone->nr_inactive,
                           zone->pages_scanned,
                           zone->nr_scan_active, zone->nr_scan_inactive,
                           zone->spanned_pages,
@@ -561,12 +540,6 @@ static int zoneinfo_show(struct seq_file *m, void *arg)
                        int j;
 
                        pageset = zone_pcp(zone, i);
-                       for (j = 0; j < ARRAY_SIZE(pageset->pcp); j++) {
-                               if (pageset->pcp[j].count)
-                                       break;
-                       }
-                       if (j == ARRAY_SIZE(pageset->pcp))
-                               continue;
                        for (j = 0; j < ARRAY_SIZE(pageset->pcp); j++) {
                                seq_printf(m,
                                           "\n    cpu: %i pcp: %i"
@@ -586,11 +559,9 @@ static int zoneinfo_show(struct seq_file *m, void *arg)
                seq_printf(m,
                           "\n  all_unreclaimable: %u"
                           "\n  prev_priority:     %i"
-                          "\n  temp_priority:     %i"
                           "\n  start_pfn:         %lu",
                           zone->all_unreclaimable,
                           zone->prev_priority,
-                          zone->temp_priority,
                           zone->zone_start_pfn);
                spin_unlock_irqrestore(&zone->lock, flags);
                seq_putc(m, '\n');
@@ -598,7 +569,7 @@ static int zoneinfo_show(struct seq_file *m, void *arg)
        return 0;
 }
 
-struct seq_operations zoneinfo_op = {
+const struct seq_operations zoneinfo_op = {
        .start  = frag_start, /* iterate over all zones. The same as in
                               * fragmentation. */
        .next   = frag_next,
@@ -661,7 +632,7 @@ static void vmstat_stop(struct seq_file *m, void *arg)
        m->private = NULL;
 }
 
-struct seq_operations vmstat_op = {
+const struct seq_operations vmstat_op = {
        .start  = vmstat_start,
        .next   = vmstat_next,
        .stop   = vmstat_stop,
@@ -680,13 +651,13 @@ static int __cpuinit vmstat_cpuup_callback(struct notifier_block *nfb,
                void *hcpu)
 {
        switch (action) {
-               case CPU_UP_PREPARE:
-               case CPU_UP_CANCELED:
-               case CPU_DEAD:
-                       refresh_zone_stat_thresholds();
-                       break;
-               default:
-                       break;
+       case CPU_UP_PREPARE:
+       case CPU_UP_CANCELED:
+       case CPU_DEAD:
+               refresh_zone_stat_thresholds();
+               break;
+       default:
+               break;
        }
        return NOTIFY_OK;
 }