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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I think this bugfix is needed before going ahead. thoughts?
==
>From 2cb491a41782b39aae9f6fe7255b9159ac6c1563 Mon Sep 17 00:00:00 2001
From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
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.

Signed-off-by: KAMAZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
---
 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, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]