|
@@ -172,18 +172,14 @@ static inline int atomic_add_negative(int i, atomic_t *v)
|
|
|
*/
|
|
|
static inline int atomic_add_return(int i, atomic_t *v)
|
|
|
{
|
|
|
- int __i;
|
|
|
#ifdef CONFIG_M386
|
|
|
+ int __i;
|
|
|
unsigned long flags;
|
|
|
if (unlikely(boot_cpu_data.x86 <= 3))
|
|
|
goto no_xadd;
|
|
|
#endif
|
|
|
/* Modern 486+ processor */
|
|
|
- __i = i;
|
|
|
- asm volatile(LOCK_PREFIX "xaddl %0, %1"
|
|
|
- : "+r" (i), "+m" (v->counter)
|
|
|
- : : "memory");
|
|
|
- return i + __i;
|
|
|
+ return i + xadd(&v->counter, i);
|
|
|
|
|
|
#ifdef CONFIG_M386
|
|
|
no_xadd: /* Legacy 386 processor */
|