diff --git a/sys/kern/subr_rman.c b/sys/kern/subr_rman.c index 91a7bcdafcff..73a2daf96c48 100644 --- a/sys/kern/subr_rman.c +++ b/sys/kern/subr_rman.c @@ -598,18 +598,16 @@ uint32_t rman_make_alignment_flags(uint32_t size) { int i; - int count; - for (i = 0, count = 0; i < 32 && size > 0x01; i++) { - count += size & 1; - size >>= 1; - } - - if (count > 0) - i ++; - - if (i > 31) - i = 0; + /* + * Find the hightest bit set, and add one if more than one bit + * set. We're effectively computing the ceil(log2(size)) here. + */ + for (i = 32; i > 0; i--) + if ((1 << i) & size) + break; + if (~(1 << i) & size) + i++; return(RF_ALIGNMENT_LOG2(i)); - } +}