From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754580AbbG0JYU (ORCPT ); Mon, 27 Jul 2015 05:24:20 -0400 Received: from casper.infradead.org ([85.118.1.10]:38041 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753405AbbG0JYS (ORCPT ); Mon, 27 Jul 2015 05:24:18 -0400 Date: Mon, 27 Jul 2015 11:24:10 +0200 From: Peter Zijlstra To: linux-kernel@vger.kernel.org, mingo@kernel.org Cc: jasonbaron0@gmail.com, bp@alien8.de, luto@amacapital.net, tglx@linutronix.de, rostedt@goodmis.org, will.deacon@arm.com, liuj97@gmail.com, rabin@rab.in, ralf@linux-mips.org, ddaney@caviumnetworks.com, benh@kernel.crashing.org, michael@ellerman.id.au, heiko.carstens@de.ibm.com, davem@davemloft.net Subject: Re: [RFC][PATCH 6/7] jump_label: Add a new static_key interface Message-ID: <20150727092410.GQ19282@twins.programming.kicks-ass.net> References: <20150724175209.814173117@infradead.org> <20150724175823.120997211@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150724175823.120997211@infradead.org> 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 Fri, Jul 24, 2015 at 07:52:15PM +0200, Peter Zijlstra wrote: > --- a/arch/sparc/include/asm/jump_label.h > +++ b/arch/sparc/include/asm/jump_label.h > @@ -7,16 +7,32 @@ > > #define JUMP_LABEL_NOP_SIZE 4 > > -static __always_inline bool arch_static_branch(struct static_key *key) > +static __always_inline bool arch_static_branch(struct static_key *key, bool branch) > { > - asm_volatile_goto("1:\n\t" > - "nop\n\t" > - "nop\n\t" It just occurred to me that this second nop is a branch delay slot, and therefore.. > - ".pushsection __jump_table, \"aw\"\n\t" > - ".align 4\n\t" > - ".word 1b, %l[l_yes], %c0\n\t" > - ".popsection \n\t" > - : : "i" (key) : : l_yes); > + asm_volatile_goto("1:\n\t" > + "nop\n\t" > + "nop\n\t" > + ".pushsection __jump_table, \"aw\"\n\t" > + ".align 4\n\t" > + ".word 1b, %l[l_yes], %c0\n\t" > + ".popsection \n\t" > + : : "i" (&((char *)key)[branch]) : : l_yes); > + > + return false; > +l_yes: > + return true; > +} > + > +static __always_inline bool arch_static_branch_jump(struct static_key *key, bool branch) > +{ > + asm_volatile_goto("1:\n\t" > + "b %l[l_yes]\n\t" should very much be here too: "nop\n\t" > + ".pushsection __jump_table, \"aw\"\n\t" > + ".align 4\n\t" > + ".word 1b, %l[l_yes], %c0\n\t" > + ".popsection \n\t" > + : : "i" (&((char *)key)[branch]) : : l_yes); > + > return false; > l_yes: > return true;