X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=lib%2Fffz.h;h=eef612d1a136106feacc4d65939da21f3fcefa26;hb=b1d1b239d2a3299a4d7b7b3de185923c655d0a48;hp=4324f5a3c67b378b93bda2201c937164f5d43477;hpb=6839616ff2ac013c8b0fbeb2a97f6cf20976b9f3;p=fio.git diff --git a/lib/ffz.h b/lib/ffz.h index 4324f5a3..eef612d1 100644 --- 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) +static inline int __ffs(unsigned long word) { - int r = 1; + int r = 0; +#if BITS_PER_LONG == 64 + if ((word & 0xffffffff) == 0) { + r += 32; + word >>= 32; + } +#endif if (!(word & 0xffff)) { word >>= 16; r += 16; @@ -29,9 +35,9 @@ static inline int __ffs(int word) return r; } -static inline int ffz(unsigned int bitmask) +static inline int ffz(unsigned long bitmask) { - return ffs(~bitmask) - 1; + return __ffs(~bitmask); } #endif