From: Keerthy Date: Thu, 27 Jan 2022 12:16:54 +0000 (+0100) Subject: linux: bitmap.h: Add find_next_zero_area function X-Git-Url: http://git.dujemihanovic.xyz/login.html?a=commitdiff_plain;h=8a92603a3489f789f8e3a36a1e073bc1c237d73e;p=u-boot.git linux: bitmap.h: Add find_next_zero_area function Add find_next_zero_area to fetch the next zero area in the map. Signed-off-by: Keerthy Signed-off-by: Amjad Ouled-Ameur --- diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index dae4225be5..0a8503af9f 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h @@ -159,6 +159,32 @@ static inline unsigned long find_first_bit(const unsigned long *addr, unsigned l (bit) < (size); \ (bit) = find_next_bit((addr), (size), (bit) + 1)) +static inline unsigned long +bitmap_find_next_zero_area(unsigned long *map, + unsigned long size, + unsigned long start, + unsigned int nr, unsigned long align_mask) +{ + unsigned long index, end, i; +again: + index = find_next_zero_bit(map, size, start); + + /* + * Align allocation + */ + index = (index + align_mask) & ~align_mask; + + end = index + nr; + if (end > size) + return end; + i = find_next_bit(map, end, index); + if (i < end) { + start = i + 1; + goto again; + } + return index; +} + static inline void bitmap_fill(unsigned long *dst, unsigned int nbits) { if (small_const_nbits(nbits)) {