]> www.infradead.org Git - users/jedix/linux-maple.git/commit
lib: add find_first_and_bit()
authorYury Norov <yury.norov@gmail.com>
Mon, 23 Aug 2021 23:59:56 +0000 (09:59 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 25 Aug 2021 23:34:48 +0000 (09:34 +1000)
commit6b6c111934a424e80ad7f8ef47a262f1a9e937fb
treeb723728a4bdc17e521d3ea824fc6e2e56b76b81d
parentdbbccfe505ef8fae804677abf0564c1e07479102
lib: add find_first_and_bit()

Currently find_first_and_bit() is an alias to find_next_and_bit().
However, it is widely used in cpumask, so it worth to optimize it.  This
patch adds its own implementation for find_first_and_bit().

On x86_64 find_bit_benchmark says:

Before (#define find_first_and_bit(...) find_next_and_bit(..., 0):
Start testing find_bit() with random-filled bitmap
[  140.291468] find_first_and_bit:           46890919 ns,  32671 iterations
Start testing find_bit() with sparse bitmap
[  140.295028] find_first_and_bit:               7103 ns,      1 iterations

After:
Start testing find_bit() with random-filled bitmap
[  162.574907] find_first_and_bit:           25045813 ns,  32846 iterations
Start testing find_bit() with sparse bitmap
[  162.578458] find_first_and_bit:               4900 ns,      1 iterations

(Thanks to Alexey Klimov for thorough testing.)

Link: https://lkml.kernel.org/r/20210814211713.180533-6-yury.norov@gmail.com
Signed-off-by: Yury Norov <yury.norov@gmail.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Tested-by: Alexey Klimov <aklimov@redhat.com>
Cc: Alexander Lobakin <alobakin@pm.me>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Dennis Zhou <dennis@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
include/linux/find.h
lib/find_bit.c
lib/find_bit_benchmark.c