提交 e7cc2c59 编写于 作者: L Lennert Buytenhek 提交者: Russell King

[ARM] 3852/1: convert atomic bitops and __xchg over to raw_local_irq_{save,restore}

Thomas Gleixner noticed that bitops.h should also use the raw_* irq
disable/enable variants, and __xchg needs them as well.
Signed-off-by: NLennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 0c92e830
...@@ -37,9 +37,9 @@ static inline void ____atomic_set_bit(unsigned int bit, volatile unsigned long * ...@@ -37,9 +37,9 @@ static inline void ____atomic_set_bit(unsigned int bit, volatile unsigned long *
p += bit >> 5; p += bit >> 5;
local_irq_save(flags); raw_local_irq_save(flags);
*p |= mask; *p |= mask;
local_irq_restore(flags); raw_local_irq_restore(flags);
} }
static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long *p) static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long *p)
...@@ -49,9 +49,9 @@ static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long ...@@ -49,9 +49,9 @@ static inline void ____atomic_clear_bit(unsigned int bit, volatile unsigned long
p += bit >> 5; p += bit >> 5;
local_irq_save(flags); raw_local_irq_save(flags);
*p &= ~mask; *p &= ~mask;
local_irq_restore(flags); raw_local_irq_restore(flags);
} }
static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned long *p) static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned long *p)
...@@ -61,9 +61,9 @@ static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned lon ...@@ -61,9 +61,9 @@ static inline void ____atomic_change_bit(unsigned int bit, volatile unsigned lon
p += bit >> 5; p += bit >> 5;
local_irq_save(flags); raw_local_irq_save(flags);
*p ^= mask; *p ^= mask;
local_irq_restore(flags); raw_local_irq_restore(flags);
} }
static inline int static inline int
...@@ -75,10 +75,10 @@ ____atomic_test_and_set_bit(unsigned int bit, volatile unsigned long *p) ...@@ -75,10 +75,10 @@ ____atomic_test_and_set_bit(unsigned int bit, volatile unsigned long *p)
p += bit >> 5; p += bit >> 5;
local_irq_save(flags); raw_local_irq_save(flags);
res = *p; res = *p;
*p = res | mask; *p = res | mask;
local_irq_restore(flags); raw_local_irq_restore(flags);
return res & mask; return res & mask;
} }
...@@ -92,10 +92,10 @@ ____atomic_test_and_clear_bit(unsigned int bit, volatile unsigned long *p) ...@@ -92,10 +92,10 @@ ____atomic_test_and_clear_bit(unsigned int bit, volatile unsigned long *p)
p += bit >> 5; p += bit >> 5;
local_irq_save(flags); raw_local_irq_save(flags);
res = *p; res = *p;
*p = res & ~mask; *p = res & ~mask;
local_irq_restore(flags); raw_local_irq_restore(flags);
return res & mask; return res & mask;
} }
...@@ -109,10 +109,10 @@ ____atomic_test_and_change_bit(unsigned int bit, volatile unsigned long *p) ...@@ -109,10 +109,10 @@ ____atomic_test_and_change_bit(unsigned int bit, volatile unsigned long *p)
p += bit >> 5; p += bit >> 5;
local_irq_save(flags); raw_local_irq_save(flags);
res = *p; res = *p;
*p = res ^ mask; *p = res ^ mask;
local_irq_restore(flags); raw_local_irq_restore(flags);
return res & mask; return res & mask;
} }
......
...@@ -282,17 +282,17 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size ...@@ -282,17 +282,17 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
#error SMP is not supported on this platform #error SMP is not supported on this platform
#endif #endif
case 1: case 1:
local_irq_save(flags); raw_local_irq_save(flags);
ret = *(volatile unsigned char *)ptr; ret = *(volatile unsigned char *)ptr;
*(volatile unsigned char *)ptr = x; *(volatile unsigned char *)ptr = x;
local_irq_restore(flags); raw_local_irq_restore(flags);
break; break;
case 4: case 4:
local_irq_save(flags); raw_local_irq_save(flags);
ret = *(volatile unsigned long *)ptr; ret = *(volatile unsigned long *)ptr;
*(volatile unsigned long *)ptr = x; *(volatile unsigned long *)ptr = x;
local_irq_restore(flags); raw_local_irq_restore(flags);
break; break;
#else #else
case 1: case 1:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册