]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - mm/vmstat.c
[PATCH] ZVC: Overstep counters
[linux-2.6-omap-h63xx.git] / mm / vmstat.c
index dfdf24133901790e8ca744934bb57279aa25dee5..3799a0f7543a3e38621fbb2778eda7129a073af0 100644 (file)
@@ -190,8 +190,8 @@ static void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
        (*p)++;
 
        if (unlikely(*p > STAT_THRESHOLD)) {
-               zone_page_state_add(*p, zone, item);
-               *p = 0;
+               zone_page_state_add(*p + STAT_THRESHOLD / 2, zone, item);
+               *p = -STAT_THRESHOLD / 2;
        }
 }
 
@@ -209,8 +209,8 @@ void __dec_zone_page_state(struct page *page, enum zone_stat_item item)
        (*p)--;
 
        if (unlikely(*p < -STAT_THRESHOLD)) {
-               zone_page_state_add(*p, zone, item);
-               *p = 0;
+               zone_page_state_add(*p - STAT_THRESHOLD / 2, zone, item);
+               *p = STAT_THRESHOLD /2;
        }
 }
 EXPORT_SYMBOL(__dec_zone_page_state);
@@ -239,19 +239,9 @@ EXPORT_SYMBOL(inc_zone_page_state);
 void dec_zone_page_state(struct page *page, enum zone_stat_item item)
 {
        unsigned long flags;
-       struct zone *zone;
-       s8 *p;
 
-       zone = page_zone(page);
        local_irq_save(flags);
-       p = diff_pointer(zone, item);
-
-       (*p)--;
-
-       if (unlikely(*p < -STAT_THRESHOLD)) {
-               zone_page_state_add(*p, zone, item);
-               *p = 0;
-       }
+       __dec_zone_page_state(page, item);
        local_irq_restore(flags);
 }
 EXPORT_SYMBOL(dec_zone_page_state);