]> sourceware.org Git - lvm2.git/commitdiff
Speed up dm_bit_get_next with ffs().
authorAlasdair Kergon <agk@redhat.com>
Mon, 19 Apr 2010 17:17:55 +0000 (17:17 +0000)
committerAlasdair Kergon <agk@redhat.com>
Mon, 19 Apr 2010 17:17:55 +0000 (17:17 +0000)
WHATS_NEW_DM
libdm/datastruct/bitset.c

index eee757baa92cbd5e260fd86a388b99cf0e3e2783..5f22b63da2c1d562c4112c64b127739024ea75b0 100644 (file)
@@ -1,5 +1,6 @@
 Version 1.02.47 -
 =================================
+  Speed up dm_bit_get_next with ffs().
 
 Version 1.02.46 - 14th April 2010
 =================================
index 9539162597bed8aed5a7f83aa98856490ffbed18..e3c31d75cf243408457c798c7f6f0e8093b0b34b 100644 (file)
@@ -52,18 +52,11 @@ void dm_bit_union(dm_bitset_t out, dm_bitset_t in1, dm_bitset_t in2)
                out[i] = in1[i] | in2[i];
 }
 
-/*
- * FIXME: slow
- */
-static inline int _test_word(uint32_t test, int bit)
+static int _test_word(uint32_t test, int bit)
 {
-       while (bit < (int) DM_BITS_PER_INT) {
-               if (test & (0x1 << bit))
-                       return bit;
-               bit++;
-       }
+       int next_set_bit;
 
-       return -1;
+       return ((next_set_bit = ffs(test >> bit)) ? next_set_bit + bit - 1 : -1);
 }
 
 int dm_bit_get_next(dm_bitset_t bs, int last_bit)
This page took 0.041311 seconds and 5 git commands to generate.