[PATCH] mm: dma32 zone statistics
authorNick Piggin <nickpiggin@yahoo.com.au>
Fri, 6 Jan 2006 08:11:10 +0000 (00:11 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 6 Jan 2006 16:33:26 +0000 (08:33 -0800)
Add dma32 to zone statistics.  Also attempt to arrange struct page_state a
bit better (visually).

Signed-off-by: Nick Piggin <npiggin@suse.de>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
include/linux/mmzone.h
include/linux/page-flags.h
mm/page_alloc.c

index 0d1a5981bb940626e634487135a278071c3274d9..8d6caa414c4c93754014a97b30f48f58b64d1ac2 100644 (file)
@@ -397,6 +397,7 @@ static inline int is_normal_idx(int idx)
 {
        return (idx == ZONE_NORMAL);
 }
+
 /**
  * is_highmem - helper function to quickly check if a struct zone is a 
  *              highmem zone or not.  This is an attempt to keep references
@@ -413,6 +414,16 @@ static inline int is_normal(struct zone *zone)
        return zone == zone->zone_pgdat->node_zones + ZONE_NORMAL;
 }
 
+static inline int is_dma32(struct zone *zone)
+{
+       return zone == zone->zone_pgdat->node_zones + ZONE_DMA32;
+}
+
+static inline int is_dma(struct zone *zone)
+{
+       return zone == zone->zone_pgdat->node_zones + ZONE_DMA;
+}
+
 /* These two functions are used to setup the per zone pages min values */
 struct ctl_table;
 struct file;
index 343083fec25834b0d950ee0e496766b1629a277e..32d09c8d952b46f037acb070ed43ef27193fe7c0 100644 (file)
@@ -97,32 +97,40 @@ struct page_state {
        unsigned long pgpgout;          /* Disk writes */
        unsigned long pswpin;           /* swap reads */
        unsigned long pswpout;          /* swap writes */
-       unsigned long pgalloc_high;     /* page allocations */
 
+       unsigned long pgalloc_high;     /* page allocations */
        unsigned long pgalloc_normal;
+       unsigned long pgalloc_dma32;
        unsigned long pgalloc_dma;
+
        unsigned long pgfree;           /* page freeings */
        unsigned long pgactivate;       /* pages moved inactive->active */
        unsigned long pgdeactivate;     /* pages moved active->inactive */
 
        unsigned long pgfault;          /* faults (major+minor) */
        unsigned long pgmajfault;       /* faults (major only) */
+
        unsigned long pgrefill_high;    /* inspected in refill_inactive_zone */
        unsigned long pgrefill_normal;
+       unsigned long pgrefill_dma32;
        unsigned long pgrefill_dma;
 
        unsigned long pgsteal_high;     /* total highmem pages reclaimed */
        unsigned long pgsteal_normal;
+       unsigned long pgsteal_dma32;
        unsigned long pgsteal_dma;
+
        unsigned long pgscan_kswapd_high;/* total highmem pages scanned */
        unsigned long pgscan_kswapd_normal;
-
+       unsigned long pgscan_kswapd_dma32;
        unsigned long pgscan_kswapd_dma;
+
        unsigned long pgscan_direct_high;/* total highmem pages scanned */
        unsigned long pgscan_direct_normal;
+       unsigned long pgscan_direct_dma32;
        unsigned long pgscan_direct_dma;
-       unsigned long pginodesteal;     /* pages reclaimed via inode freeing */
 
+       unsigned long pginodesteal;     /* pages reclaimed via inode freeing */
        unsigned long slabs_scanned;    /* slab objects scanned */
        unsigned long kswapd_steal;     /* pages reclaimed by kswapd */
        unsigned long kswapd_inodesteal;/* reclaimed via kswapd inode freeing */
@@ -150,17 +158,19 @@ extern void __mod_page_state(unsigned long offset, unsigned long delta);
 #define add_page_state(member,delta) mod_page_state(member, (delta))
 #define sub_page_state(member,delta) mod_page_state(member, 0UL - (delta))
 
-#define mod_page_state_zone(zone, member, delta)                               \
-       do {                                                                    \
-               unsigned offset;                                                \
-               if (is_highmem(zone))                                           \
-                       offset = offsetof(struct page_state, member##_high);    \
-               else if (is_normal(zone))                                       \
-                       offset = offsetof(struct page_state, member##_normal);  \
-               else                                                            \
-                       offset = offsetof(struct page_state, member##_dma);     \
-               __mod_page_state(offset, (delta));                              \
-       } while (0)
+#define mod_page_state_zone(zone, member, delta)                       \
+ do {                                                                  \
+       unsigned offset;                                                \
+       if (is_highmem(zone))                                           \
+               offset = offsetof(struct page_state, member##_high);    \
+       else if (is_normal(zone))                                       \
+               offset = offsetof(struct page_state, member##_normal);  \
+       else if (is_dma32(zone))                                        \
+               offset = offsetof(struct page_state, member##_dma32);   \
+       else                                                            \
+               offset = offsetof(struct page_state, member##_dma);     \
+       __mod_page_state(offset, (delta));                              \
+ } while (0)
 
 /*
  * Manipulation of page state flags
index cdad3249cf7fc101892ee9d451c2f4726f3601ca..e12154d9c4ede318d1776e7636fee678485f0472 100644 (file)
@@ -2277,32 +2277,40 @@ static char *vmstat_text[] = {
        "pgpgout",
        "pswpin",
        "pswpout",
-       "pgalloc_high",
 
+       "pgalloc_high",
        "pgalloc_normal",
+       "pgalloc_dma32",
        "pgalloc_dma",
+
        "pgfree",
        "pgactivate",
        "pgdeactivate",
 
        "pgfault",
        "pgmajfault",
+
        "pgrefill_high",
        "pgrefill_normal",
+       "pgrefill_dma32",
        "pgrefill_dma",
 
        "pgsteal_high",
        "pgsteal_normal",
+       "pgsteal_dma32",
        "pgsteal_dma",
+
        "pgscan_kswapd_high",
        "pgscan_kswapd_normal",
-
+       "pgscan_kswapd_dma32",
        "pgscan_kswapd_dma",
+
        "pgscan_direct_high",
        "pgscan_direct_normal",
+       "pgscan_direct_dma32",
        "pgscan_direct_dma",
-       "pginodesteal",
 
+       "pginodesteal",
        "slabs_scanned",
        "kswapd_steal",
        "kswapd_inodesteal",