|
@@ -771,34 +771,28 @@ static int bitmap_pos_to_ord(const unsigned long *buf, unsigned int pos, unsigne
|
|
|
* bitmap_ord_to_pos - find position of n-th set bit in bitmap
|
|
|
* @buf: pointer to bitmap
|
|
|
* @ord: ordinal bit position (n-th set bit, n >= 0)
|
|
|
- * @bits: number of valid bit positions in @buf
|
|
|
+ * @nbits: number of valid bit positions in @buf
|
|
|
*
|
|
|
* Map the ordinal offset of bit @ord in @buf to its position in @buf.
|
|
|
- * Value of @ord should be in range 0 <= @ord < weight(buf), else
|
|
|
- * results are undefined.
|
|
|
+ * Value of @ord should be in range 0 <= @ord < weight(buf). If @ord
|
|
|
+ * >= weight(buf), returns @nbits.
|
|
|
*
|
|
|
* If for example, just bits 4 through 7 are set in @buf, then @ord
|
|
|
* values 0 through 3 will get mapped to 4 through 7, respectively,
|
|
|
- * and all other @ord values return undefined values. When @ord value 3
|
|
|
+ * and all other @ord values returns @nbits. When @ord value 3
|
|
|
* gets mapped to (returns) @pos value 7 in this example, that means
|
|
|
* that the 3rd set bit (starting with 0th) is at position 7 in @buf.
|
|
|
*
|
|
|
- * The bit positions 0 through @bits are valid positions in @buf.
|
|
|
+ * The bit positions 0 through @nbits-1 are valid positions in @buf.
|
|
|
*/
|
|
|
-int bitmap_ord_to_pos(const unsigned long *buf, int ord, int bits)
|
|
|
+unsigned int bitmap_ord_to_pos(const unsigned long *buf, unsigned int ord, unsigned int nbits)
|
|
|
{
|
|
|
- int pos = 0;
|
|
|
+ unsigned int pos;
|
|
|
|
|
|
- if (ord >= 0 && ord < bits) {
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = find_first_bit(buf, bits);
|
|
|
- i < bits && ord > 0;
|
|
|
- i = find_next_bit(buf, bits, i + 1))
|
|
|
- ord--;
|
|
|
- if (i < bits && ord == 0)
|
|
|
- pos = i;
|
|
|
- }
|
|
|
+ for (pos = find_first_bit(buf, nbits);
|
|
|
+ pos < nbits && ord;
|
|
|
+ pos = find_next_bit(buf, nbits, pos + 1))
|
|
|
+ ord--;
|
|
|
|
|
|
return pos;
|
|
|
}
|