From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934450AbcKQRGD (ORCPT ); Thu, 17 Nov 2016 12:06:03 -0500 Received: from bombadil.infradead.org ([198.137.202.9]:49050 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934311AbcKQRGA (ORCPT ); Thu, 17 Nov 2016 12:06:00 -0500 Date: Thu, 17 Nov 2016 13:48:44 +0100 From: Peter Zijlstra To: Greg KH Cc: Boqun Feng , keescook@chromium.org, will.deacon@arm.com, elena.reshetova@intel.com, arnd@arndb.de, tglx@linutronix.de, mingo@kernel.org, hpa@zytor.com, dave@progbits.org, linux-kernel@vger.kernel.org Subject: Re: [RFC][PATCH 7/7] kref: Implement using refcount_t Message-ID: <20161117124844.GD3117@twins.programming.kicks-ass.net> References: <20161114173946.501528675@infradead.org> <20161114174446.832175072@infradead.org> <20161115123337.GD12110@tardis.cn.ibm.com> <20161115130154.GX3117@twins.programming.kicks-ass.net> <20161115141909.GJ27541@tardis.cn.ibm.com> <20161117092800.GD3142@twins.programming.kicks-ass.net> <20161117094851.GA5227@tardis.cn.ibm.com> <20161117102959.GH3142@twins.programming.kicks-ass.net> <20161117103927.GU3157@twins.programming.kicks-ass.net> <20161117110333.GA19999@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161117110333.GA19999@kroah.com> User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 17, 2016 at 12:03:33PM +0100, Greg KH wrote: > On Thu, Nov 17, 2016 at 11:39:27AM +0100, Peter Zijlstra wrote: > > And let me note here that RCU users can use a fully relaxed put, because > > call_rcu() guarantees a grace-period between the call_rcu and the > > free(), which in turn provides a full memory barrier that orders things. > > > > We could actually expose that to driver writers by doing something like: > > > > kref_put_rcu(struct kref *kref, struct rcu_head *head, rcu_callback_t func) > > { > > if (refcount_dec_and_test_relaxed(&kref->refcount)) > > call_rcu(head, func); > > } > > > > Do we want to go there? > > No, please no... Hehe, fair enough. Although core kernel 'power' users might really want that. The relaxed memory order stuff saves quite a few cycles on weak archs.