Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755315AbbGEIm7 (ORCPT ); Sun, 5 Jul 2015 04:42:59 -0400 Received: from mail.kernel.org ([198.145.29.136]:34314 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752860AbbGEImz (ORCPT ); Sun, 5 Jul 2015 04:42:55 -0400 Date: Sat, 4 Jul 2015 13:15:56 -0300 From: Arnaldo Carvalho de Melo To: Peter Zijlstra Cc: Rusty Russell , Tejun Heo , Jens Axboe , Jon Christopherson , linux-kernel@vger.kernel.org Subject: Re: [PATCH] tools/perf, rbtree: Add RCU wrappers to make rbtree.h usable in user-space Message-ID: <20150704161556.GD3976@kernel.org> 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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150703071446.GE19282@twins.programming.kicks-ass.net> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1776 Lines: 56 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/