diff options
Diffstat (limited to 'include/linux/memcontrol.h')
-rw-r--r-- | include/linux/memcontrol.h | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 882046863581..c46016bb25eb 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
@@ -523,9 +523,11 @@ static inline void __mod_memcg_state(struct mem_cgroup *memcg, | |||
523 | static inline void mod_memcg_state(struct mem_cgroup *memcg, | 523 | static inline void mod_memcg_state(struct mem_cgroup *memcg, |
524 | int idx, int val) | 524 | int idx, int val) |
525 | { | 525 | { |
526 | preempt_disable(); | 526 | unsigned long flags; |
527 | |||
528 | local_irq_save(flags); | ||
527 | __mod_memcg_state(memcg, idx, val); | 529 | __mod_memcg_state(memcg, idx, val); |
528 | preempt_enable(); | 530 | local_irq_restore(flags); |
529 | } | 531 | } |
530 | 532 | ||
531 | /** | 533 | /** |
@@ -606,9 +608,11 @@ static inline void __mod_lruvec_state(struct lruvec *lruvec, | |||
606 | static inline void mod_lruvec_state(struct lruvec *lruvec, | 608 | static inline void mod_lruvec_state(struct lruvec *lruvec, |
607 | enum node_stat_item idx, int val) | 609 | enum node_stat_item idx, int val) |
608 | { | 610 | { |
609 | preempt_disable(); | 611 | unsigned long flags; |
612 | |||
613 | local_irq_save(flags); | ||
610 | __mod_lruvec_state(lruvec, idx, val); | 614 | __mod_lruvec_state(lruvec, idx, val); |
611 | preempt_enable(); | 615 | local_irq_restore(flags); |
612 | } | 616 | } |
613 | 617 | ||
614 | static inline void __mod_lruvec_page_state(struct page *page, | 618 | static inline void __mod_lruvec_page_state(struct page *page, |
@@ -630,9 +634,11 @@ static inline void __mod_lruvec_page_state(struct page *page, | |||
630 | static inline void mod_lruvec_page_state(struct page *page, | 634 | static inline void mod_lruvec_page_state(struct page *page, |
631 | enum node_stat_item idx, int val) | 635 | enum node_stat_item idx, int val) |
632 | { | 636 | { |
633 | preempt_disable(); | 637 | unsigned long flags; |
638 | |||
639 | local_irq_save(flags); | ||
634 | __mod_lruvec_page_state(page, idx, val); | 640 | __mod_lruvec_page_state(page, idx, val); |
635 | preempt_enable(); | 641 | local_irq_restore(flags); |
636 | } | 642 | } |
637 | 643 | ||
638 | unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order, | 644 | unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order, |
@@ -659,9 +665,11 @@ static inline void __count_memcg_events(struct mem_cgroup *memcg, | |||
659 | static inline void count_memcg_events(struct mem_cgroup *memcg, | 665 | static inline void count_memcg_events(struct mem_cgroup *memcg, |
660 | int idx, unsigned long count) | 666 | int idx, unsigned long count) |
661 | { | 667 | { |
662 | preempt_disable(); | 668 | unsigned long flags; |
669 | |||
670 | local_irq_save(flags); | ||
663 | __count_memcg_events(memcg, idx, count); | 671 | __count_memcg_events(memcg, idx, count); |
664 | preempt_enable(); | 672 | local_irq_restore(flags); |
665 | } | 673 | } |
666 | 674 | ||
667 | /* idx can be of type enum memcg_event_item or vm_event_item */ | 675 | /* idx can be of type enum memcg_event_item or vm_event_item */ |