|
@@ -3,6 +3,9 @@
|
|
|
|
|
|
/*
|
|
|
* Copyright 1992, Linus Torvalds.
|
|
|
+ *
|
|
|
+ * Note: inlines with more than a single statement should be marked
|
|
|
+ * __always_inline to avoid problems with older gcc's inlining heuristics.
|
|
|
*/
|
|
|
|
|
|
#ifndef _LINUX_BITOPS_H
|
|
@@ -53,7 +56,8 @@
|
|
|
* Note that @nr may be almost arbitrarily large; this function is not
|
|
|
* restricted to acting on a single-word quantity.
|
|
|
*/
|
|
|
-static inline void set_bit(unsigned int nr, volatile unsigned long *addr)
|
|
|
+static __always_inline void
|
|
|
+set_bit(unsigned int nr, volatile unsigned long *addr)
|
|
|
{
|
|
|
if (IS_IMMEDIATE(nr)) {
|
|
|
asm volatile(LOCK_PREFIX "orb %1,%0"
|
|
@@ -90,7 +94,8 @@ static inline void __set_bit(int nr, volatile unsigned long *addr)
|
|
|
* you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
|
|
|
* in order to ensure changes are visible on other processors.
|
|
|
*/
|
|
|
-static inline void clear_bit(int nr, volatile unsigned long *addr)
|
|
|
+static __always_inline void
|
|
|
+clear_bit(int nr, volatile unsigned long *addr)
|
|
|
{
|
|
|
if (IS_IMMEDIATE(nr)) {
|
|
|
asm volatile(LOCK_PREFIX "andb %1,%0"
|
|
@@ -204,7 +209,8 @@ static inline int test_and_set_bit(int nr, volatile unsigned long *addr)
|
|
|
*
|
|
|
* This is the same as test_and_set_bit on x86.
|
|
|
*/
|
|
|
-static inline int test_and_set_bit_lock(int nr, volatile unsigned long *addr)
|
|
|
+static __always_inline int
|
|
|
+test_and_set_bit_lock(int nr, volatile unsigned long *addr)
|
|
|
{
|
|
|
return test_and_set_bit(nr, addr);
|
|
|
}
|
|
@@ -300,7 +306,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
|
|
|
return oldbit;
|
|
|
}
|
|
|
|
|
|
-static inline int constant_test_bit(unsigned int nr, const volatile unsigned long *addr)
|
|
|
+static __always_inline int constant_test_bit(unsigned int nr, const volatile unsigned long *addr)
|
|
|
{
|
|
|
return ((1UL << (nr % BITS_PER_LONG)) &
|
|
|
(((unsigned long *)addr)[nr / BITS_PER_LONG])) != 0;
|