aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/vmstat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/vmstat.h')
-rw-r--r--include/linux/vmstat.h25
1 files changed, 15 insertions, 10 deletions
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
index 67ce70c8279b..45c9cd1daf7a 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -27,9 +27,13 @@ struct vm_event_state {
27 27
28DECLARE_PER_CPU(struct vm_event_state, vm_event_states); 28DECLARE_PER_CPU(struct vm_event_state, vm_event_states);
29 29
30/*
31 * vm counters are allowed to be racy. Use raw_cpu_ops to avoid the
32 * local_irq_disable overhead.
33 */
30static inline void __count_vm_event(enum vm_event_item item) 34static inline void __count_vm_event(enum vm_event_item item)
31{ 35{
32 __this_cpu_inc(vm_event_states.event[item]); 36 raw_cpu_inc(vm_event_states.event[item]);
33} 37}
34 38
35static inline void count_vm_event(enum vm_event_item item) 39static inline void count_vm_event(enum vm_event_item item)
@@ -39,7 +43,7 @@ static inline void count_vm_event(enum vm_event_item item)
39 43
40static inline void __count_vm_events(enum vm_event_item item, long delta) 44static inline void __count_vm_events(enum vm_event_item item, long delta)
41{ 45{
42 __this_cpu_add(vm_event_states.event[item], delta); 46 raw_cpu_add(vm_event_states.event[item], delta);
43} 47}
44 48
45static inline void count_vm_events(enum vm_event_item item, long delta) 49static inline void count_vm_events(enum vm_event_item item, long delta)
@@ -187,8 +191,6 @@ extern void zone_statistics(struct zone *, struct zone *, gfp_t gfp);
187#define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d) 191#define add_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, __d)
188#define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d)) 192#define sub_zone_page_state(__z, __i, __d) mod_zone_page_state(__z, __i, -(__d))
189 193
190extern void inc_zone_state(struct zone *, enum zone_stat_item);
191
192#ifdef CONFIG_SMP 194#ifdef CONFIG_SMP
193void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int); 195void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int);
194void __inc_zone_page_state(struct page *, enum zone_stat_item); 196void __inc_zone_page_state(struct page *, enum zone_stat_item);
@@ -230,18 +232,18 @@ static inline void __inc_zone_state(struct zone *zone, enum zone_stat_item item)
230 atomic_long_inc(&vm_stat[item]); 232 atomic_long_inc(&vm_stat[item]);
231} 233}
232 234
233static inline void __inc_zone_page_state(struct page *page,
234 enum zone_stat_item item)
235{
236 __inc_zone_state(page_zone(page), item);
237}
238
239static inline void __dec_zone_state(struct zone *zone, enum zone_stat_item item) 235static inline void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
240{ 236{
241 atomic_long_dec(&zone->vm_stat[item]); 237 atomic_long_dec(&zone->vm_stat[item]);
242 atomic_long_dec(&vm_stat[item]); 238 atomic_long_dec(&vm_stat[item]);
243} 239}
244 240
241static inline void __inc_zone_page_state(struct page *page,
242 enum zone_stat_item item)
243{
244 __inc_zone_state(page_zone(page), item);
245}
246
245static inline void __dec_zone_page_state(struct page *page, 247static inline void __dec_zone_page_state(struct page *page,
246 enum zone_stat_item item) 248 enum zone_stat_item item)
247{ 249{
@@ -256,6 +258,9 @@ static inline void __dec_zone_page_state(struct page *page,
256#define dec_zone_page_state __dec_zone_page_state 258#define dec_zone_page_state __dec_zone_page_state
257#define mod_zone_page_state __mod_zone_page_state 259#define mod_zone_page_state __mod_zone_page_state
258 260
261#define inc_zone_state __inc_zone_state
262#define dec_zone_state __dec_zone_state
263
259#define set_pgdat_percpu_threshold(pgdat, callback) { } 264#define set_pgdat_percpu_threshold(pgdat, callback) { }
260 265
261static inline void refresh_cpu_vm_stats(int cpu) { } 266static inline void refresh_cpu_vm_stats(int cpu) { }