Messages in this thread | | | Date | Thu, 03 Jun 2010 17:22:04 +0800 | From | Li Zefan <> | Subject | Re: [PATCH] RCU: don't turn off lockdep when find suspicious rcu_dereference_check() usage |
| |
Paul E. McKenney wrote: > On Tue, Jun 01, 2010 at 02:06:13PM +0100, Daniel J Blueman wrote: >> Hi Paul, >> >> With 2.6.35-rc1 and your patch in the context below, we still see >> "include/linux/cgroup.h:534 invoked rcu_dereference_check() without >> protection!", so need this additional patch: >> >> Acquire read-side RCU lock around task_group() calls, addressing >> "include/linux/cgroup.h:534 invoked rcu_dereference_check() without >> protection!" warning. >> >> Signed-off-by: Daniel J Blueman <daniel.blueman@gmail.com> > > Thank you, Daniel! I have queued this for 2.6.35. > > I had to apply the patch by hand due to line wrapping. Could you please > check your email-agent settings? This simple patch was no problem to > hand apply, but for a larger patch this process would be both tedious > and error prone. > > Thanx, Paul > >> diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c >> index 217e4a9..50ec9ea 100644 >> --- a/kernel/sched_fair.c >> +++ b/kernel/sched_fair.c >> @@ -1241,6 +1241,7 @@ static int wake_affine(struct sched_domain *sd, >> struct task_struct *p, int sync) >> * effect of the currently running task from the load >> * of the current CPU: >> */ >> + rcu_read_lock(); >> if (sync) { >> tg = task_group(current); >> weight = current->se.load.weight; >> @@ -1250,6 +1251,7 @@ static int wake_affine(struct sched_domain *sd, >> struct task_struct *p, int sync) >> } >> >> tg = task_group(p); >> + rcu_read_unlock();
Hmmm.. I think it's not safe to access tg after rcu_read_unlock.
>> weight = p->se.load.weight; >> >> imbalance = 100 + (sd->imbalance_pct - 100) / 2; >>
| |