mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
bitmap: unify find_bit operations
bitmap_for_each_{set,clear}_region() are similar to for_each_bit()
macros in include/linux/find.h, but interface and implementation
of them are different.
This patch adds for_each_bitrange() macros and drops unused
bitmap_*_region() API in sake of unification.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Acked-by: Dennis Zhou <dennis@kernel.org>
Acked-by: Ulf Hansson <ulf.hansson@linaro.org> # For MMC
This commit is contained in:
@@ -301,6 +301,62 @@ unsigned long find_next_bit_le(const void *addr, unsigned
|
||||
(bit) < (size); \
|
||||
(bit) = find_next_zero_bit((addr), (size), (bit) + 1))
|
||||
|
||||
/**
|
||||
* for_each_set_bitrange - iterate over all set bit ranges [b; e)
|
||||
* @b: bit offset of start of current bitrange (first set bit)
|
||||
* @e: bit offset of end of current bitrange (first unset bit)
|
||||
* @addr: bitmap address to base the search on
|
||||
* @size: bitmap size in number of bits
|
||||
*/
|
||||
#define for_each_set_bitrange(b, e, addr, size) \
|
||||
for ((b) = find_next_bit((addr), (size), 0), \
|
||||
(e) = find_next_zero_bit((addr), (size), (b) + 1); \
|
||||
(b) < (size); \
|
||||
(b) = find_next_bit((addr), (size), (e) + 1), \
|
||||
(e) = find_next_zero_bit((addr), (size), (b) + 1))
|
||||
|
||||
/**
|
||||
* for_each_set_bitrange_from - iterate over all set bit ranges [b; e)
|
||||
* @b: bit offset of start of current bitrange (first set bit); must be initialized
|
||||
* @e: bit offset of end of current bitrange (first unset bit)
|
||||
* @addr: bitmap address to base the search on
|
||||
* @size: bitmap size in number of bits
|
||||
*/
|
||||
#define for_each_set_bitrange_from(b, e, addr, size) \
|
||||
for ((b) = find_next_bit((addr), (size), (b)), \
|
||||
(e) = find_next_zero_bit((addr), (size), (b) + 1); \
|
||||
(b) < (size); \
|
||||
(b) = find_next_bit((addr), (size), (e) + 1), \
|
||||
(e) = find_next_zero_bit((addr), (size), (b) + 1))
|
||||
|
||||
/**
|
||||
* for_each_clear_bitrange - iterate over all unset bit ranges [b; e)
|
||||
* @b: bit offset of start of current bitrange (first unset bit)
|
||||
* @e: bit offset of end of current bitrange (first set bit)
|
||||
* @addr: bitmap address to base the search on
|
||||
* @size: bitmap size in number of bits
|
||||
*/
|
||||
#define for_each_clear_bitrange(b, e, addr, size) \
|
||||
for ((b) = find_next_zero_bit((addr), (size), 0), \
|
||||
(e) = find_next_bit((addr), (size), (b) + 1); \
|
||||
(b) < (size); \
|
||||
(b) = find_next_zero_bit((addr), (size), (e) + 1), \
|
||||
(e) = find_next_bit((addr), (size), (b) + 1))
|
||||
|
||||
/**
|
||||
* for_each_clear_bitrange_from - iterate over all unset bit ranges [b; e)
|
||||
* @b: bit offset of start of current bitrange (first set bit); must be initialized
|
||||
* @e: bit offset of end of current bitrange (first unset bit)
|
||||
* @addr: bitmap address to base the search on
|
||||
* @size: bitmap size in number of bits
|
||||
*/
|
||||
#define for_each_clear_bitrange_from(b, e, addr, size) \
|
||||
for ((b) = find_next_zero_bit((addr), (size), (b)), \
|
||||
(e) = find_next_bit((addr), (size), (b) + 1); \
|
||||
(b) < (size); \
|
||||
(b) = find_next_zero_bit((addr), (size), (e) + 1), \
|
||||
(e) = find_next_bit((addr), (size), (b) + 1))
|
||||
|
||||
/**
|
||||
* for_each_set_clump8 - iterate over bitmap for each 8-bit clump with set bits
|
||||
* @start: bit offset to start search and to store the current iteration offset
|
||||
|
||||
Reference in New Issue
Block a user