Hi, On Thu, Jan 31, 2019 at 08:21:37PM +0800, yhchuang@xxxxxxxxxxx wrote: > From: Yan-Hsuan Chuang <yhchuang@xxxxxxxxxxx> > > The inlined rtw_write32s_mask has to check range of addr with > BUILD_BUG_ON. But with some variants of gcc version the function might > not get inlined, and it will have no idea to know how to do, then > results in a compile error. Turn it into a macro to make sure the values > are known when compile time. > > Signed-off-by: Yan-Hsuan Chuang <yhchuang@xxxxxxxxxxx> > --- > drivers/net/wireless/realtek/rtw88/rtw8822b.c | 10 ---------- > drivers/net/wireless/realtek/rtw88/rtw8822b.h | 15 +++++++++++++++ > 2 files changed, 15 insertions(+), 10 deletions(-) > ... > diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.h b/drivers/net/wireless/realtek/rtw88/rtw8822b.h > index 311fe8a..4cf193b1 100644 > --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h > +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h > @@ -97,6 +97,21 @@ struct rtw8822b_efuse { > }; > }; > > +static inline void > +_rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data) > +{ > + rtw_write32_mask(rtwdev, addr, mask, data); > + rtw_write32_mask(rtwdev, addr + 0x200, mask, data); > +} > + > +/* 0xC00-0xCFF and 0xE00-0xEFF have the same layout */ Feels like this belongs with _rtw_write32s_mask() now, not here? > +#define rtw_write32s_mask(rtwdev, addr, mask, data) \ > + do { \ > + BUILD_BUG_ON(addr < 0xC00 || addr >= 0xD00); \ You probably want parentheses around the 'addr'. You *probably* won't run into trouble with this particular macro, but if the caller is doing the wrong kinds of comparisons or arithmetic, this might not work they way you want. Brian > + \ > + _rtw_write32s_mask(rtwdev, addr, mask, data); \ > + } while (0) > + > /* phy status page0 */ > #define GET_PHY_STAT_P0_PWDB(phy_stat) \ > le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8)) > -- > 2.7.4 >