From: Christoph Lameter arch/s390/appldata/appldata_mem.c: In function 'appldata_get_mem_data': Cc: Christoph Lameter Signed-off-by: Andrew Morton --- arch/s390/appldata/appldata_mem.c | 22 +++++++++++----------- include/linux/page-flags.h | 1 + mm/page_alloc.c | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff -puN arch/s390/appldata/appldata_mem.c~light-weight-counters-framework-s390-fix arch/s390/appldata/appldata_mem.c --- devel/arch/s390/appldata/appldata_mem.c~light-weight-counters-framework-s390-fix 2006-06-09 18:18:43.000000000 -0700 +++ devel-akpm/arch/s390/appldata/appldata_mem.c 2006-06-09 18:23:30.000000000 -0700 @@ -107,21 +107,21 @@ static void appldata_get_mem_data(void * * serialized through the appldata_ops_lock and can use static */ static struct sysinfo val; - static struct page_state ps; + unsigned long ev[NR_VM_EVENT_ITEMS]; struct appldata_mem_data *mem_data; mem_data = data; mem_data->sync_count_1++; - get_full_page_state(&ps); - mem_data->pgpgin = ps.pgpgin >> 1; - mem_data->pgpgout = ps.pgpgout >> 1; - mem_data->pswpin = ps.pswpin; - mem_data->pswpout = ps.pswpout; - mem_data->pgalloc = ps.pgalloc_high + ps.pgalloc_normal + - ps.pgalloc_dma; - mem_data->pgfault = ps.pgfault; - mem_data->pgmajfault = ps.pgmajfault; + all_vm_events(ev); + mem_data->pgpgin = ev[PGPIN] >> 1; + mem_data->pgpgout = ev[PGPOUT] >> 1; + mem_data->pswpin = ev[PSWPIN]; + mem_data->pswpout = ev[PSWPOUT]; + mem_data->pgalloc = ev[PGALLOC_HIGH] + ev[PGALLOC_NORMAL] + + ev[PGALLOC_DMA]; + mem_data->pgfault = ev[PGFAULT]; + mem_data->pgmajfault = ev[PGMAJFAULT]; si_meminfo(&val); mem_data->sharedram = val.sharedram; @@ -130,7 +130,7 @@ static void appldata_get_mem_data(void * mem_data->totalhigh = P2K(val.totalhigh); mem_data->freehigh = P2K(val.freehigh); mem_data->bufferram = P2K(val.bufferram); - mem_data->cached = P2K(atomic_read(&nr_pagecache) - val.bufferram); + mem_data->cached = P2K(global_page_state(NR_PAGECACHE) - val.bufferram); si_swapinfo(&val); mem_data->totalswap = P2K(val.totalswap); diff -puN include/linux/page-flags.h~light-weight-counters-framework-s390-fix include/linux/page-flags.h --- devel/include/linux/page-flags.h~light-weight-counters-framework-s390-fix 2006-06-09 18:18:43.000000000 -0700 +++ devel-akpm/include/linux/page-flags.h 2006-06-09 18:18:43.000000000 -0700 @@ -152,6 +152,7 @@ static inline void count_vm_events(enum __get_cpu_var(vm_event_states).event[item] += delta; } +extern void all_vm_events(unsigned long *); #else /* Disable counters */ #define get_cpu_vm_events(e) 0L diff -puN mm/page_alloc.c~light-weight-counters-framework-s390-fix mm/page_alloc.c --- devel/mm/page_alloc.c~light-weight-counters-framework-s390-fix 2006-06-09 18:18:43.000000000 -0700 +++ devel-akpm/mm/page_alloc.c 2006-06-09 18:18:43.000000000 -0700 @@ -1540,7 +1540,7 @@ static void sum_vm_events(unsigned long * The result is unavoidably approximate - it can change * during and after execution of this function. */ -static void all_vm_events(unsigned long *ret) +void all_vm_events(unsigned long *ret) { sum_vm_events(ret, &cpu_online_map); } _