Message ID | 20211217144119.2538175-4-anders.roxell@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fix warning and errors on arm built with clang | expand |
On Fri, Dec 17, 2021 at 03:41:16PM +0100, Anders Roxell wrote: > From: Nathan Chancellor <natechancellor@gmail.com> > > commit 6a953dc4dbd1c7057fb765a24f37a5e953c85fb0 upstream. > > A new warning in clang points out when macro expansion might result in a > GNU C statement expression. There is an instance of this in the mwifiex > driver: > > drivers/net/wireless/marvell/mwifiex/cmdevt.c:217:34: warning: '}' and > ')' tokens terminating statement expression appear in different macro > expansion contexts [-Wcompound-token-split-by-macro] > host_cmd->seq_num = cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > drivers/net/wireless/marvell/mwifiex/fw.h:519:46: note: expanded from > macro 'HostCmd_SET_SEQ_NO_BSS_INFO' > (((type) & 0x000f) << 12); } > ^ > > This does not appear to be a real issue. Removing the braces and > replacing them with parentheses will fix the warning and not change the > meaning of the code. > > Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver") > Link: https://github.com/ClangBuiltLinux/linux/issues/1146 > Reported-by: Andy Lavr <andy.lavr@gmail.com> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org> > Signed-off-by: Anders Roxell <anders.roxell@linaro.org> > --- > drivers/net/wireless/marvell/mwifiex/cmdevt.c | 4 ++-- > drivers/net/wireless/marvell/mwifiex/fw.h | 8 ++++---- > 2 files changed, 6 insertions(+), 6 deletions(-) Also needed in 5.4.y, right?
On Fri, 2021-12-17 at 15:41 +0100, Anders Roxell wrote: > From: Nathan Chancellor <natechancellor@gmail.com> > > commit 6a953dc4dbd1c7057fb765a24f37a5e953c85fb0 upstream. > > A new warning in clang points out when macro expansion might result in a > GNU C statement expression. There is an instance of this in the mwifiex > driver: > > drivers/net/wireless/marvell/mwifiex/cmdevt.c:217:34: warning: '}' and > ')' tokens terminating statement expression appear in different macro > expansion contexts [-Wcompound-token-split-by-macro] > host_cmd->seq_num = cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ [] > diff --git a/drivers/net/wireless/marvell/mwifiex/fw.h b/drivers/net/wireless/marvell/mwifiex/fw.h [] > @@ -512,10 +512,10 @@ enum mwifiex_channel_flags { > > #define RF_ANTENNA_AUTO 0xFFFF > > -#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) { \ > - (((seq) & 0x00ff) | \ > - (((num) & 0x000f) << 8)) | \ > - (((type) & 0x000f) << 12); } > +#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) \ > + ((((seq) & 0x00ff) | \ > + (((num) & 0x000f) << 8)) | \ > + (((type) & 0x000f) << 12)) Perhaps this would be better as a static inline static inline u16 HostCmd_SET_SEQ_NO_BSS_INFO(u16 seq, u8 num, u8 type) { return (type & 0x000f) << 12 | (num & 0x000f) << 8 | (seq & 0x00ff); }
From: Joe Perches > Sent: 20 December 2021 12:13 > > On Fri, 2021-12-17 at 15:41 +0100, Anders Roxell wrote: > > From: Nathan Chancellor <natechancellor@gmail.com> > > > > commit 6a953dc4dbd1c7057fb765a24f37a5e953c85fb0 upstream. > > > > A new warning in clang points out when macro expansion might result in a > > GNU C statement expression. There is an instance of this in the mwifiex > > driver: > > > > drivers/net/wireless/marvell/mwifiex/cmdevt.c:217:34: warning: '}' and > > ')' tokens terminating statement expression appear in different macro > > expansion contexts [-Wcompound-token-split-by-macro] > > host_cmd->seq_num = cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO > > ^~~~~~~~~~~~~~~~~~~~~~~~~~~ > [] > > diff --git a/drivers/net/wireless/marvell/mwifiex/fw.h b/drivers/net/wireless/marvell/mwifiex/fw.h > [] > > @@ -512,10 +512,10 @@ enum mwifiex_channel_flags { > > > > #define RF_ANTENNA_AUTO 0xFFFF > > > > -#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) { \ > > - (((seq) & 0x00ff) | \ > > - (((num) & 0x000f) << 8)) | \ > > - (((type) & 0x000f) << 12); } > > +#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) \ > > + ((((seq) & 0x00ff) | \ > > + (((num) & 0x000f) << 8)) | \ > > + (((type) & 0x000f) << 12)) > > Perhaps this would be better as a static inline > > static inline u16 HostCmd_SET_SEQ_NO_BSS_INFO(u16 seq, u8 num, u8 type) > { > return (type & 0x000f) << 12 | (num & 0x000f) << 8 | (seq & 0x00ff); > } Just writing in on one line helps readability! It is also used exactly twice, both with a cpu_to_le16(). I wonder how well the compiler handles that on BE? The #define is more likely to be handled better. I've only made a cursory glance at the code, but I get splitting host_cmd->seq_num into two u8 fields would give better code! David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c index 60db2b969e20..b7ced103b814 100644 --- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c +++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c @@ -324,9 +324,9 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter) adapter->seq_num++; sleep_cfm_buf->seq_num = - cpu_to_le16((HostCmd_SET_SEQ_NO_BSS_INFO + cpu_to_le16(HostCmd_SET_SEQ_NO_BSS_INFO (adapter->seq_num, priv->bss_num, - priv->bss_type))); + priv->bss_type)); mwifiex_dbg(adapter, CMD, "cmd: DNLD_CMD: %#x, act %#x, len %d, seqno %#x\n", diff --git a/drivers/net/wireless/marvell/mwifiex/fw.h b/drivers/net/wireless/marvell/mwifiex/fw.h index 8b9d0809daf6..076ea1c4b921 100644 --- a/drivers/net/wireless/marvell/mwifiex/fw.h +++ b/drivers/net/wireless/marvell/mwifiex/fw.h @@ -512,10 +512,10 @@ enum mwifiex_channel_flags { #define RF_ANTENNA_AUTO 0xFFFF -#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) { \ - (((seq) & 0x00ff) | \ - (((num) & 0x000f) << 8)) | \ - (((type) & 0x000f) << 12); } +#define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) \ + ((((seq) & 0x00ff) | \ + (((num) & 0x000f) << 8)) | \ + (((type) & 0x000f) << 12)) #define HostCmd_GET_SEQ_NO(seq) \ ((seq) & HostCmd_SEQ_NUM_MASK)