aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/find_bit.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lib/find_bit.c')
-rw-r--r--tools/lib/find_bit.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/tools/lib/find_bit.c b/tools/lib/find_bit.c
index 9122a9e80046..6d8b8f22cf55 100644
--- a/tools/lib/find_bit.c
+++ b/tools/lib/find_bit.c
@@ -82,3 +82,28 @@ unsigned long find_first_bit(const unsigned long *addr, unsigned long size)
82 return size; 82 return size;
83} 83}
84#endif 84#endif
85
86#ifndef find_first_zero_bit
87/*
88 * Find the first cleared bit in a memory region.
89 */
90unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size)
91{
92 unsigned long idx;
93
94 for (idx = 0; idx * BITS_PER_LONG < size; idx++) {
95 if (addr[idx] != ~0UL)
96 return min(idx * BITS_PER_LONG + ffz(addr[idx]), size);
97 }
98
99 return size;
100}
101#endif
102
103#ifndef find_next_zero_bit
104unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size,
105 unsigned long offset)
106{
107 return _find_next_bit(addr, size, offset, ~0UL);
108}
109#endif