From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Stephane Eranian <eranian@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Li Zefan <lizf@cn.fujitsu.com>, Ingo Molnar <mingo@elte.hu>,
eric.dumazet@gmail.com, shaohua.li@intel.com, ak@linux.intel.com,
mhocko@suse.cz, alex.shi@intel.com, efault@gmx.de,
linux-kernel@vger.kernel.org, Paul Turner <pjt@google.com>
Subject: Re: [GIT PULL rcu/next] RCU commits for 3.1
Date: Mon, 7 Nov 2011 09:53:03 -0800 [thread overview]
Message-ID: <20111107175303.GI2332@linux.vnet.ibm.com> (raw)
In-Reply-To: <CABPqkBRvK9R7wV6c1GB3HT6Nro2w3787QKo80_Bq5XHQ=HffHQ@mail.gmail.com>
On Mon, Nov 07, 2011 at 05:12:50PM +0000, Stephane Eranian wrote:
> Paul,
>
> On Mon, Nov 7, 2011 at 4:56 PM, Paul E. McKenney
> <paulmck@linux.vnet.ibm.com> wrote:
> > On Mon, Nov 07, 2011 at 05:35:56PM +0100, Peter Zijlstra wrote:
> >> On Mon, 2011-11-07 at 16:16 +0000, Stephane Eranian wrote:
> >> > On Mon, Nov 7, 2011 at 3:15 PM, Peter Zijlstra <peterz@infradead.org> wrote:
> >> > > So far nobody seems to have stated if this is an actual problem or just
> >> > > shutting up lockdep-prove-rcu? I very much suspect the latter, in which
> >> > > case I really utterly hate the patch because it adds instructions to
> >> > > fast-paths just to kill a debug warning.
> >> > >
> >> > I think the core issue at stake here is not so much the cgroup disappearing.
> >> > It cannot go away because it is ref counted (perf_events does the necessary
> >> > css_get()/css_put()). But it is rather the task disappearing while we
> >> > are operating
> >> > on its state.
> >> >
> >> > I don't think task (prev or next) can disappear while we execute
> >> > perf_cgroup_sched_out()/perf_cgroup_sched_in() because we are in the context
> >> > switch code.
> >>
> >> Right.
> >>
> >> > What remains is:
> >> > * update_cgrp_time_from_event()
> >> > alway operates on current task
> >> >
> >> > * perf_cgroup_set_timestamp()
> >> >
> >> > - perf_event_task_tick() -> cpu_ctx_sched_in() but in this case
> >> > it is on the current task
> >> > - perf_event_task_sched_in() in context switch code so I assume
> >> > it is safe
> >> > - __perf_event_enable() but it is called on current
> >> >
> >> > - perf_cgroup_switch()
> >> > * perf_cgroup_sched_in()/perf_cgroup_sched_out() -> context switch code
> >> >
> >> > * perf_cgroup_attach()
> >> > called from cgroup code. Does not appear to hold task_lock().
> >> > the routine already grabs the rcu_read_lock() but it that enough
> >> > to guarantee the task cannot
> >> > vanish. I would hope so, otherwise I think the cgroup attach
> >> > code has a problem.
> >>
> >> yeah, task_struct is rcu-freed
> >
> > But we are not in an RCU read-side critical section, otherwise the splat
> > would not have happened. Or did I miss a turn in the analysis roadmap
> > above?
> >
> >> > In summary, unless I am mistaken, it looks to me that we may not need
> >> > those new rcu_read_lock()
> >> > calls after all.
> >> >
> >> > Does anyone have a different analysis?
> >>
> >> The only other problem I could see is that perf_cgroup_sched_{in,out}
> >> can race against perf_cgroup_attach_task() and make the wrong decision.
> >> But then perf_cgroup_attach will call perf_cgroup_switch() to fix that
> >> up again.
> >
> > If this really is a false positive, what should be used to get rid of
> > the splats?
> >
> I think on that path:
>
> >>> [<8108aa02>] perf_event_enable_on_exec+0x1d2/0x1e0
> >>> [<81063764>] ? __lock_release+0x54/0xb0
> >>> [<8108cca8>] perf_event_comm+0x18/0x60
> >>> [<810d1abd>] ? set_task_comm+0x5d/0x80
> >>> [<81af622d>] ? _raw_spin_unlock+0x1d/0x40
> >>> [<810d1ac4>] set_task_comm+0x64/0x80
>
> We are neither holding the rcu_read_lock() nor the task_lock() but we
> are operating on the current task. The task cannot just vanish. So
> the rcu_dereference() and lock_is_held() macros may detect a false
> positive in that case. Yet, I doubt this would be the only place....
In that case, could something like task==current be added to the
macro's check? Perhaps this is what Peter was suggesting...
Thanx, Paul
Thanx, Paul
prev parent reply other threads:[~2011-11-07 17:53 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20110930204503.GA32687@linux.vnet.ibm.com>
[not found] ` <20111001152514.GA16930@elte.hu>
[not found] ` <20111003055302.GA23527@elte.hu>
[not found] ` <20111003161335.GA2403@linux.vnet.ibm.com>
2011-10-04 7:46 ` [GIT PULL rcu/next] RCU commits for 3.1 Ingo Molnar
2011-10-24 10:05 ` Paul E. McKenney
2011-10-24 11:48 ` Paul E. McKenney
2011-10-26 20:30 ` Ingo Molnar
2011-10-27 7:59 ` Paul E. McKenney
2011-10-27 8:00 ` Ingo Molnar
2011-10-28 2:34 ` Li Zefan
2011-10-29 18:27 ` Paul E. McKenney
2011-10-31 8:09 ` Li Zefan
2011-10-31 9:32 ` Paul E. McKenney
2011-11-01 2:37 ` Li Zefan
2011-11-02 19:23 ` Paul E. McKenney
2011-11-02 19:55 ` Stephane Eranian
2011-11-03 12:50 ` Stephane Eranian
2011-11-04 8:44 ` Li Zefan
2011-11-04 9:02 ` Stephane Eranian
2011-11-07 14:24 ` Stephane Eranian
2011-11-07 14:41 ` Eric Dumazet
2011-11-07 14:44 ` Stephane Eranian
2011-11-07 15:15 ` Peter Zijlstra
2011-11-07 16:16 ` Stephane Eranian
2011-11-07 16:35 ` Peter Zijlstra
2011-11-07 16:56 ` Paul E. McKenney
2011-11-07 17:09 ` Peter Zijlstra
2011-11-07 17:55 ` Paul E. McKenney
2011-11-08 13:10 ` Stephane Eranian
2011-11-07 17:11 ` Peter Zijlstra
2011-11-07 17:12 ` Stephane Eranian
2011-11-07 17:26 ` Peter Zijlstra
2011-11-07 17:50 ` Stephane Eranian
2011-11-07 17:53 ` Paul E. McKenney
2011-11-07 17:53 ` Paul E. McKenney [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20111107175303.GI2332@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=ak@linux.intel.com \
--cc=alex.shi@intel.com \
--cc=efault@gmx.de \
--cc=eranian@google.com \
--cc=eric.dumazet@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mhocko@suse.cz \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=pjt@google.com \
--cc=shaohua.li@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.