2015-07-09 17:57:53

by Peter Zijlstra

[permalink] [raw]
Subject: [RFC][PATCH 03/24] arm: Provide atomic_{or,xor,and}

Implement atomic logic ops -- atomic_{or,xor,and}.

These will replace the atomic_{set,clear}_mask functions that are
available on some archs.


Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
---
arch/arm/include/asm/atomic.h | 6 ++++++
1 file changed, 6 insertions(+)

--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -193,6 +193,9 @@ static inline int __atomic_add_unless(at

ATOMIC_OPS(add, +=, add)
ATOMIC_OPS(sub, -=, sub)
+ATOMIC_OP(and, &=, and)
+ATOMIC_OP(or, |=, orr)
+ATOMIC_OP(xor, ^=, eor)

#undef ATOMIC_OPS
#undef ATOMIC_OP_RETURN
@@ -320,6 +323,9 @@ static inline long long atomic64_##op##_

ATOMIC64_OPS(add, adds, adc)
ATOMIC64_OPS(sub, subs, sbc)
+ATOMIC64_OP(and, and, and)
+ATOMIC64_OP(or, or, or)
+ATOMIC64_OP(xor, eor, eor)

#undef ATOMIC64_OPS
#undef ATOMIC64_OP_RETURN


2015-07-09 18:02:54

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [RFC][PATCH 03/24] arm: Provide atomic_{or,xor,and}

On Thu, Jul 09, 2015 at 07:28:58PM +0200, Peter Zijlstra wrote:
> Implement atomic logic ops -- atomic_{or,xor,and}.
>
> These will replace the atomic_{set,clear}_mask functions that are
> available on some archs.
>
>
> Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
> ---
> arch/arm/include/asm/atomic.h | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> --- a/arch/arm/include/asm/atomic.h
> +++ b/arch/arm/include/asm/atomic.h
> @@ -193,6 +193,9 @@ static inline int __atomic_add_unless(at
>
> ATOMIC_OPS(add, +=, add)
> ATOMIC_OPS(sub, -=, sub)
> +ATOMIC_OP(and, &=, and)
> +ATOMIC_OP(or, |=, orr)
> +ATOMIC_OP(xor, ^=, eor)
>
> #undef ATOMIC_OPS
> #undef ATOMIC_OP_RETURN
> @@ -320,6 +323,9 @@ static inline long long atomic64_##op##_
>
> ATOMIC64_OPS(add, adds, adc)
> ATOMIC64_OPS(sub, subs, sbc)
> +ATOMIC64_OP(and, and, and)
> +ATOMIC64_OP(or, or, or)

Hmm, reading through them, this should be:

ATOMIC64_OP(or, orr, orr)

I suppose, not sure why the compiler didn't complain, maybe because
there aren't any users..

> +ATOMIC64_OP(xor, eor, eor)
>
> #undef ATOMIC64_OPS
> #undef ATOMIC64_OP_RETURN
>
>

2015-07-10 10:25:04

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [RFC][PATCH 03/24] arm: Provide atomic_{or,xor,and}

On Thu, Jul 09, 2015 at 08:02:23PM +0200, Peter Zijlstra wrote:
> On Thu, Jul 09, 2015 at 07:28:58PM +0200, Peter Zijlstra wrote:
> > @@ -320,6 +323,9 @@ static inline long long atomic64_##op##_
> >
> > ATOMIC64_OPS(add, adds, adc)
> > ATOMIC64_OPS(sub, subs, sbc)
> > +ATOMIC64_OP(and, and, and)
> > +ATOMIC64_OP(or, or, or)
>
> Hmm, reading through them, this should be:
>
> ATOMIC64_OP(or, orr, orr)
>
> I suppose, not sure why the compiler didn't complain, maybe because
> there aren't any users..

Yep, as it creates a static inline function, the code will only get
produced if something uses it, and which point the assembler would have
picked up on the error.

In any case, with that modification, the patch then _looks_ correct to
me for both atomic and atomic64 additions. Not tested myself.

I guess as you're only looking for comments at the moment, there's
little point in acking it just yet.

--
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.