Thread (50 messages) 50 messages, 5 authors, 2012-01-26

Re: [RFC] [PATCH 2/7 v2] memcg: add memory barrier for checking account move.

From: Michal Hocko <hidden>
Date: 2012-01-17 15:26:38
Also in: linux-mm

On Fri 13-01-12 17:33:47, KAMEZAWA Hiroyuki wrote:
I think this bugfix is needed before going ahead. thoughts?
==
From 2cb491a41782b39aae9f6fe7255b9159ac6c1563 Mon Sep 17 00:00:00 2001
From: KAMEZAWA Hiroyuki <redacted>
Date: Fri, 13 Jan 2012 14:27:20 +0900
Subject: [PATCH 2/7] memcg: add memory barrier for checking account move.

At starting move_account(), source memcg's per-cpu variable
MEM_CGROUP_ON_MOVE is set. The page status update
routine check it under rcu_read_lock(). But there is no memory
barrier. This patch adds one.
OK this would help to enforce that the CPU would see the current value
but what prevents us from the race with the value update without the
lock? This is as racy as it was before AFAICS.
quoted hunk ↗ jump to hunk
Signed-off-by: KAMAZAWA Hiroyuki <redacted>
---
 mm/memcontrol.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 08b988d..9019069 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1256,8 +1256,10 @@ static void mem_cgroup_start_move(struct mem_cgroup *memcg)
 
 	get_online_cpus();
 	spin_lock(&memcg->pcp_counter_lock);
-	for_each_online_cpu(cpu)
+	for_each_online_cpu(cpu) {
 		per_cpu(memcg->stat->count[MEM_CGROUP_ON_MOVE], cpu) += 1;
+		smp_wmb();
+	}
 	memcg->nocpu_base.count[MEM_CGROUP_ON_MOVE] += 1;
 	spin_unlock(&memcg->pcp_counter_lock);
 	put_online_cpus();
@@ -1294,6 +1296,7 @@ static void mem_cgroup_end_move(struct mem_cgroup *memcg)
 static bool mem_cgroup_stealed(struct mem_cgroup *memcg)
 {
 	VM_BUG_ON(!rcu_read_lock_held());
+	smp_rmb();
 	return this_cpu_read(memcg->stat->count[MEM_CGROUP_ON_MOVE]) > 0;
 }
 
-- 
1.7.4.1


--
To unsubscribe from this list: send the line "unsubscribe cgroups" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
-- 
Michal Hocko
SUSE Labs
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9    
Czech Republic
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help