On Wed, Dec 28 2016, Jaewon Kim wrote: > I did not add caller in this patch. > I am using the patch in cma_alloc function like below to show > available page status. > > + printk("number of available pages: "); > + start = 0; > + for (;;) { > + bitmap_no = bitmap_find_next_zero_area_and_size(cma->bitmap, > + cma->count, start, &nr); > + if (bitmap_no >= cma->count) > + break; > + if (nr_total == 0) > + printk("%u", nr); > + else > + printk("+%u", nr); > + nr_total += nr; > + start = bitmap_no + nr; > + } > + printk("=>%u pages, total: %lu pages\n", nr_total, cma->count); I would be happier should you find other existing places where this function can be used. With just one caller, I’m not convinced it is worth it. >>> Signed-off-by: Jaewon Kim <jaewon31.kim@xxxxxxxxxxx> The code itself is good, so Acked-by: Michal Nazarewicz <mina86@xxxxxxxxxx> and I’ll leave deciding whether it improves the kernel overall to maintainers. ;) >>> --- >>> include/linux/bitmap.h | 6 ++++++ >>> lib/bitmap.c | 25 +++++++++++++++++++++++++ >>> 2 files changed, 31 insertions(+) >>> >>> diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h >>> index 3b77588..b724a6c 100644 >>> --- a/include/linux/bitmap.h >>> +++ b/include/linux/bitmap.h >>> @@ -46,6 +46,7 @@ >>> * bitmap_clear(dst, pos, nbits) Clear specified bit area >>> * bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area >>> * bitmap_find_next_zero_area_off(buf, len, pos, n, mask) as above >>> + * bitmap_find_next_zero_area_and_size(buf, len, pos, n, mask) Find bit free area and its size >>> * bitmap_shift_right(dst, src, n, nbits) *dst = *src >> n >>> * bitmap_shift_left(dst, src, n, nbits) *dst = *src << n >>> * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) >>> @@ -123,6 +124,11 @@ extern unsigned long bitmap_find_next_zero_area_off(unsigned long *map, >>> unsigned long align_mask, >>> unsigned long align_offset); >>> >>> +extern unsigned long bitmap_find_next_zero_area_and_size(unsigned long *map, >>> + unsigned long size, >>> + unsigned long start, >>> + unsigned int *nr); >>> + >>> /** >>> * bitmap_find_next_zero_area - find a contiguous aligned zero area >>> * @map: The address to base the search on >>> diff --git a/lib/bitmap.c b/lib/bitmap.c >>> index 0b66f0e..d02817c 100644 >>> --- a/lib/bitmap.c >>> +++ b/lib/bitmap.c >>> @@ -332,6 +332,31 @@ unsigned long bitmap_find_next_zero_area_off(unsigned long *map, >>> } >>> EXPORT_SYMBOL(bitmap_find_next_zero_area_off); >>> >>> +/** >>> + * bitmap_find_next_zero_area_and_size - find a contiguous aligned zero area >>> + * @map: The address to base the search on >>> + * @size: The bitmap size in bits >>> + * @start: The bitnumber to start searching at >>> + * @nr: The number of zeroed bits we've found >>> + */ >>> +unsigned long bitmap_find_next_zero_area_and_size(unsigned long *map, >>> + unsigned long size, >>> + unsigned long start, >>> + unsigned int *nr) >>> +{ >>> + unsigned long index, i; >>> + >>> + *nr = 0; >>> + index = find_next_zero_bit(map, size, start); >>> + >>> + if (index >= size) >>> + return index; I would remove this check. find_next_bit handles situation when index == size and without this early return, *nr is always set. >>> + i = find_next_bit(map, size, index); >>> + *nr = i - index; >>> + return index; >>> +} >>> +EXPORT_SYMBOL(bitmap_find_next_zero_area_and_size); >>> + >>> /* >>> * Bitmap printing & parsing functions: first version by Nadia Yvette Chambers, >>> * second version by Paul Jackson, third by Joe Korty. >>> -- >>> 1.9.1 >>> >>> -- >>> To unsubscribe, send a message with 'unsubscribe linux-mm' in >>> the body to majordomo@xxxxxxxxx. For more info on Linux MM, >>> see: http://www.linux-mm.org/ . >>> Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> > -- Best regards ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ «If at first you don’t succeed, give up skydiving» -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href