Messages in this thread | | | Date | Thu, 17 Nov 2011 10:15:38 +0800 | From | Yong Zhang <> | Subject | Re: [PATCH -rt] memcg: use migrate_disable()/migrate_enable( ) in memcg_check_events() |
| |
On Wed, Nov 16, 2011 at 09:12:38AM -0500, Steven Rostedt wrote: > On Wed, 2011-11-16 at 17:16 +0800, Yong Zhang wrote: > > Looking at commit 4799401f [memcg: Fix race condition in > > memcg_check_events() with this_cpu usage], we just want > > to disable migration. So use the right API in -rt. This > > will cure below warning. > > > > > mm/memcontrol.c | 4 ++-- > > 1 files changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > > index 6aff93c..afa1954 100644 > > --- a/mm/memcontrol.c > > +++ b/mm/memcontrol.c > > @@ -722,7 +722,7 @@ static void __mem_cgroup_target_update(struct mem_cgroup *memcg, int target) > > */ > > static void memcg_check_events(struct mem_cgroup *memcg, struct page *page) > > { > > - preempt_disable(); > > + migrate_disable(); > > No this won't work. Not even for -rt. If we disable migration but not > preemption, then two tasks can take this path. And the checks in > __memcg_event_check() will be corrupted because nothing is protecting > the updates from two tasks going into the same path.
I assumed that we only care about migration, but obviously I'm wrong.
> > Perhaps a local_lock would work.
Yeah, will try tglx's patch later.
Thanks, Yong
| |