// SPDX-License-Identifier: GPL-2.0 /* * MSB0 numbered special bitops handling. * * The bits are numbered: * |0..............63|64............127|128...........191|192...........255| * * The reason for this bit numbering is the fact that the hardware sets bits * in a bitmap starting at bit 0 (MSB) and we don't want to scan the bitmap * from the 'wrong end'. */ #include <linux/compiler.h> #include <linux/bitops.h> #include <linux/export.h>
unsigned long find_first_bit_inv(const unsigned long *addr, unsigned long size) { const unsigned long *p = addr; unsigned long result = 0; unsigned long tmp; while (size & ~(BITS_PER_LONG - 1)) { if ((tmp = *(p++))) goto found; result += BITS_PER_LONG; size -= BITS_PER_LONG; } if (!size) return result; tmp = (*p) & (~0UL << (BITS_PER_LONG - size)); if (!tmp) /* Are any bits set? */ return result + size; /* Nope. */ found: return result + (__fls(tmp) ^ (BITS_PER_LONG - 1)); }Contributors
Person | Tokens | Prop | Commits | CommitProp |
Heiko Carstens | 126 | 100.00% | 2 | 100.00% |
Total | 126 | 100.00% | 2 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Heiko Carstens | 209 | 100.00% | 2 | 100.00% |
Total | 209 | 100.00% | 2 | 100.00% |
Person | Tokens | Prop | Commits | CommitProp |
Heiko Carstens | 355 | 99.72% | 3 | 75.00% |
Greg Kroah-Hartman | 1 | 0.28% | 1 | 25.00% |
Total | 356 | 100.00% | 4 | 100.00% |