diff options
Diffstat (limited to 'include/linux/vmstat.h')
| -rw-r--r-- | include/linux/vmstat.h | 25 |
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 | ||
| 28 | DECLARE_PER_CPU(struct vm_event_state, vm_event_states); | 28 | DECLARE_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 | */ | ||
| 30 | static inline void __count_vm_event(enum vm_event_item item) | 34 | static 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 | ||
| 35 | static inline void count_vm_event(enum vm_event_item item) | 39 | static 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 | ||
| 40 | static inline void __count_vm_events(enum vm_event_item item, long delta) | 44 | static 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 | ||
| 45 | static inline void count_vm_events(enum vm_event_item item, long delta) | 49 | static 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 | ||
| 190 | extern void inc_zone_state(struct zone *, enum zone_stat_item); | ||
| 191 | |||
| 192 | #ifdef CONFIG_SMP | 194 | #ifdef CONFIG_SMP |
| 193 | void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int); | 195 | void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int); |
| 194 | void __inc_zone_page_state(struct page *, enum zone_stat_item); | 196 | void __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 | ||
| 233 | static 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 | |||
| 239 | static inline void __dec_zone_state(struct zone *zone, enum zone_stat_item item) | 235 | static 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 | ||
| 241 | static 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 | |||
| 245 | static inline void __dec_zone_page_state(struct page *page, | 247 | static 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 | ||
| 261 | static inline void refresh_cpu_vm_stats(int cpu) { } | 266 | static inline void refresh_cpu_vm_stats(int cpu) { } |
