• Arnd Bergmann's avatar
    wifi: mac80211: avoid u32_encode_bits() warning · 1d8d4af4
    Arnd Bergmann authored
    gcc-9 triggers a false-postive warning in ieee80211_mlo_multicast_tx()
    for u32_encode_bits(ffs(links) - 1, ...), since ffs() can return zero
    on an empty bitmask, and the negative argument to u32_encode_bits()
    is then out of range:
    
    In file included from include/linux/ieee80211.h:21,
                     from include/net/cfg80211.h:23,
                     from net/mac80211/tx.c:23:
    In function 'u32_encode_bits',
        inlined from 'ieee80211_mlo_multicast_tx' at net/mac80211/tx.c:4437:17,
        inlined from 'ieee80211_subif_start_xmit' at net/mac80211/tx.c:4485:3:
    include/linux/bitfield.h:177:3: error: call to '__field_overflow' declared with attribute error: value doesn't fit into mask
      177 |   __field_overflow();     \
          |   ^~~~~~~~~~~~~~~~~~
    include/linux/bitfield.h:197:2: note: in expansion of macro '____MAKE_OP'
      197 |  ____MAKE_OP(u##size,u##size,,)
          |  ^~~~~~~~~~~
    include/linux/bitfield.h:200:1: note: in expansion of macro '__MAKE_OP'
      200 | __MAKE_OP(32)
          | ^~~~~~~~~
    
    Newer compiler versions do not cause problems with the zero argument
    because they do not consider this a __builtin_constant_p().
    It's also harmless since the hweight16() check already guarantees
    that this cannot be 0.
    
    Replace the ffs() with an equivalent find_first_bit() check that
    matches the later for_each_set_bit() style and avoids the warning.
    
    Fixes: 963d0e8d ("wifi: mac80211: optionally implement MLO multicast TX")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20230214132025.1532147-1-arnd@kernel.orgSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    1d8d4af4
tx.c 161 KB