Path: csiph.com!aioe.org!bofh.it!news.nic.it!robomod From: Arnaldo Carvalho de Melo Newsgroups: linux.kernel Subject: Re: [PATCH] tools/perf, rbtree: Add RCU wrappers to make rbtree.h usable in user-space Date: Sun, 05 Jul 2015 10:50:01 +0200 Message-ID: References: X-Original-To: Peter Zijlstra MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-URL: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: robomod@news.nic.it List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Approved: robomod@news.nic.it Lines: 56 Organization: linux.* mail to news gateway X-Original-Cc: Rusty Russell , Tejun Heo , Jens Axboe , Jon Christopherson , linux-kernel@vger.kernel.org X-Original-Date: Sat, 4 Jul 2015 13:15:56 -0300 X-Original-Message-ID: <20150704161556.GD3976@kernel.org> X-Original-References: <20150702005253.GA26440@mtj.duckdns.org> <20150702005337.GB26440@mtj.duckdns.org> <5594A9B6.2050100@jons.org> <5594AD98.4050402@jons.org> <20150702132103.GB30677@mtj.duckdns.org> <87k2uiqo5b.fsf@rustcorp.com.au> <20150703071446.GE19282@twins.programming.kicks-ass.net> X-Original-Sender: linux-kernel-owner@vger.kernel.org Xref: aioe.org linux.kernel:1176880 Em Fri, Jul 03, 2015 at 09:14:46AM +0200, Peter Zijlstra escreveu: > On Fri, Jul 03, 2015 at 06:21:12AM +0930, Rusty Russell wrote: > > Looks like Peter Zijlstra is the one to take this fix... > > acme is the steward of tools/perf/ > > > >> diff --git a/tools/perf/util/include/linux/rcupdate.h > > >> b/tools/perf/util/include/linux/rcupdate.h > > >> new file mode 100644 > > >> index 0000000..51c0f45 > > >> --- /dev/null > > >> +++ b/tools/perf/util/include/linux/rcupdate.h > > >> @@ -0,0 +1,9 @@ > > >> +#ifndef PERF_LINUX_RCUPDATE_H_ > > >> +#define PERF_LINUX_RCUPDATE_H_ > > >> + > > >> +/* Simple trivial wrappers for now, we don't use RCU in perf user-space > > >> (yet): */ > > >> +#define WRITE_ONCE(var, val) ((var) = (val)) > > It looks like perf includes linux/compiler.h so it should already have this. > > > >> +#define rcu_assign_pointer(ptr, val) WRITE_ONCE(ptr, val) > > That's plain wrong, WRITE_ONCE(*(ptr), (val)) Are you sure? In the kernel, we have this sequence: #define rcu_assign_pointer(p, v) smp_store_release(&p, RCU_INITIALIZER(v)) #define smp_store_release(p, v) \ do { \ compiletime_assert_atomic_type(*p); \ smp_mb(); \ ACCESS_ONCE(*p) = (v); \ } while (0) So, if you go shortcircuiting things you remove that & and that *, no? I.e. end up with what Rusty suggested. So, I am trying to keep as much as the semantics of the kernel not to fall into thse traps... Will post a RFC soon, if the rain continues preventing me from running... - Arnaldo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/