From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754846AbcEBSGv (ORCPT ); Mon, 2 May 2016 14:06:51 -0400 Received: from e18.ny.us.ibm.com ([129.33.205.208]:52307 "EHLO e18.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754684AbcEBSGo (ORCPT ); Mon, 2 May 2016 14:06:44 -0400 X-IBM-Helo: d01dlp03.pok.ibm.com X-IBM-MailFrom: paulmck@linux.vnet.ibm.com X-IBM-RcptTo: linux-kernel@vger.kernel.org;target-devel@vger.kernel.org Date: Mon, 2 May 2016 11:06:44 -0700 From: "Paul E. McKenney" To: Christoph Hellwig Cc: Muhammad Falak R Wani , "Nicholas A. Bellinger" , target-devel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] target: use RCU_INIT_POINTER() when NULLing. Message-ID: <20160502180644.GF3512@linux.vnet.ibm.com> Reply-To: paulmck@linux.vnet.ibm.com References: <1462107122-9562-1-git-send-email-falakreyaz@gmail.com> <20160501170120.GA15010@infradead.org> <20160501195313.GL3686@linux.vnet.ibm.com> <20160502141023.GA1187@linux.vnet.ibm.com> <20160502175738.GA24455@linux.vnet.ibm.com> <20160502175950.GA16580@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160502175950.GA16580@infradead.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16050218-0045-0000-0000-00000415427F X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, May 02, 2016 at 10:59:50AM -0700, Christoph Hellwig wrote: > On Mon, May 02, 2016 at 10:57:38AM -0700, Paul E. McKenney wrote: > > -#define rcu_assign_pointer(p, v) smp_store_release(&p, RCU_INITIALIZER(v)) > > +#define rcu_assign_pointer(p, v) \ > > +({ \ > > + uintptr_t _r_a_p__v = (uintptr_t)(v); \ > > + \ > > + if (__builtin_constant_p(v) && (_r_a_p__v) == (uintptr_t)NULL) \ > > + WRITE_ONCE((p), (typeof(p))(_r_a_p__v)); \ > > + else \ > > + smp_store_release(&p, RCU_INITIALIZER((typeof(p))_r_a_p__v)); \ > > + _r_a_p__v; \ > > +}) > > Can't we turn it into an inline (would need different calling > conventions for p, though). And for v. But how do I do that without C++ templates? Also, does __builtin_constant_p() work reliably on a parameter? Especially when the compiler decides not to do the inlining? Thanx, Paul