client: ignore a client timeout, if the last thing we saw as a trigger
[fio.git] / lib / ffz.h
index 7fc7d4567ef155035527e9bc5c5751feafd5d9d9..16c9ae9ebea8adaefbf11d6c51de26be71a9473b 100644 (file)
--- a/lib/ffz.h
+++ b/lib/ffz.h
@@ -1,10 +1,16 @@
 #ifndef FIO_FFZ_H
 #define FIO_FFZ_H
 
-static inline int __ffs(int word)
+#include <inttypes.h>
+
+static inline int ffs64(uint64_t word)
 {
        int r = 0;
 
+       if ((word & 0xffffffff) == 0) {
+               r += 32;
+               word >>= 32;
+       }
        if (!(word & 0xffff)) {
                word >>= 16;
                r += 16;
@@ -21,17 +27,26 @@ static inline int __ffs(int word)
                word >>= 2;
                r += 2;
        }
-       if (!(word & 1)) {
-               word >>= 1;
+       if (!(word & 1))
                r += 1;
-       }
 
        return r;
 }
 
-static inline int ffz(unsigned int bitmask)
+#ifndef ARCH_HAVE_FFZ
+
+static inline int ffz(unsigned long bitmask)
+{
+       return ffs64(~bitmask);
+}
+
+#else
+#define ffz(bitmask)   arch_ffz(bitmask)
+#endif
+
+static inline int ffz64(uint64_t bitmask)
 {
-       return ffs(~bitmask);
+       return ffs64(~bitmask);
 }
 
 #endif