From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751524AbdFFQMo (ORCPT ); Tue, 6 Jun 2017 12:12:44 -0400 Received: from bombadil.infradead.org ([65.50.211.133]:56722 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751425AbdFFQMm (ORCPT ); Tue, 6 Jun 2017 12:12:42 -0400 Date: Tue, 6 Jun 2017 18:12:27 +0200 From: Peter Zijlstra To: Christian Borntraeger Cc: Paolo Bonzini , "Paul E. McKenney" , linux-kernel@vger.kernel.org, mingo@kernel.org, jiangshanlai@gmail.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@efficios.com, josh@joshtriplett.org, tglx@linutronix.de, rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com, fweisbec@gmail.com, oleg@redhat.com, kvm@vger.kernel.org, Linus Torvalds , Martin Schwidefsky , Heiko Carstens , linux-s390 , "H. Peter Anvin" Subject: Re: [PATCH RFC tip/core/rcu 1/2] srcu: Allow use of Tiny/Tree SRCU from both process and interrupt context Message-ID: <20170606161227.kn7ytruky5popjjd@hirez.programming.kicks-ass.net> References: <20170605220919.GA27820@linux.vnet.ibm.com> <1496700591-30177-1-git-send-email-paulmck@linux.vnet.ibm.com> <20170606105343.ibhzrk6jwhmoja5t@hirez.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 06, 2017 at 04:45:57PM +0200, Christian Borntraeger wrote: > A the same time, the implicit memory barrier of the atomic_inc should be > even cheaper. In contrast to x86, a full smp_mb seems to be almost for > free (looks like <= 1 cycle for a bcr 14,0 and no contention). So I > _think_ that this should be really fast enough. So there is a patch out there that changes the x86 smp_mb() implementation to do "LOCK ADD some_stack_location, 0" which is lots cheaper than the "MFENCE" instruction and provides similar guarantees. HPA was running that through some of the architects.. ping? (Also, I can imagine OoO CPUs collapsing back-to-back ordering stuff, but what do I know). > As a side note, I am asking myself, though, why we do need the > preempt_disable/enable for the cases where we use the opcodes > like lao (atomic load and or to a memory location) and friends. I suspect the real reason is CPU hotplug, because regular preemption should not matter. It would be the same as getting migrated the moment _after_ you do the $op. But preempt_disable() also holds off hotplug and thereby serializes against hotplug notifiers that want to, for instance, move the value of the per-cpu variable to a still online CPU. Without this serialization it would be possible for the $op to happen _after_ the hotplug notifier runs.