aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/memcontrol.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 5f8f93d83edf..5a41d93c7077 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -71,8 +71,9 @@ enum mem_cgroup_stat_index {
71 MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */ 71 MEM_CGROUP_STAT_FILE_MAPPED, /* # of pages charged as file rss */
72 MEM_CGROUP_STAT_PGPGIN_COUNT, /* # of pages paged in */ 72 MEM_CGROUP_STAT_PGPGIN_COUNT, /* # of pages paged in */
73 MEM_CGROUP_STAT_PGPGOUT_COUNT, /* # of pages paged out */ 73 MEM_CGROUP_STAT_PGPGOUT_COUNT, /* # of pages paged out */
74 MEM_CGROUP_STAT_EVENTS, /* sum of pagein + pageout for internal use */
75 MEM_CGROUP_STAT_SWAPOUT, /* # of pages, swapped out */ 74 MEM_CGROUP_STAT_SWAPOUT, /* # of pages, swapped out */
75 MEM_CGROUP_STAT_SOFTLIMIT, /* decrements on each page in/out.
76 used by soft limit implementation */
76 77
77 MEM_CGROUP_STAT_NSTATS, 78 MEM_CGROUP_STAT_NSTATS,
78}; 79};
@@ -86,10 +87,10 @@ struct mem_cgroup_stat {
86}; 87};
87 88
88static inline void 89static inline void
89__mem_cgroup_stat_reset_safe(struct mem_cgroup_stat_cpu *stat, 90__mem_cgroup_stat_set_safe(struct mem_cgroup_stat_cpu *stat,
90 enum mem_cgroup_stat_index idx) 91 enum mem_cgroup_stat_index idx, s64 val)
91{ 92{
92 stat->count[idx] = 0; 93 stat->count[idx] = val;
93} 94}
94 95
95static inline s64 96static inline s64
@@ -411,9 +412,10 @@ static bool mem_cgroup_soft_limit_check(struct mem_cgroup *mem)
411 412
412 cpu = get_cpu(); 413 cpu = get_cpu();
413 cpustat = &mem->stat.cpustat[cpu]; 414 cpustat = &mem->stat.cpustat[cpu];
414 val = __mem_cgroup_stat_read_local(cpustat, MEM_CGROUP_STAT_EVENTS); 415 val = __mem_cgroup_stat_read_local(cpustat, MEM_CGROUP_STAT_SOFTLIMIT);
415 if (unlikely(val > SOFTLIMIT_EVENTS_THRESH)) { 416 if (unlikely(val < 0)) {
416 __mem_cgroup_stat_reset_safe(cpustat, MEM_CGROUP_STAT_EVENTS); 417 __mem_cgroup_stat_set_safe(cpustat, MEM_CGROUP_STAT_SOFTLIMIT,
418 SOFTLIMIT_EVENTS_THRESH);
417 ret = true; 419 ret = true;
418 } 420 }
419 put_cpu(); 421 put_cpu();
@@ -546,7 +548,7 @@ static void mem_cgroup_charge_statistics(struct mem_cgroup *mem,
546 else 548 else
547 __mem_cgroup_stat_add_safe(cpustat, 549 __mem_cgroup_stat_add_safe(cpustat,
548 MEM_CGROUP_STAT_PGPGOUT_COUNT, 1); 550 MEM_CGROUP_STAT_PGPGOUT_COUNT, 1);
549 __mem_cgroup_stat_add_safe(cpustat, MEM_CGROUP_STAT_EVENTS, 1); 551 __mem_cgroup_stat_add_safe(cpustat, MEM_CGROUP_STAT_SOFTLIMIT, -1);
550 put_cpu(); 552 put_cpu();
551} 553}
552 554