From: Peter Zijlstra <peterz@infradead.org>
To: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Simon Horman <horms@verge.net.au>,
Eric Dumazet <eric.dumazet@gmail.com>,
Julian Anastasov <ja@ssi.bg>, Ingo Molnar <mingo@redhat.com>,
lvs-devel@vger.kernel.org, netdev@vger.kernel.org,
netfilter-devel@vger.kernel.org, linux-kernel@vger.kernel.org,
Pablo Neira Ayuso <pablo@netfilter.org>,
Dipankar Sarma <dipankar@in.ibm.com>,
dhaval.giani@gmail.com
Subject: Re: [PATCH 2/2] ipvs: Use cond_resched_rcu_lock() helper when dumping connections
Date: Fri, 26 Apr 2013 19:19:49 +0200 [thread overview]
Message-ID: <20130426171948.GA31467@dyad.programming.kicks-ass.net> (raw)
In-Reply-To: <20130426154547.GC3860@linux.vnet.ibm.com>
On Fri, Apr 26, 2013 at 08:45:47AM -0700, Paul E. McKenney wrote:
> On Fri, Apr 26, 2013 at 10:03:13AM +0200, Peter Zijlstra wrote:
> > On Fri, Apr 26, 2013 at 10:45:08AM +0900, Simon Horman wrote:
> >
> > > @@ -975,8 +975,7 @@ static void *ip_vs_conn_array(struct seq_file *seq, loff_t pos)
> > > return cp;
> > > }
> > > }
> > > - rcu_read_unlock();
> > > - rcu_read_lock();
> > > + cond_resched_rcu_lock();
> > > }
> >
> >
> > While I agree with the sentiment I do find it a somewhat dangerous construct in
> > that it might become far too easy to keep an RCU reference over this break and
> > thus violate the RCU premise.
> >
> > Is there anything that can detect this? Sparse / cocinelle / smatch? If so it
> > would be great to add this to these checkers.
>
> I have done some crude coccinelle patterns in the past, but they are
> subject to false positives (from when you transfer the pointer from
> RCU protection to reference-count protection) and also false negatives
> (when you atomically increment some statistic unrelated to protection).
>
> I could imagine maintaining a per-thread count of the number of outermost
> RCU read-side critical sections at runtime, and then associating that
> counter with a given pointer at rcu_dereference() time, but this would
> require either compiler magic or an API for using a pointer returned
> by rcu_dereference(). This API could in theory be enforced by sparse.
Luckily cond_resched_rcu_lock() will typically only occur within loops, and
loops tend to be contained in a single sourcefile.
This would suggest a simple static checker should be able to tell without too
much magic right? All it needs to do is track pointers returned from
rcu_dereference*() and see if they're used after cond_resched_rcu_lock().
Also, cond_resched_rcu_lock() will only drop a single level of RCU refs; so
that should be easier still.
next prev parent reply other threads:[~2013-04-26 17:19 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-26 1:45 [PATCH 0/2] sched: Add cond_resched_rcu_lock() helper Simon Horman
2013-04-26 1:45 ` [PATCH 1/2] " Simon Horman
2013-04-26 6:13 ` Ingo Molnar
2013-04-26 1:45 ` [PATCH 2/2] ipvs: Use cond_resched_rcu_lock() helper when dumping connections Simon Horman
2013-04-26 6:15 ` Ingo Molnar
2013-04-30 2:45 ` Simon Horman
2013-04-26 8:03 ` Peter Zijlstra
2013-04-26 15:45 ` Paul E. McKenney
2013-04-26 15:59 ` Eric Dumazet
2013-04-26 16:30 ` Paul E. McKenney
2013-04-26 17:19 ` Peter Zijlstra [this message]
2013-04-26 17:48 ` Paul E. McKenney
2013-04-26 18:26 ` Eric Dumazet
2013-04-26 19:04 ` Paul E. McKenney
2013-04-27 7:18 ` Peter Zijlstra
2013-04-27 16:17 ` Paul E. McKenney
2013-04-27 11:32 ` Julian Anastasov
2013-04-27 16:20 ` Paul E. McKenney
2013-04-29 21:08 ` Julian Anastasov
2013-04-29 21:30 ` Paul E. McKenney
2013-04-29 23:12 ` Julian Anastasov
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=20130426171948.GA31467@dyad.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=dhaval.giani@gmail.com \
--cc=dipankar@in.ibm.com \
--cc=eric.dumazet@gmail.com \
--cc=horms@verge.net.au \
--cc=ja@ssi.bg \
--cc=linux-kernel@vger.kernel.org \
--cc=lvs-devel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
--cc=paulmck@linux.vnet.ibm.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.