mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 16:37:50 +00:00
[PATCH] asm-i386/atomic.h: local_irq_save should be used instead of local_irq_disable
atomic_add_return() if CONFIG_M386 can accidentally enable local interrupts. Signed-off-by: Lepton Wu <ytht.net@gmail.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ab5703b342
commit
1bb858f27e
1 changed files with 3 additions and 2 deletions
|
@ -183,6 +183,7 @@ static __inline__ int atomic_add_return(int i, atomic_t *v)
|
||||||
{
|
{
|
||||||
int __i;
|
int __i;
|
||||||
#ifdef CONFIG_M386
|
#ifdef CONFIG_M386
|
||||||
|
unsigned long flags;
|
||||||
if(unlikely(boot_cpu_data.x86==3))
|
if(unlikely(boot_cpu_data.x86==3))
|
||||||
goto no_xadd;
|
goto no_xadd;
|
||||||
#endif
|
#endif
|
||||||
|
@ -196,10 +197,10 @@ static __inline__ int atomic_add_return(int i, atomic_t *v)
|
||||||
|
|
||||||
#ifdef CONFIG_M386
|
#ifdef CONFIG_M386
|
||||||
no_xadd: /* Legacy 386 processor */
|
no_xadd: /* Legacy 386 processor */
|
||||||
local_irq_disable();
|
local_irq_save(flags);
|
||||||
__i = atomic_read(v);
|
__i = atomic_read(v);
|
||||||
atomic_set(v, i + __i);
|
atomic_set(v, i + __i);
|
||||||
local_irq_enable();
|
local_irq_restore(flags);
|
||||||
return i + __i;
|
return i + __i;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue