On 02/01/2024 02:45, Ping-Ke Shih wrote: > > >> -----Original Message----- >> From: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> >> Sent: Monday, January 1, 2024 6:19 AM >> To: linux-wireless@xxxxxxxxxxxxxxx >> Cc: Jes Sorensen <Jes.Sorensen@xxxxxxxxx>; Ping-Ke Shih <pkshih@xxxxxxxxxxx> >> Subject: [PATCH] wifi: rtl8xxxu: Fix off by one initial RTS rate >> >> rtl8xxxu_set_basic_rates() sets the wrong initial RTS rate. It sets the >> next higher rate than the one it should set, e.g. 36M instead of 24M. >> >> The while loop is supposed to find the index of the most significant >> bit which is 1. >> >> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> >> --- >> drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c >> b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c >> index 180907319e8c..b9f3382bd67c 100644 >> --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c >> +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c >> @@ -4839,7 +4839,7 @@ static void rtl8xxxu_set_basic_rates(struct rtl8xxxu_priv *priv, u32 rate_cfg) >> >> dev_dbg(&priv->udev->dev, "%s: rates %08x\n", __func__, rate_cfg); >> >> - while (rate_cfg) { >> + while (rate_cfg > 1) { >> rate_cfg = (rate_cfg >> 1); >> rate_idx++; >> } > > How about using __fls()? > > if (rate_cfg) > rate_idx = __fls(rate_cfg); > Yes, that's nicer.