2016-03-29 18:14:27

by Denys Vlasenko

[permalink] [raw]
Subject: [PATCH] compiler.h: Provide __always_inline to userspace headers too

Recent change to uapi/linux/swab.h needs this.

Signed-off-by: Denys Vlasenko <[email protected]>
CC: Josh Boyer <[email protected]>
CC: Thomas Graf <[email protected]>
CC: Peter Zijlstra <[email protected]>
CC: David Rientjes <[email protected]>
CC: Arnd Bergmann <[email protected]>
CC: Ingo Molnar <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linus Torvalds <[email protected]>
CC: [email protected]
---
include/linux/compiler.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index b5ff988..2cb6ba4 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -397,12 +397,12 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
*/
#define noinline_for_stack noinline

+#endif /* __KERNEL__ */
+
#ifndef __always_inline
#define __always_inline inline
#endif

-#endif /* __KERNEL__ */
-
/*
* From the GCC manual:
*
--
1.8.1.4


2016-03-29 18:24:00

by Josh Boyer

[permalink] [raw]
Subject: Re: [PATCH] compiler.h: Provide __always_inline to userspace headers too

On Tue, Mar 29, 2016 at 2:14 PM, Denys Vlasenko <[email protected]> wrote:
> Recent change to uapi/linux/swab.h needs this.
>
> Signed-off-by: Denys Vlasenko <[email protected]>
> CC: Josh Boyer <[email protected]>
> CC: Thomas Graf <[email protected]>
> CC: Peter Zijlstra <[email protected]>
> CC: David Rientjes <[email protected]>
> CC: Arnd Bergmann <[email protected]>
> CC: Ingo Molnar <[email protected]>
> CC: Andrew Morton <[email protected]>
> CC: Linus Torvalds <[email protected]>
> CC: [email protected]
> ---
> include/linux/compiler.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/compiler.h b/include/linux/compiler.h
> index b5ff988..2cb6ba4 100644
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -397,12 +397,12 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
> */
> #define noinline_for_stack noinline
>
> +#endif /* __KERNEL__ */
> +
> #ifndef __always_inline
> #define __always_inline inline
> #endif
>
> -#endif /* __KERNEL__ */
> -

Did you test this by installing the headers with 'make
headers-install' and trying to build something with the newly
installed headers? As I said in my other email, I don't see how
changes to this particular file are reflected in anything that gets
installed in /usr/include by the uapi mechanism.

josh

2016-03-29 18:30:47

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] compiler.h: Provide __always_inline to userspace headers too

On Tue, 29 Mar 2016 14:23:57 -0400 Josh Boyer <[email protected]> wrote:

> On Tue, Mar 29, 2016 at 2:14 PM, Denys Vlasenko <[email protected]> wrote:
> > Recent change to uapi/linux/swab.h needs this.
> >
> > Signed-off-by: Denys Vlasenko <[email protected]>
> > CC: Josh Boyer <[email protected]>
> > CC: Thomas Graf <[email protected]>
> > CC: Peter Zijlstra <[email protected]>
> > CC: David Rientjes <[email protected]>
> > CC: Arnd Bergmann <[email protected]>
> > CC: Ingo Molnar <[email protected]>
> > CC: Andrew Morton <[email protected]>
> > CC: Linus Torvalds <[email protected]>
> > CC: [email protected]
> > ---
> > include/linux/compiler.h | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/linux/compiler.h b/include/linux/compiler.h
> > index b5ff988..2cb6ba4 100644
> > --- a/include/linux/compiler.h
> > +++ b/include/linux/compiler.h
> > @@ -397,12 +397,12 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
> > */
> > #define noinline_for_stack noinline
> >
> > +#endif /* __KERNEL__ */
> > +
> > #ifndef __always_inline
> > #define __always_inline inline
> > #endif
> >
> > -#endif /* __KERNEL__ */
> > -
>
> Did you test this by installing the headers with 'make
> headers-install' and trying to build something with the newly
> installed headers? As I said in my other email, I don't see how
> changes to this particular file are reflected in anything that gets
> installed in /usr/include by the uapi mechanism.

include/uapi/linux/swab.h already had __attribute_const__ and that
worked OK so presumably treating __always_inline in the same fashion
will also work. But yes, testing please.



Also, more care with the changelogs please. "Recent change" is
uselessly vague, and Josh kindly reported the regression, so...


From: Denys Vlasenko <[email protected]>
Subject: compiler.h: provide __always_inline to userspace headers too

Recent change to uapi/linux/swab.h needs this.

In file included from test.c:2:0:
/usr/include/linux/swab.h:154:8: error: unknown type name `__always_inline'
static __always_inline __u16 __swab16p(const __u16 *p)
^~~~~~~~~~~~~~~

Fixes: bc27fb68aaad4 ("include/uapi/linux/byteorder, swab: force inlining of some byteswap operations")
Signed-off-by: Denys Vlasenko <[email protected]>
Reported-by: Josh Boyer <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
---

include/linux/compiler.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff -puN include/linux/compiler.h~compilerh-provide-__always_inline-to-userspace-headers-too include/linux/compiler.h
--- a/include/linux/compiler.h~compilerh-provide-__always_inline-to-userspace-headers-too
+++ a/include/linux/compiler.h
@@ -397,12 +397,12 @@ static __always_inline void __write_once
*/
#define noinline_for_stack noinline

+#endif /* __KERNEL__ */
+
#ifndef __always_inline
#define __always_inline inline
#endif

-#endif /* __KERNEL__ */
-
/*
* From the GCC manual:
*
_

2016-03-29 18:35:44

by Denys Vlasenko

[permalink] [raw]
Subject: Re: [PATCH] compiler.h: Provide __always_inline to userspace headers too

On 03/29/2016 08:23 PM, Josh Boyer wrote:
> On Tue, Mar 29, 2016 at 2:14 PM, Denys Vlasenko <[email protected]> wrote:
>> Recent change to uapi/linux/swab.h needs this.
>>
>> Signed-off-by: Denys Vlasenko <[email protected]>
>> CC: Josh Boyer <[email protected]>
>> CC: Thomas Graf <[email protected]>
>> CC: Peter Zijlstra <[email protected]>
>> CC: David Rientjes <[email protected]>
>> CC: Arnd Bergmann <[email protected]>
>> CC: Ingo Molnar <[email protected]>
>> CC: Andrew Morton <[email protected]>
>> CC: Linus Torvalds <[email protected]>
>> CC: [email protected]
>> ---
>> include/linux/compiler.h | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/linux/compiler.h b/include/linux/compiler.h
>> index b5ff988..2cb6ba4 100644
>> --- a/include/linux/compiler.h
>> +++ b/include/linux/compiler.h
>> @@ -397,12 +397,12 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
>> */
>> #define noinline_for_stack noinline
>>
>> +#endif /* __KERNEL__ */
>> +
>> #ifndef __always_inline
>> #define __always_inline inline
>> #endif
>>
>> -#endif /* __KERNEL__ */
>> -
>
> Did you test this by installing the headers with 'make
> headers-install' and trying to build something with the newly
> installed headers? As I said in my other email, I don't see how
> changes to this particular file are reflected in anything that gets
> installed in /usr/include by the uapi mechanism.

You're right, #include <linux/compiler.h> gets erased in the installed headers:

headers_install.sh
...
sed -r \
-e 's/([ \t(])(__user|__force|__iomem)[ \t]/\1/g' \
-e 's/__attribute_const__([ \t]|$)/\1/g' \
-e 's@^#include <linux/compiler.h>@@' \
...

Need another location for this fix. How about uapi/linux/stddef.h ?
Currently it has just one line:

#include <linux/compiler.h>

(which gets dutifully yanked off by the install script, leaving empty file...)
Can we place

#ifndef __always_inline
#define __always_inline inline
#endif

here?