diff options
author | Yury Norov <yury.norov@gmail.com> | 2015-04-16 15:43:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-17 09:03:54 -0400 |
commit | 8f6f19dd5143aa59139deeb885a8ed5e2d937e21 (patch) | |
tree | 32600483d6f7384f068324ee1389e72a465c2ca9 /lib | |
parent | 2c57a0e233d72f8c2e2404560dcf0188ac3cf5d7 (diff) |
lib: move find_last_bit to lib/find_next_bit.c
Currently all 'find_*_bit' family is located in lib/find_next_bit.c,
except 'find_last_bit', which is in lib/find_last_bit.c. It seems,
there's no major benefit to have it separated.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
Reviewed-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Reviewed-by: George Spelvin <linux@horizon.com>
Cc: Alexey Klimov <klimov.linux@gmail.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Daniel Borkmann <dborkman@redhat.com>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Mark Salter <msalter@redhat.com>
Cc: AKASHI Takahiro <takahiro.akashi@linaro.org>
Cc: Thomas Graf <tgraf@suug.ch>
Cc: Valentin Rothberg <valentinrothberg@gmail.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile | 2 | ||||
-rw-r--r-- | lib/find_next_bit.c | 27 |
2 files changed, 27 insertions, 2 deletions
diff --git a/lib/Makefile b/lib/Makefile index 58f74d2dd396..05f8fa56a1bc 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
@@ -25,7 +25,7 @@ obj-y += lockref.o | |||
25 | obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ | 25 | obj-y += bcd.o div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ |
26 | bust_spinlocks.o kasprintf.o bitmap.o scatterlist.o \ | 26 | bust_spinlocks.o kasprintf.o bitmap.o scatterlist.o \ |
27 | gcd.o lcm.o list_sort.o uuid.o flex_array.o iov_iter.o clz_ctz.o \ | 27 | gcd.o lcm.o list_sort.o uuid.o flex_array.o iov_iter.o clz_ctz.o \ |
28 | bsearch.o find_last_bit.o find_next_bit.o llist.o memweight.o kfifo.o \ | 28 | bsearch.o find_next_bit.o llist.o memweight.o kfifo.o \ |
29 | percpu-refcount.o percpu_ida.o rhashtable.o reciprocal_div.o | 29 | percpu-refcount.o percpu_ida.o rhashtable.o reciprocal_div.o |
30 | obj-y += string_helpers.o | 30 | obj-y += string_helpers.o |
31 | obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o | 31 | obj-$(CONFIG_TEST_STRING_HELPERS) += test-string_helpers.o |
diff --git a/lib/find_next_bit.c b/lib/find_next_bit.c index cbea5ef843aa..18072ea9c20e 100644 --- a/lib/find_next_bit.c +++ b/lib/find_next_bit.c | |||
@@ -1,8 +1,12 @@ | |||
1 | /* find_next_bit.c: fallback find next bit implementation | 1 | /* bit search implementation |
2 | * | 2 | * |
3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. |
4 | * Written by David Howells (dhowells@redhat.com) | 4 | * Written by David Howells (dhowells@redhat.com) |
5 | * | 5 | * |
6 | * Copyright (C) 2008 IBM Corporation | ||
7 | * 'find_last_bit' is written by Rusty Russell <rusty@rustcorp.com.au> | ||
8 | * (Inspired by David Howell's find_next_bit implementation) | ||
9 | * | ||
6 | * Rewritten by Yury Norov <yury.norov@gmail.com> to decrease | 10 | * Rewritten by Yury Norov <yury.norov@gmail.com> to decrease |
7 | * size and improve performance, 2015. | 11 | * size and improve performance, 2015. |
8 | * | 12 | * |
@@ -13,6 +17,7 @@ | |||
13 | */ | 17 | */ |
14 | 18 | ||
15 | #include <linux/bitops.h> | 19 | #include <linux/bitops.h> |
20 | #include <linux/bitmap.h> | ||
16 | #include <linux/export.h> | 21 | #include <linux/export.h> |
17 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
18 | 23 | ||
@@ -106,6 +111,26 @@ unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) | |||
106 | EXPORT_SYMBOL(find_first_zero_bit); | 111 | EXPORT_SYMBOL(find_first_zero_bit); |
107 | #endif | 112 | #endif |
108 | 113 | ||
114 | #ifndef find_last_bit | ||
115 | unsigned long find_last_bit(const unsigned long *addr, unsigned long size) | ||
116 | { | ||
117 | if (size) { | ||
118 | unsigned long val = BITMAP_LAST_WORD_MASK(size); | ||
119 | unsigned long idx = (size-1) / BITS_PER_LONG; | ||
120 | |||
121 | do { | ||
122 | val &= addr[idx]; | ||
123 | if (val) | ||
124 | return idx * BITS_PER_LONG + __fls(val); | ||
125 | |||
126 | val = ~0ul; | ||
127 | } while (idx--); | ||
128 | } | ||
129 | return size; | ||
130 | } | ||
131 | EXPORT_SYMBOL(find_last_bit); | ||
132 | #endif | ||
133 | |||
109 | #ifdef __BIG_ENDIAN | 134 | #ifdef __BIG_ENDIAN |
110 | 135 | ||
111 | /* include/linux/byteorder does not support "unsigned long" type */ | 136 | /* include/linux/byteorder does not support "unsigned long" type */ |