lkml.org 
[lkml]   [2019]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 33/78] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit 97715058b70da1262fd07798c8b2e3e894f759dd ]

    When CONFIG_NO_AUTO_INLINE was present in linux-next (which added
    '-fno-inline-functions' to KBUILD_CFLAGS), an allyesconfig build with
    Clang failed at the modpost stage:

    ERROR: "is_broadcast_mac_addr" [drivers/staging/rtl8723bs/r8723bs.ko] undefined!
    ERROR: "is_zero_mac_addr" [drivers/staging/rtl8723bs/r8723bs.ko] undefined!
    ERROR: "is_multicast_mac_addr" [drivers/staging/rtl8723bs/r8723bs.ko] undefined!

    These functions were marked as extern inline, meaning that if inlining
    doesn't happen, the function will be undefined, as it is above.

    This happens to work with GCC because the '-fno-inline-functions' option
    respects the __inline attribute so all instances of these functions are
    inlined as expected and the definition doesn't actually matter. However,
    with Clang and '-fno-inline-functions', a function has to be marked with
    the __always_inline attribute to be considered for inlining, which none
    of these functions are. Clang tries to find the symbol definition
    elsewhere as it was told and fails, which trickles down to modpost.

    To make sure that this code compiles regardless of compiler and make the
    intention of the code clearer, use 'static' to ensure these functions
    are always defined, regardless of inlining. Additionally, silence a
    checkpatch warning by switching from '__inline' to 'inline'.

    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/staging/rtl8723bs/include/ieee80211.h | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    diff --git a/drivers/staging/rtl8723bs/include/ieee80211.h b/drivers/staging/rtl8723bs/include/ieee80211.h
    index bcc8dfa8e6728..9efb4dcb9d3a8 100644
    --- a/drivers/staging/rtl8723bs/include/ieee80211.h
    +++ b/drivers/staging/rtl8723bs/include/ieee80211.h
    @@ -850,18 +850,18 @@ enum ieee80211_state {
    #define IP_FMT "%pI4"
    #define IP_ARG(x) (x)

    -extern __inline int is_multicast_mac_addr(const u8 *addr)
    +static inline int is_multicast_mac_addr(const u8 *addr)
    {
    return ((addr[0] != 0xff) && (0x01 & addr[0]));
    }

    -extern __inline int is_broadcast_mac_addr(const u8 *addr)
    +static inline int is_broadcast_mac_addr(const u8 *addr)
    {
    return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
    (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
    }

    -extern __inline int is_zero_mac_addr(const u8 *addr)
    +static inline int is_zero_mac_addr(const u8 *addr)
    {
    return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
    (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-03-04 09:45    [W:4.119 / U:0.404 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site