lkml.org 
[lkml]   [2010]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[117/205] ARM: 6211/1: atomic ops: fix register constraints for atomic64_add_unless
    2.6.34-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Will Deacon <will.deacon@arm.com>

    commit 068de8d1be48a04b92fd97f76bb7e113b7be82a8 upstream.

    The atomic64_add_unless function compares an atomic variable with
    a given value and, if they are not equal, adds another given value
    to the atomic variable. The function returns zero if the addition
    did not occur and non-zero otherwise.

    On ARM, the return value is initialised to 1 in C code. Inline assembly
    code then performs the atomic64_add_unless operation, setting the
    return value to 0 iff the addition does not occur. This means that
    when the addition *does* occur, the value of ret must be preserved
    across the inline assembly and therefore requires a "+r" constraint
    rather than the current one of "=&r".

    Thanks to Nicolas Pitre for helping to spot this.

    Reviewed-by: Nicolas Pitre <nicolas.pitre@linaro.org>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    arch/arm/include/asm/atomic.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/arch/arm/include/asm/atomic.h
    +++ b/arch/arm/include/asm/atomic.h
    @@ -440,7 +440,7 @@ static inline int atomic64_add_unless(at
    " teq %2, #0\n"
    " bne 1b\n"
    "2:"
    - : "=&r" (val), "=&r" (ret), "=&r" (tmp)
    + : "=&r" (val), "+r" (ret), "=&r" (tmp)
    : "r" (&v->counter), "r" (u), "r" (a)
    : "cc");




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