On Sat, 2024-01-20 at 20:48 -0500, Sasha Levin wrote: > This is a note to let you know that I've just added the patch titled > > rtlwifi: Use ffs in <foo>_phy_calculate_bit_shift Why? There's no change in behavior. Not a candidate for stable IMO. Same for 4.19. > > to the 5.4-stable tree which can be found at: > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > The filename of the patch is: > rtlwifi-use-ffs-in-foo-_phy_calculate_bit_shift.patch > and it can be found in the queue-5.4 subdirectory. > > If you, or anyone else, feels it should not be added to the stable tree, > please let <stable@xxxxxxxxxxxxxxx> know about it. > > > > commit a5dba4741aebf44a1371d4559b5c13535a440c38 > Author: Joe Perches <joe@xxxxxxxxxxx> > Date: Fri Sep 18 23:37:47 2020 -0700 > > rtlwifi: Use ffs in <foo>_phy_calculate_bit_shift > > [ Upstream commit 6c1d61913570d4255548ac598cfbef6f1e3c3eee ] > > Remove the loop and use the generic ffs instead. > > Signed-off-by: Joe Perches <joe@xxxxxxxxxxx> > Signed-off-by: Kalle Valo <kvalo@xxxxxxxxxxxxxx> > Link: https://lore.kernel.org/r/e2ab424d24b74901bc0c39f0c60f75e871adf2ba.camel@xxxxxxxxxxx > Stable-dep-of: bc8263083af6 ("wifi: rtlwifi: rtl8821ae: phy: fix an undefined bitwise shift behavior") > Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx> > > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.c > index 96d8f25b120f..52b0fccc31f8 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/phy.c > @@ -16,7 +16,12 @@ static u32 _rtl88e_phy_rf_serial_read(struct ieee80211_hw *hw, > static void _rtl88e_phy_rf_serial_write(struct ieee80211_hw *hw, > enum radio_path rfpath, u32 offset, > u32 data); > -static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask); > +static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask) > +{ > + u32 i = ffs(bitmask); > + > + return i ? i - 1 : 32; > +} > static bool _rtl88e_phy_bb8188e_config_parafile(struct ieee80211_hw *hw); > static bool _rtl88e_phy_config_mac_with_headerfile(struct ieee80211_hw *hw); > static bool phy_config_bb_with_headerfile(struct ieee80211_hw *hw, > @@ -210,17 +215,6 @@ static void _rtl88e_phy_rf_serial_write(struct ieee80211_hw *hw, > rfpath, pphyreg->rf3wire_offset, data_and_addr); > } > > -static u32 _rtl88e_phy_calculate_bit_shift(u32 bitmask) > -{ > - u32 i; > - > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > - return i; > -} > - > bool rtl88e_phy_mac_config(struct ieee80211_hw *hw) > { > struct rtl_priv *rtlpriv = rtl_priv(hw); > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/phy_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/phy_common.c > index 0efd19aa4fe5..1145cb0ca4af 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192c/phy_common.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192c/phy_common.c > @@ -145,13 +145,9 @@ EXPORT_SYMBOL(_rtl92c_phy_rf_serial_write); > > u32 _rtl92c_phy_calculate_bit_shift(u32 bitmask) > { > - u32 i; > + u32 i = ffs(bitmask); > > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > - return i; > + return i ? i - 1 : 32; > } > EXPORT_SYMBOL(_rtl92c_phy_calculate_bit_shift); > > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c > index 667578087af2..db4f8fde0f17 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c > @@ -162,14 +162,9 @@ static u32 targetchnl_2g[TARGET_CHNL_NUM_2G] = { > > static u32 _rtl92d_phy_calculate_bit_shift(u32 bitmask) > { > - u32 i; > - > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > + u32 i = ffs(bitmask); > > - return i; > + return i ? i - 1 : 32; > } > > u32 rtl92d_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask) > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/phy.c > index 222abc41669c..420f4984bfb9 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/phy.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/phy.c > @@ -206,13 +206,9 @@ static void _rtl92ee_phy_rf_serial_write(struct ieee80211_hw *hw, > > static u32 _rtl92ee_phy_calculate_bit_shift(u32 bitmask) > { > - u32 i; > + u32 i = ffs(bitmask); > > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > - return i; > + return i ? i - 1 : 32; > } > > bool rtl92ee_phy_mac_config(struct ieee80211_hw *hw) > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/phy.c > index d5c0eb462315..9696fa3a08d9 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/phy.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/phy.c > @@ -16,14 +16,9 @@ > > static u32 _rtl92s_phy_calculate_bit_shift(u32 bitmask) > { > - u32 i; > - > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > + u32 i = ffs(bitmask); > > - return i; > + return i ? i - 1 : 32; > } > > u32 rtl92s_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask) > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723com/phy_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723com/phy_common.c > index aae14c68bf69..964292e82636 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723com/phy_common.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723com/phy_common.c > @@ -53,13 +53,9 @@ EXPORT_SYMBOL_GPL(rtl8723_phy_set_bb_reg); > > u32 rtl8723_phy_calculate_bit_shift(u32 bitmask) > { > - u32 i; > + u32 i = ffs(bitmask); > > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > - return i; > + return i ? i - 1 : 32; > } > EXPORT_SYMBOL_GPL(rtl8723_phy_calculate_bit_shift); > > diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c > index 8647db044366..11f31d006280 100644 > --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c > +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c > @@ -27,7 +27,12 @@ static u32 _rtl8821ae_phy_rf_serial_read(struct ieee80211_hw *hw, > static void _rtl8821ae_phy_rf_serial_write(struct ieee80211_hw *hw, > enum radio_path rfpath, u32 offset, > u32 data); > -static u32 _rtl8821ae_phy_calculate_bit_shift(u32 bitmask); > +static u32 _rtl8821ae_phy_calculate_bit_shift(u32 bitmask) > +{ > + u32 i = ffs(bitmask); > + > + return i ? i - 1 : 32; > +} > static bool _rtl8821ae_phy_bb8821a_config_parafile(struct ieee80211_hw *hw); > /*static bool _rtl8812ae_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);*/ > static bool _rtl8821ae_phy_config_mac_with_headerfile(struct ieee80211_hw *hw); > @@ -274,17 +279,6 @@ static void _rtl8821ae_phy_rf_serial_write(struct ieee80211_hw *hw, > rfpath, pphyreg->rf3wire_offset, data_and_addr); > } > > -static u32 _rtl8821ae_phy_calculate_bit_shift(u32 bitmask) > -{ > - u32 i; > - > - for (i = 0; i <= 31; i++) { > - if (((bitmask >> i) & 0x1) == 1) > - break; > - } > - return i; > -} > - > bool rtl8821ae_phy_mac_config(struct ieee80211_hw *hw) > { > bool rtstatus = 0;