From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754360AbbJGOUt (ORCPT ); Wed, 7 Oct 2015 10:20:49 -0400 Received: from e34.co.us.ibm.com ([32.97.110.152]:35214 "EHLO e34.co.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753790AbbJGOUr (ORCPT ); Wed, 7 Oct 2015 10:20:47 -0400 X-IBM-Helo: d03dlp02.boulder.ibm.com X-IBM-MailFrom: paulmck@linux.vnet.ibm.com X-IBM-RcptTo: linux-kernel@vger.kernel.org Date: Wed, 7 Oct 2015 07:20:42 -0700 From: "Paul E. McKenney" To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@efficios.com, josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com, dvhart@linux.intel.com, fweisbec@gmail.com, oleg@redhat.com, bobby.prani@gmail.com Subject: Re: [PATCH tip/core/rcu 10/13] rcu: Add rcu_pointer_handoff() Message-ID: <20151007142042.GE3910@linux.vnet.ibm.com> Reply-To: paulmck@linux.vnet.ibm.com References: <20151006161305.GA9799@linux.vnet.ibm.com> <1444148028-11551-1-git-send-email-paulmck@linux.vnet.ibm.com> <1444148028-11551-10-git-send-email-paulmck@linux.vnet.ibm.com> <20151006202741.GW3604@twins.programming.kicks-ass.net> <20151006210243.GX3910@linux.vnet.ibm.com> <20151007072227.GV2881@worktop.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151007072227.GV2881@worktop.programming.kicks-ass.net> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15100714-0017-0000-0000-00000E73BEA4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 07, 2015 at 09:22:27AM +0200, Peter Zijlstra wrote: > On Tue, Oct 06, 2015 at 02:02:43PM -0700, Paul E. McKenney wrote: > > On Tue, Oct 06, 2015 at 10:27:41PM +0200, Peter Zijlstra wrote: > > > On Tue, Oct 06, 2015 at 09:13:45AM -0700, Paul E. McKenney wrote: > > > > /** > > > > + * rcu_pointer_handoff() - Hand off a pointer from RCU to other mechanism > > > > + * @p: The pointer to hand off > > > > + * > > > > + * This is simply an identity function, but it documents where a pointer > > > > + * is handed off from RCU to some other synchronization mechanism, for > > > > + * example, reference counting or locking. In C11, it would map to > > > > + * kill_dependency(). It could be used as follows: > > > > + * > > > > + * rcu_read_lock(); > > > > + * p = rcu_dereference(gp); > > > > + * long_lived = is_long_lived(p); > > > > + * if (long_lived) { > > > > + * if (!atomic_inc_not_zero(p->refcnt)) > > > > + * long_lived = false; > > > > + * else > > > > + * p = rcu_pointer_handoff(p); > > > > + * } > > > > + * rcu_read_unlock(); > > > > + */ > > > > +#define rcu_pointer_handoff(p) (p) > > > > > > Will you actually be using this? It seems a tad pointless to add if you > > > don't. > > > > Some of the LLVM guys believe that they can diagnose RCU pointer leaks > > if this is used. But yes, it does need to be used. > > The thing is, I'm not convinced this is a 'sane' interface. Its _far_ > too easy to forget. It doesn't make any kind of sense either, which is > part of why its hard to remember. Indeed, the only thing that would make it easy to remember is if there are tools that check for pointer leaks from RCU read-side critical sections. But without this interface, such tools are insanely difficult to create. So there is a chicken-and-egg problem here, which I am attempting to deal with by providing an egg. Hopefully not laying an egg, but time will tell. ;-) Thanx, Paul