diff options
| -rw-r--r-- | include/asm-i386/atomic.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/include/asm-i386/atomic.h b/include/asm-i386/atomic.h index 22d80ece95cb..4ddce5296a78 100644 --- a/include/asm-i386/atomic.h +++ b/include/asm-i386/atomic.h | |||
| @@ -183,6 +183,7 @@ static __inline__ int atomic_add_return(int i, atomic_t *v) | |||
| 183 | { | 183 | { |
| 184 | int __i; | 184 | int __i; |
| 185 | #ifdef CONFIG_M386 | 185 | #ifdef CONFIG_M386 |
| 186 | unsigned long flags; | ||
| 186 | if(unlikely(boot_cpu_data.x86==3)) | 187 | if(unlikely(boot_cpu_data.x86==3)) |
| 187 | goto no_xadd; | 188 | goto no_xadd; |
| 188 | #endif | 189 | #endif |
| @@ -196,10 +197,10 @@ static __inline__ int atomic_add_return(int i, atomic_t *v) | |||
| 196 | 197 | ||
| 197 | #ifdef CONFIG_M386 | 198 | #ifdef CONFIG_M386 |
| 198 | no_xadd: /* Legacy 386 processor */ | 199 | no_xadd: /* Legacy 386 processor */ |
| 199 | local_irq_disable(); | 200 | local_irq_save(flags); |
| 200 | __i = atomic_read(v); | 201 | __i = atomic_read(v); |
| 201 | atomic_set(v, i + __i); | 202 | atomic_set(v, i + __i); |
| 202 | local_irq_enable(); | 203 | local_irq_restore(flags); |
| 203 | return i + __i; | 204 | return i + __i; |
| 204 | #endif | 205 | #endif |
| 205 | } | 206 | } |
