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 witha given value and, if they are not equal, adds another given valueto the atomic variable. The function returns zero if the additiondid not occur and non-zero otherwise.

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