[U-Boot] [PATCH 1/8]: Move __set/clear_bit from ubifs.h to bitops.h
Simon Kagstrom
simon.kagstrom at netinsight.net
Tue Jul 7 15:56:31 CEST 2009
Move __set/clear_bit from ubifs.h to bitops.h
__set_bit and __clear_bit are defined in ubifs.h as well as in
asm/include/bitops.h for some architectures. This patch moves
the generic implementation to include/linux/bitops.h and uses
that unless it's defined by the architecture.
Signed-off-by: Simon Kagstrom <simon.kagstrom at netinsight.net>
---
fs/ubifs/ubifs.h | 32 --------------------------------
include/asm-avr32/bitops.h | 3 +++
include/asm-m68k/bitops.h | 3 +++
include/asm-nios/bitops.h | 3 +++
include/asm-nios2/bitops.h | 3 +++
include/asm-ppc/bitops.h | 3 +++
include/asm-sh/bitops.h | 4 ++++
include/asm-sparc/bitops.h | 3 +++
include/linux/bitops.h | 30 ++++++++++++++++++++++++++++++
9 files changed, 52 insertions(+), 32 deletions(-)
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index 43865aa..06772af 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -449,38 +449,6 @@ static inline ino_t parent_ino(struct dentry *dentry)
return res;
}
-/* linux/include/linux/bitops.h */
-
-#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
-#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
-
-/* linux/include/asm-generic/bitops/non-atomic.h */
-
-/**
- * __set_bit - Set a bit in memory
- * @nr: the bit to set
- * @addr: the address to start counting from
- *
- * Unlike set_bit(), this function is non-atomic and may be reordered.
- * If it's called on the same region of memory simultaneously, the effect
- * may be that only one operation succeeds.
- */
-static inline void __set_bit(int nr, volatile unsigned long *addr)
-{
- unsigned long mask = BIT_MASK(nr);
- unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
-
- *p |= mask;
-}
-
-static inline void __clear_bit(int nr, volatile unsigned long *addr)
-{
- unsigned long mask = BIT_MASK(nr);
- unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
-
- *p &= ~mask;
-}
-
/* debug.c */
#define DEFINE_SPINLOCK(...)
diff --git a/include/asm-avr32/bitops.h b/include/asm-avr32/bitops.h
index f15fd46..bb272d8 100644
--- a/include/asm-avr32/bitops.h
+++ b/include/asm-avr32/bitops.h
@@ -22,4 +22,7 @@
#ifndef __ASM_AVR32_BITOPS_H
#define __ASM_AVR32_BITOPS_H
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
#endif /* __ASM_AVR32_BITOPS_H */
diff --git a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h
index 0f9e8ab..e113b55 100644
--- a/include/asm-m68k/bitops.h
+++ b/include/asm-m68k/bitops.h
@@ -15,6 +15,9 @@ extern int test_and_set_bit(int nr, volatile void *addr);
extern int test_and_clear_bit(int nr, volatile void *addr);
extern int test_and_change_bit(int nr, volatile void *addr);
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
#ifdef __KERNEL__
/*
diff --git a/include/asm-nios/bitops.h b/include/asm-nios/bitops.h
index 7744212..db070f7 100644
--- a/include/asm-nios/bitops.h
+++ b/include/asm-nios/bitops.h
@@ -34,4 +34,7 @@ extern int test_and_change_bit(int nr, volatile void * addr);
extern int test_bit(int nr, volatile void * a);
extern int ffs(int i);
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
#endif /* _ASM_NIOS_BITOPS_H */
diff --git a/include/asm-nios2/bitops.h b/include/asm-nios2/bitops.h
index e6c1a85..5f5e325 100644
--- a/include/asm-nios2/bitops.h
+++ b/include/asm-nios2/bitops.h
@@ -34,4 +34,7 @@ extern int test_and_change_bit(int nr, volatile void * addr);
extern int test_bit(int nr, volatile void * a);
extern int ffs(int i);
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
#endif /* __ASM_NIOS2_BITOPS_H */
diff --git a/include/asm-ppc/bitops.h b/include/asm-ppc/bitops.h
index daa66cf..def32d7 100644
--- a/include/asm-ppc/bitops.h
+++ b/include/asm-ppc/bitops.h
@@ -144,6 +144,9 @@ extern __inline__ int test_and_change_bit(int nr, volatile void *addr)
}
#endif /* __INLINE_BITOPS */
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
extern __inline__ int test_bit(int nr, __const__ volatile void *addr)
{
__const__ unsigned int *p = (__const__ unsigned int *) addr;
diff --git a/include/asm-sh/bitops.h b/include/asm-sh/bitops.h
index 410fba4..f83c493 100644
--- a/include/asm-sh/bitops.h
+++ b/include/asm-sh/bitops.h
@@ -146,6 +146,10 @@ static inline int ffs (int x)
}
return r;
}
+
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
#endif /* __KERNEL__ */
#endif /* __ASM_SH_BITOPS_H */
diff --git a/include/asm-sparc/bitops.h b/include/asm-sparc/bitops.h
index ceb39f2..52a15cf 100644
--- a/include/asm-sparc/bitops.h
+++ b/include/asm-sparc/bitops.h
@@ -26,4 +26,7 @@
#ifndef _SPARC_BITOPS_H
#define _SPARC_BITOPS_H
+#define __set_bit(nr, addr) generic_set_bit(nr, addr)
+#define __clear_bit(nr, addr) generic_clear_bit(nr, addr)
+
#endif /* _SPARC_BITOPS_H */
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 7d41ae6..6bdaad7 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -69,4 +69,34 @@ static inline unsigned int generic_hweight8(unsigned int w)
#include <asm/bitops.h>
+#define BIT_MASK(nr) (1UL << ((nr) % BITS_PER_LONG))
+#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
+
+/* linux/include/asm-generic/bitops/non-atomic.h */
+
+/**
+ * __set_bit - Set a bit in memory
+ * @nr: the bit to set
+ * @addr: the address to start counting from
+ *
+ * Unlike set_bit(), this function is non-atomic and may be reordered.
+ * If it's called on the same region of memory simultaneously, the effect
+ * may be that only one operation succeeds.
+ */
+static inline void generic_set_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = BIT_MASK(nr);
+ unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
+
+ *p |= mask;
+}
+
+static inline void generic_clear_bit(int nr, volatile unsigned long *addr)
+{
+ unsigned long mask = BIT_MASK(nr);
+ unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
+
+ *p &= ~mask;
+}
+
#endif
--
1.6.0.4
More information about the U-Boot
mailing list