From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757336AbbFQPLU (ORCPT ); Wed, 17 Jun 2015 11:11:20 -0400 Received: from casper.infradead.org ([85.118.1.10]:32794 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753457AbbFQPLR (ORCPT ); Wed, 17 Jun 2015 11:11:17 -0400 Date: Wed, 17 Jun 2015 17:11:09 +0200 From: Peter Zijlstra To: "Paul E. McKenney" Cc: umgwanakikbuti@gmail.com, mingo@elte.hu, ktkhai@parallels.com, rostedt@goodmis.org, tglx@linutronix.de, juri.lelli@gmail.com, pang.xunlei@linaro.org, oleg@redhat.com, wanpeng.li@linux.intel.com, linux-kernel@vger.kernel.org, Al Viro , Linus Torvalds Subject: Re: [PATCH 11/18] seqcount: Introduce raw_write_seqcount_barrier() Message-ID: <20150617151109.GD19282@twins.programming.kicks-ass.net> References: <20150611124636.448700267@infradead.org> <20150611124743.374180021@infradead.org> <20150611153341.GK3913@linux.vnet.ibm.com> <20150611214557.GA4249@linux.vnet.ibm.com> <20150617122924.GP3644@twins.programming.kicks-ass.net> <20150617145712.GZ3913@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150617145712.GZ3913@linux.vnet.ibm.com> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jun 17, 2015 at 07:57:12AM -0700, Paul E. McKenney wrote: > On Wed, Jun 17, 2015 at 02:29:24PM +0200, Peter Zijlstra wrote: > > I did leave off the READ/WRITE ONCE stuff, because I could not come up > > with a scenario where it makes a difference -- I appreciate paranoia, > > but I also think we should not overdo the thing. > > I can only conclude that you have not read this document: > > http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4455.html This would be correct. > Specifically, please keep in mind that unless you mark either the variable > or the memory access, the compiler is within its rights to assume that > there are no concurrent accesses to that variable. For but one example, > if you do a normal store to a given variable, then the compiler is > within its rights to use that variable as temporary storage prior to > that store. And yes, you can reasonably argue that no sane compiler > would store something else to s->sequence given that it could free up > a register by storing the incremented value, but the fact remains that > you have given it permission to do so if it wants. Argh *grmbl*, that's bloody insane! So I get the re-loading, I get the tearing, but this random intermittent values (somewhat related to stores out of thin air) is completely bonkers. I would very much prefer a compiler switch that instructs the compiler to not do bloody stupid things like this instead of marking every other load/store in the kernel with volatile. Note that if GCC were to actually do something like this, the kernel would already be broken, because I'm very sure we did not consider/audit it for this.