lkml.org 
[lkml]   [2015]   [Jul]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 10/28] m32r: 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) <peterz@infradead.org>
    ---
    arch/m32r/include/asm/atomic.h | 44 +++++++++--------------------------------
    1 file changed, 10 insertions(+), 34 deletions(-)

    --- a/arch/m32r/include/asm/atomic.h
    +++ b/arch/m32r/include/asm/atomic.h
    @@ -94,6 +94,12 @@ static __inline__ int atomic_##op##_retu
    ATOMIC_OPS(add)
    ATOMIC_OPS(sub)

    +#define CONFIG_ARCH_HAS_ATOMIC_OR
    +
    +ATOMIC_OP(and)
    +ATOMIC_OP(or)
    +ATOMIC_OP(xor)
    +
    #undef ATOMIC_OPS
    #undef ATOMIC_OP_RETURN
    #undef ATOMIC_OP
    @@ -240,44 +246,14 @@ static __inline__ int __atomic_add_unles
    }


    -static __inline__ void atomic_clear_mask(unsigned long mask, atomic_t *addr)
    +static __inline__ __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v)
    {
    - unsigned long flags;
    - unsigned long tmp;
    -
    - local_irq_save(flags);
    - __asm__ __volatile__ (
    - "# atomic_clear_mask \n\t"
    - DCACHE_CLEAR("%0", "r5", "%1")
    - M32R_LOCK" %0, @%1; \n\t"
    - "and %0, %2; \n\t"
    - M32R_UNLOCK" %0, @%1; \n\t"
    - : "=&r" (tmp)
    - : "r" (addr), "r" (~mask)
    - : "memory"
    - __ATOMIC_CLOBBER
    - );
    - local_irq_restore(flags);
    + atomic_and(~mask, v);
    }

    -static __inline__ void atomic_set_mask(unsigned long mask, atomic_t *addr)
    +static __inline__ __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v)
    {
    - unsigned long flags;
    - unsigned long tmp;
    -
    - local_irq_save(flags);
    - __asm__ __volatile__ (
    - "# atomic_set_mask \n\t"
    - DCACHE_CLEAR("%0", "r5", "%1")
    - M32R_LOCK" %0, @%1; \n\t"
    - "or %0, %2; \n\t"
    - M32R_UNLOCK" %0, @%1; \n\t"
    - : "=&r" (tmp)
    - : "r" (addr), "r" (mask)
    - : "memory"
    - __ATOMIC_CLOBBER
    - );
    - local_irq_restore(flags);
    + atomic_or(mask, v);
    }

    #endif /* _ASM_M32R_ATOMIC_H */



    \
     
     \ /
      Last update: 2015-07-16 20:01    [W:2.062 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site