Index: sys/dev/aic7xxx/aic79xx.c =================================================================== --- sys/dev/aic7xxx/aic79xx.c +++ sys/dev/aic7xxx/aic79xx.c @@ -8593,8 +8593,7 @@ if (sg_prefetch_align == 0) sg_prefetch_align = 8; /* Round down to the nearest power of 2. */ - while (powerof2(sg_prefetch_align) == 0) - sg_prefetch_align--; + sg_prefetch_align = 1 << ilog2(sg_prefetch_align); cacheline_mask = sg_prefetch_align - 1; Index: sys/dev/cxgb/cxgb_sge.c =================================================================== --- sys/dev/cxgb/cxgb_sge.c +++ sys/dev/cxgb/cxgb_sge.c @@ -553,9 +553,7 @@ nqsets *= adap->params.nports; fl_q_size = min(nmbclusters/(3*nqsets), FL_Q_SIZE); - - while (!powerof2(fl_q_size)) - fl_q_size--; + fl_q_size = 1 << ilog2(fl_q_size); use_16k = cxgb_use_16k_clusters != -1 ? cxgb_use_16k_clusters : is_offload(adap); @@ -567,8 +565,7 @@ jumbo_q_size = min(nmbjumbo9/(3*nqsets), JUMBO_Q_SIZE); jumbo_buf_size = MJUM9BYTES; } - while (!powerof2(jumbo_q_size)) - jumbo_q_size--; + jumbo_q_size = 1 << ilog2(jumbo_q_size); if (fl_q_size < (FL_Q_SIZE / 4) || jumbo_q_size < (JUMBO_Q_SIZE / 2)) device_printf(adap->dev, Index: sys/dev/cxgbe/t4_sge.c =================================================================== --- sys/dev/cxgbe/t4_sge.c +++ sys/dev/cxgbe/t4_sge.c @@ -4220,9 +4220,7 @@ { u_int fthresh; - while (!powerof2(qsize)) - qsize++; - fthresh = ilog2(qsize); + fthresh = qsize == 0 ? 0 : fls(qsize - 1); if (fthresh > X_CIDXFLUSHTHRESH_128) fthresh = X_CIDXFLUSHTHRESH_128; Index: sys/dev/irdma/irdma_ctrl.c =================================================================== --- sys/dev/irdma/irdma_ctrl.c +++ sys/dev/irdma/irdma_ctrl.c @@ -4909,7 +4909,7 @@ struct irdma_virt_mem virt_mem; u32 i, mem_size; u32 qpwanted, mrwanted, pblewanted; - u32 powerof2, hte; + u32 hte; u32 sd_needed; u32 sd_diff; u32 loop_count = 0; @@ -4938,12 +4938,8 @@ hmc_info->sd_table.sd_cnt, max_sds); qpwanted = min(qp_count, hmc_info->hmc_obj[IRDMA_HMC_IW_QP].max_cnt); - - powerof2 = 1; - while (powerof2 <= qpwanted) - powerof2 *= 2; - powerof2 /= 2; - qpwanted = powerof2; + if (qpwanted != 0) + qpwanted = 1 << ilog2(qpwanted); mrwanted = hmc_info->hmc_obj[IRDMA_HMC_IW_MR].max_cnt; pblewanted = hmc_info->hmc_obj[IRDMA_HMC_IW_PBLE].max_cnt; @@ -4986,11 +4982,9 @@ hmc_info->hmc_obj[IRDMA_HMC_IW_MR].cnt = mrwanted; hte = round_up(qpwanted + hmc_info->hmc_obj[IRDMA_HMC_IW_FSIMC].cnt, 512); - powerof2 = 1; - while (powerof2 < hte) - powerof2 *= 2; + hte = hte == 0 ? 1 : 1 << fls(hte - 1); hmc_info->hmc_obj[IRDMA_HMC_IW_HTE].cnt = - powerof2 * hmc_fpm_misc->ht_multiplier; + hte * hmc_fpm_misc->ht_multiplier; if (dev->hw_attrs.uk_attrs.hw_rev == IRDMA_GEN_1) cfg_fpm_value_gen_1(dev, hmc_info, qpwanted); else Index: sys/dev/mlx5/mlx5_en/mlx5_en_main.c =================================================================== --- sys/dev/mlx5/mlx5_en/mlx5_en_main.c +++ sys/dev/mlx5/mlx5_en/mlx5_en_main.c @@ -2331,9 +2331,7 @@ * Stride size is 16 * (n + 1), as the first segment is * control. */ - for (n = howmany(r, MLX5E_MAX_RX_BYTES); !powerof2(n + 1); n++) - ; - + n = (1 << fls(howmany(r, MLX5E_MAX_RX_BYTES))) - 1; if (n > MLX5E_MAX_BUSDMA_RX_SEGS) return (-ENOMEM); Index: sys/netpfil/ipfw/ip_fw_table.c =================================================================== --- sys/netpfil/ipfw/ip_fw_table.c +++ sys/netpfil/ipfw/ip_fw_table.c @@ -1516,15 +1516,7 @@ roundup2p(uint32_t v) { - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - - return (v); + return (1 << fls(v - 1)); } /*