From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754858AbcFPOgB (ORCPT ); Thu, 16 Jun 2016 10:36:01 -0400 Received: from merlin.infradead.org ([205.233.59.134]:39183 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754324AbcFPOf6 (ORCPT ); Thu, 16 Jun 2016 10:35:58 -0400 Date: Thu, 16 Jun 2016 16:35:30 +0200 From: Peter Zijlstra To: Andreas Schwab Cc: Geert Uytterhoeven , Linus Torvalds , Ingo Molnar , Thomas Gleixner , Will Deacon , Paul McKenney , boqun.feng@gmail.com, waiman.long@hpe.com, =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker , "linux-kernel@vger.kernel.org" , Linux-Arch , Richard Henderson , Vineet Gupta , Russell King , Hans-Christian Noren Egtvedt , Miao Steven , Yoshinori Sato , Richard Kuo , Tony Luck , James Hogan , Ralf Baechle , David Howells , "James E.J. Bottomley" , Michael Ellerman , Martin Schwidefsky , Rich Felker , "David S. Miller" , cmetcalf@mellanox.com, Max Filippov , Arnd Bergmann , dbueso@suse.de, Wu Fengguang , linux-m68k Subject: Re: [PATCH -v2 14/33] locking,m68k: Implement atomic_fetch_{add,sub,and,or,xor}() Message-ID: <20160616143530.GG30921@twins.programming.kicks-ass.net> References: <20160531101925.702692792@infradead.org> <20160531102642.333689893@infradead.org> <20160616101309.GD30921@twins.programming.kicks-ass.net> <20160616124949.GF30921@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jun 16, 2016 at 02:53:09PM +0200, Andreas Schwab wrote: > Peter Zijlstra writes: > > OK, care to elucidate? Clearly I need help reading this. > > grep '2.*atomic_read' Much thanks to your detailed answer I found yet another obscure inline asm syntax 'feature'. So the "2" input operand actually sets the value of "=&d" (tmp), how creative... I would find: #define ATOMIC_OP_RETURN(op, c_op, asm_op) \ static inline int atomic_##op##_return(int i, atomic_t *v) \ { \ int t, tmp = atomic_read(v); \ \ __asm__ __volatile__( \ "1: movel %2,%1\n" \ " " #asm_op "l %3,%1\n" \ " casl %2,%1,%0\n" \ " jne 1b" \ : "+m" (*v), "=&d" (t), "+d" (tmp) \ : "g" (i)); \ return t; \ } Much more obvious. But you're right, it seems to be sorted. I'll queue a patch removing that comment. Thanks! From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Zijlstra Subject: Re: [PATCH -v2 14/33] locking,m68k: Implement atomic_fetch_{add,sub,and,or,xor}() Date: Thu, 16 Jun 2016 16:35:30 +0200 Message-ID: <20160616143530.GG30921@twins.programming.kicks-ass.net> References: <20160531101925.702692792@infradead.org> <20160531102642.333689893@infradead.org> <20160616101309.GD30921@twins.programming.kicks-ass.net> <20160616124949.GF30921@twins.programming.kicks-ass.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: Sender: linux-m68k-owner@vger.kernel.org List-Id: linux-m68k@vger.kernel.org To: Andreas Schwab Cc: Geert Uytterhoeven , Linus Torvalds , Ingo Molnar , Thomas Gleixner , Will Deacon , Paul McKenney , boqun.feng@gmail.com, waiman.long@hpe.com, =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker , "linux-kernel@vger.kernel.org" , Linux-Arch , Richard Henderson , Vineet Gupta , Russell King , Hans-Christian Noren Egtvedt , Miao Steven , Yoshinori Sato , Richard Kuo , Tony Luck , James Hogan , Ralf Baechle , David Howells Ja On Thu, Jun 16, 2016 at 02:53:09PM +0200, Andreas Schwab wrote: > Peter Zijlstra writes: > > OK, care to elucidate? Clearly I need help reading this. > > grep '2.*atomic_read' Much thanks to your detailed answer I found yet another obscure inline asm syntax 'feature'. So the "2" input operand actually sets the value of "=&d" (tmp), how creative... I would find: #define ATOMIC_OP_RETURN(op, c_op, asm_op) \ static inline int atomic_##op##_return(int i, atomic_t *v) \ { \ int t, tmp = atomic_read(v); \ \ __asm__ __volatile__( \ "1: movel %2,%1\n" \ " " #asm_op "l %3,%1\n" \ " casl %2,%1,%0\n" \ " jne 1b" \ : "+m" (*v), "=&d" (t), "+d" (tmp) \ : "g" (i)); \ return t; \ } Much more obvious. But you're right, it seems to be sorted. I'll queue a patch removing that comment. Thanks! From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from merlin.infradead.org ([205.233.59.134]:39183 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754324AbcFPOf6 (ORCPT ); Thu, 16 Jun 2016 10:35:58 -0400 Date: Thu, 16 Jun 2016 16:35:30 +0200 From: Peter Zijlstra Subject: Re: [PATCH -v2 14/33] locking,m68k: Implement atomic_fetch_{add,sub,and,or,xor}() Message-ID: <20160616143530.GG30921@twins.programming.kicks-ass.net> References: <20160531101925.702692792@infradead.org> <20160531102642.333689893@infradead.org> <20160616101309.GD30921@twins.programming.kicks-ass.net> <20160616124949.GF30921@twins.programming.kicks-ass.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: linux-arch-owner@vger.kernel.org List-ID: To: Andreas Schwab Cc: Geert Uytterhoeven , Linus Torvalds , Ingo Molnar , Thomas Gleixner , Will Deacon , Paul McKenney , boqun.feng@gmail.com, waiman.long@hpe.com, =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker , "linux-kernel@vger.kernel.org" , Linux-Arch , Richard Henderson , Vineet Gupta , Russell King , Hans-Christian Noren Egtvedt , Miao Steven , Yoshinori Sato , Richard Kuo , Tony Luck , James Hogan , Ralf Baechle , David Howells , "James E.J. Bottomley" , Michael Ellerman , Martin Schwidefsky , Rich Felker , "David S. Miller" , cmetcalf@mellanox.com, Max Filippov , Arnd Bergmann , dbueso@suse.de, Wu Fengguang , linux-m68k Message-ID: <20160616143530.KDMK2NjUF_oGRDokYPQSEjDpAnUW19ob0V38ohUcnlI@z> On Thu, Jun 16, 2016 at 02:53:09PM +0200, Andreas Schwab wrote: > Peter Zijlstra writes: > > OK, care to elucidate? Clearly I need help reading this. > > grep '2.*atomic_read' Much thanks to your detailed answer I found yet another obscure inline asm syntax 'feature'. So the "2" input operand actually sets the value of "=&d" (tmp), how creative... I would find: #define ATOMIC_OP_RETURN(op, c_op, asm_op) \ static inline int atomic_##op##_return(int i, atomic_t *v) \ { \ int t, tmp = atomic_read(v); \ \ __asm__ __volatile__( \ "1: movel %2,%1\n" \ " " #asm_op "l %3,%1\n" \ " casl %2,%1,%0\n" \ " jne 1b" \ : "+m" (*v), "=&d" (t), "+d" (tmp) \ : "g" (i)); \ return t; \ } Much more obvious. But you're right, it seems to be sorted. I'll queue a patch removing that comment. Thanks!