> -----Original Message----- > From: Su Hui <suhui@xxxxxxxxxxxx> > Sent: Monday, November 27, 2023 9:35 AM > To: Ping-Ke Shih <pkshih@xxxxxxxxxxx>; dan.carpenter@xxxxxxxxxx; kvalo@xxxxxxxxxx; nathan@xxxxxxxxxx; > ndesaulniers@xxxxxxxxxx; trix@xxxxxxxxxx > Cc: Su Hui <suhui@xxxxxxxxxxxx>; lizetao1@xxxxxxxxxx; linville@xxxxxxxxxxxxx; Larry.Finger@xxxxxxxxxxxx; > linux-wireless@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; llvm@xxxxxxxxxxxxxxx; > kernel-janitors@xxxxxxxxxxxxxxx > Subject: [PATCH wireless-next v3 2/2] wifi: rtlwifi: rtl8821ae: phy: fix an undefined bitwise shift behavior > > Clang staic checker warning: > drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c:184:49: > The result of the left shift is undefined due to shifting by '32', > which is greater or equal to the width of type 'u32'. > [core.UndefinedBinaryOperatorResult] > > If the value of the right operand is negative or is greater than or > equal to the width of the promoted left operand, the behavior is > undefined.[1][2] > > For example, when using different gcc's compilation optimizaation options > (-O0 or -O2), the result of '(u32)data << 32' is different. One is 0, the > other is old value of data. Let _rtl8821ae_phy_calculate_bit_shift()'s > return value less than 32 to fix this problem. Warn if bitmask is zero. > > [1]:https://stackoverflow.com/questions/11270492/what-does-the-c- > standard-say-about-bitshifting-more-bits-than-the-width-of-type > [2]:https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf > > Fixes: 21e4b0726dc6 ("rtlwifi: rtl8821ae: Move driver from staging to regular tree") > Signed-off-by: Su Hui <suhui@xxxxxxxxxxxx> Acked-by: Ping-Ke Shih <pkshih@xxxxxxxxxxx> > + if (WARN_ON_ONCE(!bitmask)) I test this patch with real hardware to connect 2GHz and 5GHz AP respectively and keep ping for a while. It doesn't throw warning by this statement.