From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Andrea Parri <parri.andrea@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>, Will Deacon <will.deacon@arm.com>,
Alan Stern <stern@rowland.harvard.edu>,
Richard Henderson <rth@twiddle.net>,
Ivan Kokshaysky <ink@jurassic.park.msu.ru>,
Matt Turner <mattst88@gmail.com>,
linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] xchg/alpha: Add unconditional memory barrier to cmpxchg
Date: Tue, 20 Feb 2018 11:38:50 -0800 [thread overview]
Message-ID: <20180220193850.GV3617@linux.vnet.ibm.com> (raw)
In-Reply-To: <1519152356-4804-1-git-send-email-parri.andrea@gmail.com>
On Tue, Feb 20, 2018 at 07:45:56PM +0100, Andrea Parri wrote:
> Continuing along with the fight against smp_read_barrier_depends() [1]
> (or rather, against its improper use), add an unconditional barrier to
> cmpxchg. This guarantees that dependency ordering is preserved when a
> dependency is headed by an unsuccessful cmpxchg. As it turns out, the
> change could enable further simplification of LKMM as proposed in [2].
>
> [1] https://marc.info/?l=linux-kernel&m=150884953419377&w=2
> https://marc.info/?l=linux-kernel&m=150884946319353&w=2
> https://marc.info/?l=linux-kernel&m=151215810824468&w=2
> https://marc.info/?l=linux-kernel&m=151215816324484&w=2
>
> [2] https://marc.info/?l=linux-kernel&m=151881978314872&w=2
>
> Signed-off-by: Andrea Parri <parri.andrea@gmail.com>
> Acked-by: Peter Zijlstra <peterz@infradead.org>
> Cc: Will Deacon <will.deacon@arm.com>
> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Acked-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
> Cc: Alan Stern <stern@rowland.harvard.edu>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> Cc: Matt Turner <mattst88@gmail.com>
> Cc: linux-alpha@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> ---
> arch/alpha/include/asm/xchg.h | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/arch/alpha/include/asm/xchg.h b/arch/alpha/include/asm/xchg.h
> index 68dfb3cb71454..e2660866ce972 100644
> --- a/arch/alpha/include/asm/xchg.h
> +++ b/arch/alpha/include/asm/xchg.h
> @@ -128,10 +128,9 @@ ____xchg(, volatile void *ptr, unsigned long x, int size)
> * store NEW in MEM. Return the initial value in MEM. Success is
> * indicated by comparing RETURN with OLD.
> *
> - * The memory barrier should be placed in SMP only when we actually
> - * make the change. If we don't change anything (so if the returned
> - * prev is equal to old) then we aren't acquiring anything new and
> - * we don't need any memory barrier as far I can tell.
> + * The memory barrier is placed in SMP unconditionally, in order to
> + * guarantee that dependency ordering is preserved when a dependency
> + * is headed by an unsuccessful operation.
> */
>
> static inline unsigned long
> @@ -150,8 +149,8 @@ ____cmpxchg(_u8, volatile char *m, unsigned char old, unsigned char new)
> " or %1,%2,%2\n"
> " stq_c %2,0(%4)\n"
> " beq %2,3f\n"
> - __ASM__MB
> "2:\n"
> + __ASM__MB
> ".subsection 2\n"
> "3: br 1b\n"
> ".previous"
> @@ -177,8 +176,8 @@ ____cmpxchg(_u16, volatile short *m, unsigned short old, unsigned short new)
> " or %1,%2,%2\n"
> " stq_c %2,0(%4)\n"
> " beq %2,3f\n"
> - __ASM__MB
> "2:\n"
> + __ASM__MB
> ".subsection 2\n"
> "3: br 1b\n"
> ".previous"
> @@ -200,8 +199,8 @@ ____cmpxchg(_u32, volatile int *m, int old, int new)
> " mov %4,%1\n"
> " stl_c %1,%2\n"
> " beq %1,3f\n"
> - __ASM__MB
> "2:\n"
> + __ASM__MB
> ".subsection 2\n"
> "3: br 1b\n"
> ".previous"
> @@ -223,8 +222,8 @@ ____cmpxchg(_u64, volatile long *m, unsigned long old, unsigned long new)
> " mov %4,%1\n"
> " stq_c %1,%2\n"
> " beq %1,3f\n"
> - __ASM__MB
> "2:\n"
> + __ASM__MB
> ".subsection 2\n"
> "3: br 1b\n"
> ".previous"
> --
> 2.7.4
>
next prev parent reply other threads:[~2018-02-20 19:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-20 18:45 [PATCH] xchg/alpha: Add unconditional memory barrier to cmpxchg Andrea Parri
2018-02-20 19:38 ` Paul E. McKenney [this message]
2018-02-21 10:49 ` [tip:locking/urgent] locking/xchg/alpha: Add unconditional memory barrier to cmpxchg() tip-bot for Andrea Parri
2018-02-21 11:21 ` [PATCH] xchg/alpha: Add unconditional memory barrier to cmpxchg Will Deacon
2018-02-21 13:24 ` Andrea Parri
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=20180220193850.GV3617@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=ink@jurassic.park.msu.ru \
--cc=linux-alpha@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mattst88@gmail.com \
--cc=mingo@kernel.org \
--cc=parri.andrea@gmail.com \
--cc=rth@twiddle.net \
--cc=stern@rowland.harvard.edu \
--cc=will.deacon@arm.com \
/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.