All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
@ 2019-01-16  6:03 Nathan Chancellor
  2019-01-16  6:42 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 6+ messages in thread
From: Nathan Chancellor @ 2019-01-16  6:03 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: devel, linux-kernel, Nick Desaulniers, Nathan Chancellor

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 __always_inline' to ensure
that these functions are always inlined. Some alternative solutions
included 'extern __always_inline' or converting these functions to
macros (so the preprocessor deals with them) but I would argue this is
the more "standard" solution.

Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
---
 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 bcc8dfa8e672..959e822315b5 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 __always_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 __always_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 __always_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.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
  2019-01-16  6:03 [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled Nathan Chancellor
@ 2019-01-16  6:42 ` Greg Kroah-Hartman
  2019-01-16  6:53   ` Nathan Chancellor
  0 siblings, 1 reply; 6+ messages in thread
From: Greg Kroah-Hartman @ 2019-01-16  6:42 UTC (permalink / raw)
  To: Nathan Chancellor; +Cc: devel, Nick Desaulniers, linux-kernel

On Tue, Jan 15, 2019 at 11:03:02PM -0700, Nathan Chancellor wrote:
> 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 __always_inline' to ensure
> that these functions are always inlined. Some alternative solutions
> included 'extern __always_inline' or converting these functions to
> macros (so the preprocessor deals with them) but I would argue this is
> the more "standard" solution.
> 
> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> ---
>  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 bcc8dfa8e672..959e822315b5 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 __always_inline int is_multicast_mac_addr(const u8 *addr)

Ick, really?  This is in a .h file, the .c file sees this, so why isn't
clang picking it up?  Worst case it just makes it a "normal" function
and doesn't inline it, right?

How about just replacing "extern" with "static", that should solve this,
adding "__always_inline" everywhere is not going to be fun and doesn't
make any sense.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
  2019-01-16  6:42 ` Greg Kroah-Hartman
@ 2019-01-16  6:53   ` Nathan Chancellor
  2019-01-16  8:46     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 6+ messages in thread
From: Nathan Chancellor @ 2019-01-16  6:53 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: devel, Nick Desaulniers, linux-kernel

On Wed, Jan 16, 2019 at 07:42:02AM +0100, Greg Kroah-Hartman wrote:
> On Tue, Jan 15, 2019 at 11:03:02PM -0700, Nathan Chancellor wrote:
> > 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 __always_inline' to ensure
> > that these functions are always inlined. Some alternative solutions
> > included 'extern __always_inline' or converting these functions to
> > macros (so the preprocessor deals with them) but I would argue this is
> > the more "standard" solution.
> > 
> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > ---
> >  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 bcc8dfa8e672..959e822315b5 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 __always_inline int is_multicast_mac_addr(const u8 *addr)
> 
> Ick, really?  This is in a .h file, the .c file sees this, so why isn't
> clang picking it up?  Worst case it just makes it a "normal" function
> and doesn't inline it, right?
> 

As I understand it, the meaning of 'extern inline' is basically use this
defintion when inlining, otherwise use one from a different file or
translation unit. See commit d0a8d9378d16 ("x86/paravirt: Make
native_save_fl() extern inline"). These functions don't have any other
declaration/definition so when they aren't inlined, they don't exist.

> How about just replacing "extern" with "static", that should solve this,
> adding "__always_inline" everywhere is not going to be fun and doesn't
> make any sense.
> 

Yes, that would work (and what I originally tested). My assumption with
the code is that it was intended for this function to always be inlined
but if you'd rather it just be 'static', I am happy to send a v2!

> thanks,
> 
> greg k-h

Thanks for the quick reply and review,
Nathan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
  2019-01-16  6:53   ` Nathan Chancellor
@ 2019-01-16  8:46     ` Greg Kroah-Hartman
  2019-01-16 13:19       ` Nathan Chancellor
  0 siblings, 1 reply; 6+ messages in thread
From: Greg Kroah-Hartman @ 2019-01-16  8:46 UTC (permalink / raw)
  To: Nathan Chancellor; +Cc: devel, Nick Desaulniers, linux-kernel

On Tue, Jan 15, 2019 at 11:53:40PM -0700, Nathan Chancellor wrote:
> On Wed, Jan 16, 2019 at 07:42:02AM +0100, Greg Kroah-Hartman wrote:
> > On Tue, Jan 15, 2019 at 11:03:02PM -0700, Nathan Chancellor wrote:
> > > 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 __always_inline' to ensure
> > > that these functions are always inlined. Some alternative solutions
> > > included 'extern __always_inline' or converting these functions to
> > > macros (so the preprocessor deals with them) but I would argue this is
> > > the more "standard" solution.
> > > 
> > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > > ---
> > >  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 bcc8dfa8e672..959e822315b5 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 __always_inline int is_multicast_mac_addr(const u8 *addr)
> > 
> > Ick, really?  This is in a .h file, the .c file sees this, so why isn't
> > clang picking it up?  Worst case it just makes it a "normal" function
> > and doesn't inline it, right?
> > 
> 
> As I understand it, the meaning of 'extern inline' is basically use this
> defintion when inlining, otherwise use one from a different file or
> translation unit. See commit d0a8d9378d16 ("x86/paravirt: Make
> native_save_fl() extern inline"). These functions don't have any other
> declaration/definition so when they aren't inlined, they don't exist.
> 
> > How about just replacing "extern" with "static", that should solve this,
> > adding "__always_inline" everywhere is not going to be fun and doesn't
> > make any sense.
> > 
> 
> Yes, that would work (and what I originally tested). My assumption with
> the code is that it was intended for this function to always be inlined
> but if you'd rather it just be 'static', I am happy to send a v2!

This code is not trying to be that smart, someone just put the extern in
there without realizing it.  So making it static is the correct fix, so
a v2 would be great.

Odds are, almost all other places in the kernel that you hit with this
also needs the same fixup, no need to be fancy here :)

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
  2019-01-16  8:46     ` Greg Kroah-Hartman
@ 2019-01-16 13:19       ` Nathan Chancellor
  2019-01-16 15:44         ` Greg Kroah-Hartman
  0 siblings, 1 reply; 6+ messages in thread
From: Nathan Chancellor @ 2019-01-16 13:19 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: devel, Nick Desaulniers, linux-kernel

On Wed, Jan 16, 2019 at 09:46:58AM +0100, Greg Kroah-Hartman wrote:
> On Tue, Jan 15, 2019 at 11:53:40PM -0700, Nathan Chancellor wrote:
> > On Wed, Jan 16, 2019 at 07:42:02AM +0100, Greg Kroah-Hartman wrote:
> > > On Tue, Jan 15, 2019 at 11:03:02PM -0700, Nathan Chancellor wrote:
> > > > 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 __always_inline' to ensure
> > > > that these functions are always inlined. Some alternative solutions
> > > > included 'extern __always_inline' or converting these functions to
> > > > macros (so the preprocessor deals with them) but I would argue this is
> > > > the more "standard" solution.
> > > > 
> > > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > > > ---
> > > >  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 bcc8dfa8e672..959e822315b5 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 __always_inline int is_multicast_mac_addr(const u8 *addr)
> > > 
> > > Ick, really?  This is in a .h file, the .c file sees this, so why isn't
> > > clang picking it up?  Worst case it just makes it a "normal" function
> > > and doesn't inline it, right?
> > > 
> > 
> > As I understand it, the meaning of 'extern inline' is basically use this
> > defintion when inlining, otherwise use one from a different file or
> > translation unit. See commit d0a8d9378d16 ("x86/paravirt: Make
> > native_save_fl() extern inline"). These functions don't have any other
> > declaration/definition so when they aren't inlined, they don't exist.
> > 
> > > How about just replacing "extern" with "static", that should solve this,
> > > adding "__always_inline" everywhere is not going to be fun and doesn't
> > > make any sense.
> > > 
> > 
> > Yes, that would work (and what I originally tested). My assumption with
> > the code is that it was intended for this function to always be inlined
> > but if you'd rather it just be 'static', I am happy to send a v2!
> 
> This code is not trying to be that smart, someone just put the extern in
> there without realizing it.  So making it static is the correct fix, so
> a v2 would be great.
> 

Done!

> Odds are, almost all other places in the kernel that you hit with this
> also needs the same fixup, no need to be fancy here :)
> 

Thankfully, with arm, arm64, and x86_64, there was only one other place
that where that config caused an error:

https://lore.kernel.org/lkml/20181210234538.5405-1-natechancellor@gmail.com/

> thanks,
> 
> greg k-h

Thanks,
Nathan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled
  2019-01-16 13:19       ` Nathan Chancellor
@ 2019-01-16 15:44         ` Greg Kroah-Hartman
  0 siblings, 0 replies; 6+ messages in thread
From: Greg Kroah-Hartman @ 2019-01-16 15:44 UTC (permalink / raw)
  To: Nathan Chancellor; +Cc: devel, Nick Desaulniers, linux-kernel

On Wed, Jan 16, 2019 at 06:19:37AM -0700, Nathan Chancellor wrote:
> On Wed, Jan 16, 2019 at 09:46:58AM +0100, Greg Kroah-Hartman wrote:
> > On Tue, Jan 15, 2019 at 11:53:40PM -0700, Nathan Chancellor wrote:
> > > On Wed, Jan 16, 2019 at 07:42:02AM +0100, Greg Kroah-Hartman wrote:
> > > > On Tue, Jan 15, 2019 at 11:03:02PM -0700, Nathan Chancellor wrote:
> > > > > 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 __always_inline' to ensure
> > > > > that these functions are always inlined. Some alternative solutions
> > > > > included 'extern __always_inline' or converting these functions to
> > > > > macros (so the preprocessor deals with them) but I would argue this is
> > > > > the more "standard" solution.
> > > > > 
> > > > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
> > > > > ---
> > > > >  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 bcc8dfa8e672..959e822315b5 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 __always_inline int is_multicast_mac_addr(const u8 *addr)
> > > > 
> > > > Ick, really?  This is in a .h file, the .c file sees this, so why isn't
> > > > clang picking it up?  Worst case it just makes it a "normal" function
> > > > and doesn't inline it, right?
> > > > 
> > > 
> > > As I understand it, the meaning of 'extern inline' is basically use this
> > > defintion when inlining, otherwise use one from a different file or
> > > translation unit. See commit d0a8d9378d16 ("x86/paravirt: Make
> > > native_save_fl() extern inline"). These functions don't have any other
> > > declaration/definition so when they aren't inlined, they don't exist.
> > > 
> > > > How about just replacing "extern" with "static", that should solve this,
> > > > adding "__always_inline" everywhere is not going to be fun and doesn't
> > > > make any sense.
> > > > 
> > > 
> > > Yes, that would work (and what I originally tested). My assumption with
> > > the code is that it was intended for this function to always be inlined
> > > but if you'd rather it just be 'static', I am happy to send a v2!
> > 
> > This code is not trying to be that smart, someone just put the extern in
> > there without realizing it.  So making it static is the correct fix, so
> > a v2 would be great.
> > 
> 
> Done!
> 
> > Odds are, almost all other places in the kernel that you hit with this
> > also needs the same fixup, no need to be fancy here :)
> > 
> 
> Thankfully, with arm, arm64, and x86_64, there was only one other place
> that where that config caused an error:
> 
> https://lore.kernel.org/lkml/20181210234538.5405-1-natechancellor@gmail.com/

Ah, that's good, I think the previous cleanups that clang required where
people used "extern inline" for where it wasn't needed at all (no inline
function present), made this much simpler.

I'll go queue this up now, thanks

greg k-h

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-01-16 15:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-16  6:03 [PATCH] staging: rtl8723bs: Fix build error with Clang when inlining is disabled Nathan Chancellor
2019-01-16  6:42 ` Greg Kroah-Hartman
2019-01-16  6:53   ` Nathan Chancellor
2019-01-16  8:46     ` Greg Kroah-Hartman
2019-01-16 13:19       ` Nathan Chancellor
2019-01-16 15:44         ` Greg Kroah-Hartman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.