diff mbox

[U-Boot,v7,17/21] bitops: Add fls_long and __ffs64

Message ID 1446734622-5100-17-git-send-email-fabio.estevam@freescale.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Fabio Estevam Nov. 5, 2015, 2:43 p.m. UTC
Add fls_long and __ffs64 support to align with the kernel bitops
implementation.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
Changes since v6:
- Newly introduced in this series.
- Only touch include/linux/bitops.h after all the arch bitops headers
have been added. This is done to avoid build warnings (Daniel).

 include/linux/bitops.h | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

Comments

Tom Rini Nov. 6, 2015, 12:24 p.m. UTC | #1
On Thu, Nov 05, 2015 at 12:43:38PM -0200, Fabio Estevam wrote:

> Add fls_long and __ffs64 support to align with the kernel bitops
> implementation.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 7b4011f..1b2e491 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -2,6 +2,7 @@ 
 #define _LINUX_BITOPS_H
 
 #include <asm/types.h>
+#include <linux/compiler.h>
 
 #define BIT(nr)			(1UL << (nr))
 #define BIT_MASK(nr)		(1UL << ((nr) % BITS_PER_LONG))
@@ -139,6 +140,32 @@  static inline unsigned int generic_hweight8(unsigned int w)
 # define fls generic_fls
 #endif
 
+static inline unsigned fls_long(unsigned long l)
+{
+	if (sizeof(l) == 4)
+		return fls(l);
+	return fls64(l);
+}
+
+/**
+ * __ffs64 - find first set bit in a 64 bit word
+ * @word: The 64 bit word
+ *
+ * On 64 bit arches this is a synomyn for __ffs
+ * The result is not defined if no bits are set, so check that @word
+ * is non-zero before calling this.
+ */
+static inline unsigned long __ffs64(u64 word)
+{
+#if BITS_PER_LONG == 32
+	if (((u32)word) == 0UL)
+		return __ffs((u32)(word >> 32)) + 32;
+#elif BITS_PER_LONG != 64
+#error BITS_PER_LONG not 32 or 64
+#endif
+	return __ffs((unsigned long)word);
+}
+
 /**
  * __set_bit - Set a bit in memory
  * @nr: the bit to set