Hi,

On Thu, Jan 31, 2019 at 08:21:37PM +0800, [email protected] wrote:
> From: Yan-Hsuan Chuang <[email protected]>
> 
> 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 <[email protected]>
> ---
>  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
> 

Reply via email to