All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stafford Horne <shorne@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Jonas Bonn <jonas@southpole.se>,
	Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>,
	linux@roeck-us.net, openrisc@lists.librecores.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 09/25] openrisc: add optimized atomic operations
Date: Wed, 22 Feb 2017 23:22:46 +0900	[thread overview]
Message-ID: <20170222142246.GC2449@lianli.shorne-pla.net> (raw)
In-Reply-To: <20170222112737.GM6515@twins.programming.kicks-ass.net>

On Wed, Feb 22, 2017 at 12:27:37PM +0100, Peter Zijlstra wrote:
> On Wed, Feb 22, 2017 at 04:11:38AM +0900, Stafford Horne wrote:
> > +#define atomic_add_return	atomic_add_return
> > +#define atomic_sub_return	atomic_sub_return
> > +#define atomic_fetch_add	atomic_fetch_add
> > +#define atomic_fetch_sub	atomic_fetch_sub
> > +#define atomic_fetch_and	atomic_fetch_and
> > +#define atomic_fetch_or		atomic_fetch_or
> > +#define atomic_fetch_xor	atomic_fetch_xor
> > +#define atomic_and	atomic_and
> > +#define atomic_or	atomic_or
> > +#define atomic_xor	atomic_xor
> > +
> 
> It would be good to also implement __atomic_add_unless().
> 
> Something like so, if I got your asm right..
> 
> static inline int __atomic_add_unless(atomic_t *v, int a, int u)
> {
> 	int old, tmp;
> 
> 	__asm__ __volatile__(
> 		"1:     l.lwa %0, 0(%2)         \n"
> 		"       l.sfeq %0, %4           \n"
> 		"       l.bf 2f                 \n"
> 		"        l.nop                  \n"
> 		"	l.add %1, %0, %3	\n"
> 		"       l.swa 0(%2), %1         \n"
> 		"       l.bnf 1b                \n"
> 		"2:      l.nop                  \n"
> 		: "=&r"(old), "=&r" (tmp)
> 		: "r"(&v->counter), "r"(a), "r"(u)
> 		: "cc", "memory");
> 
> 	return old;
> }

Ok, thanks this looks right. I tested it too and it looks to work ok.

Note, I still include <asm-generic/atomic.h> to avoid copy-n-pastes.  So
I also wrapped __atomic_add_unless with #ifndef __atomic_add_unless in
the generic code.

-Stafford

WARNING: multiple messages have this Message-ID (diff)
From: Stafford Horne <shorne@gmail.com>
To: openrisc@lists.librecores.org
Subject: [OpenRISC] [PATCH v3 09/25] openrisc: add optimized atomic operations
Date: Wed, 22 Feb 2017 23:22:46 +0900	[thread overview]
Message-ID: <20170222142246.GC2449@lianli.shorne-pla.net> (raw)
In-Reply-To: <20170222112737.GM6515@twins.programming.kicks-ass.net>

On Wed, Feb 22, 2017 at 12:27:37PM +0100, Peter Zijlstra wrote:
> On Wed, Feb 22, 2017 at 04:11:38AM +0900, Stafford Horne wrote:
> > +#define atomic_add_return	atomic_add_return
> > +#define atomic_sub_return	atomic_sub_return
> > +#define atomic_fetch_add	atomic_fetch_add
> > +#define atomic_fetch_sub	atomic_fetch_sub
> > +#define atomic_fetch_and	atomic_fetch_and
> > +#define atomic_fetch_or		atomic_fetch_or
> > +#define atomic_fetch_xor	atomic_fetch_xor
> > +#define atomic_and	atomic_and
> > +#define atomic_or	atomic_or
> > +#define atomic_xor	atomic_xor
> > +
> 
> It would be good to also implement __atomic_add_unless().
> 
> Something like so, if I got your asm right..
> 
> static inline int __atomic_add_unless(atomic_t *v, int a, int u)
> {
> 	int old, tmp;
> 
> 	__asm__ __volatile__(
> 		"1:     l.lwa %0, 0(%2)         \n"
> 		"       l.sfeq %0, %4           \n"
> 		"       l.bf 2f                 \n"
> 		"        l.nop                  \n"
> 		"	l.add %1, %0, %3	\n"
> 		"       l.swa 0(%2), %1         \n"
> 		"       l.bnf 1b                \n"
> 		"2:      l.nop                  \n"
> 		: "=&r"(old), "=&r" (tmp)
> 		: "r"(&v->counter), "r"(a), "r"(u)
> 		: "cc", "memory");
> 
> 	return old;
> }

Ok, thanks this looks right. I tested it too and it looks to work ok.

Note, I still include <asm-generic/atomic.h> to avoid copy-n-pastes.  So
I also wrapped __atomic_add_unless with #ifndef __atomic_add_unless in
the generic code.

-Stafford

  reply	other threads:[~2017-02-22 14:23 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-21 19:11 [PATCH v3 00/25] OpenRISC patches for 4.11 final call Stafford Horne
2017-02-21 19:11 ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 01/25] openrisc: use SPARSE_IRQ Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 02/25] openrisc: add cache way information to cpuinfo Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-03-14 12:08   ` Sudeep Holla
2017-03-14 12:08     ` [OpenRISC] " Sudeep Holla
2017-03-14 13:11     ` Stefan Kristiansson
2017-03-14 13:11       ` [OpenRISC] " Stefan Kristiansson
2017-03-14 13:45       ` Sudeep Holla
2017-03-14 13:45         ` [OpenRISC] " Sudeep Holla
2017-03-14 14:09         ` Stafford Horne
2017-03-14 14:09           ` [OpenRISC] " Stafford Horne
2017-03-14 15:55           ` Sudeep Holla
2017-03-14 15:55             ` [OpenRISC] " Sudeep Holla
2017-02-21 19:11 ` [PATCH v3 03/25] openrisc: tlb miss handler optimizations Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 04/25] openrisc: head: use THREAD_SIZE instead of magic constant Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 05/25] openrisc: head: refactor out tlb flush into it's own function Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 06/25] openrisc: add l.lwa/l.swa emulation Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 07/25] openrisc: add atomic bitops Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 08/25] openrisc: add cmpxchg and xchg implementations Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-22 11:19   ` Peter Zijlstra
2017-02-22 11:19     ` [OpenRISC] " Peter Zijlstra
2017-02-22 14:20     ` Stafford Horne
2017-02-22 14:20       ` [OpenRISC] " Stafford Horne
2017-02-22 17:30       ` Richard Henderson
2017-02-22 17:30         ` Richard Henderson
2017-02-22 22:43         ` Stafford Horne
2017-02-22 22:43           ` Stafford Horne
2017-02-21 19:11 ` [PATCH v3 09/25] openrisc: add optimized atomic operations Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-22 11:27   ` Peter Zijlstra
2017-02-22 11:27     ` [OpenRISC] " Peter Zijlstra
2017-02-22 14:22     ` Stafford Horne [this message]
2017-02-22 14:22       ` Stafford Horne
2017-02-22 17:31       ` Richard Henderson
2017-02-22 17:31         ` Richard Henderson
2017-02-22 22:42         ` Stafford Horne
2017-02-22 22:42           ` Stafford Horne
2017-02-21 19:11 ` [PATCH v3 10/25] openrisc: add spinlock implementation Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-22 11:29   ` Peter Zijlstra
2017-02-22 11:29     ` [OpenRISC] " Peter Zijlstra
2017-02-22 11:32   ` Peter Zijlstra
2017-02-22 11:32     ` [OpenRISC] " Peter Zijlstra
2017-02-22 11:37   ` Peter Zijlstra
2017-02-22 11:37     ` [OpenRISC] " Peter Zijlstra
2017-02-22 12:02     ` Peter Zijlstra
2017-02-22 12:02       ` [OpenRISC] " Peter Zijlstra
2017-02-22 11:38   ` Peter Zijlstra
2017-02-22 11:38     ` [OpenRISC] " Peter Zijlstra
2017-02-22 11:41   ` Peter Zijlstra
2017-02-22 11:41     ` [OpenRISC] " Peter Zijlstra
2017-02-22 12:08     ` Peter Zijlstra
2017-02-22 12:08       ` [OpenRISC] " Peter Zijlstra
2017-02-21 19:11 ` [PATCH v3 11/25] openrisc: add futex_atomic_* implementations Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 12/25] openrisc: remove unnecessary stddef.h include Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 13/25] openrisc: Fix the bitmask for the unit present register Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 14/25] openrisc: Initial support for the idle state Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 20:24   ` Joe Perches
2017-02-21 20:24     ` [OpenRISC] " Joe Perches
2017-02-22 14:19     ` Stafford Horne
2017-02-22 14:19       ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 15/25] openrisc: Add optimized memset Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 16/25] openrisc: Add optimized memcpy routine Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 17/25] openrisc: Add .gitignore Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 18/25] MAINTAINERS: Add the openrisc official repository Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 19/25] scripts/checkstack.pl: Add openrisc support Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 20/25] openrisc: entry: Whitespace and comment cleanups Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 21/25] openrisc: entry: Fix delay slot detection Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 22/25] openrisc: head: Move init strings to rodata section Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 23/25] arch/openrisc/lib/memcpy.c: use correct OR1200 option Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 24/25] openrisc: Export ioremap symbols used by modules Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne
2017-02-21 19:11 ` [PATCH v3 25/25] openrisc: head: Init r0 to 0 on start Stafford Horne
2017-02-21 19:11   ` [OpenRISC] " Stafford Horne

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170222142246.GC2449@lianli.shorne-pla.net \
    --to=shorne@gmail.com \
    --cc=jonas@southpole.se \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=openrisc@lists.librecores.org \
    --cc=peterz@infradead.org \
    --cc=stefan.kristiansson@saunalahti.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.