include/linux/compiler.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
Use auto type deduction and comma expression to decrease macro expansion
size.
__unqual_scalar_typeof() is quite wordy macro by itself.
"expr" can be arbitrary complex so not expanding it twice is good.
Should be faster too because type is deduced only once
from the initializer.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
include/linux/compiler.h | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -200,10 +200,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
*/
#define data_race(expr) \
({ \
- __unqual_scalar_typeof(({ expr; })) __v = ({ \
- __kcsan_disable_current(); \
- expr; \
- }); \
+ __auto_type __v = (__kcsan_disable_current(), expr); \
__kcsan_enable_current(); \
__v; \
})
On Mon, 24 Jun 2024 at 13:49, Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
> Use auto type deduction and comma expression to decrease macro expansion
> size.
>
> __unqual_scalar_typeof() is quite wordy macro by itself.
>
> "expr" can be arbitrary complex so not expanding it twice is good.
> Should be faster too because type is deduced only once
> from the initializer.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Thanks for cleaning up. That code certainly predates the availability
of __auto_type. Although if I recall correctly, __unqual_scalar_typeof
became the first user of _Generic (the first C11 keyword we used in
the kernel?), but we used some ifdef to still support ancient
compilers initially (that definitely also didn't have __auto_type).
Reviewed-by: Marco Elver <elver@google.com>
Which tree is this for?
> ---
>
> include/linux/compiler.h | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -200,10 +200,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> */
> #define data_race(expr) \
> ({ \
> - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> - __kcsan_disable_current(); \
> - expr; \
> - }); \
> + __auto_type __v = (__kcsan_disable_current(), expr); \
> __kcsan_enable_current(); \
> __v; \
> })
On Mon, Jun 24, 2024 at 02:27:43PM +0200, Marco Elver wrote:
> On Mon, 24 Jun 2024 at 13:49, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> >
> > Use auto type deduction and comma expression to decrease macro expansion
> > size.
> >
> > __unqual_scalar_typeof() is quite wordy macro by itself.
> >
> > "expr" can be arbitrary complex so not expanding it twice is good.
> > Should be faster too because type is deduced only once
> > from the initializer.
> >
> > Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
>
> Thanks for cleaning up. That code certainly predates the availability
> of __auto_type. Although if I recall correctly, __unqual_scalar_typeof
> became the first user of _Generic (the first C11 keyword we used in
> the kernel?), but we used some ifdef to still support ancient
> compilers initially (that definitely also didn't have __auto_type).
>
> Reviewed-by: Marco Elver <elver@google.com>
>
> Which tree is this for?
>
> > ---
> >
> > include/linux/compiler.h | 5 +----
> > 1 file changed, 1 insertion(+), 4 deletions(-)
> >
> > --- a/include/linux/compiler.h
> > +++ b/include/linux/compiler.h
> > @@ -200,10 +200,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> > */
> > #define data_race(expr) \
> > ({ \
> > - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> > - __kcsan_disable_current(); \
> > - expr; \
> > - }); \
> > + __auto_type __v = (__kcsan_disable_current(), expr); \
> > __kcsan_enable_current(); \
> > __v; \
> > })
I just realized, comma expression should not be necesary.
-Wdeclaration-after-statement prohibited simple
({
__kcsan_disable_current
auto v = (expr);
__kcsan_enable_current
v;
})
On Mon, 24 Jun 2024 at 16:43, Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
> On Mon, Jun 24, 2024 at 02:27:43PM +0200, Marco Elver wrote:
> > On Mon, 24 Jun 2024 at 13:49, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> > >
> > > Use auto type deduction and comma expression to decrease macro expansion
> > > size.
> > >
> > > __unqual_scalar_typeof() is quite wordy macro by itself.
> > >
> > > "expr" can be arbitrary complex so not expanding it twice is good.
> > > Should be faster too because type is deduced only once
> > > from the initializer.
> > >
> > > Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> >
> > Thanks for cleaning up. That code certainly predates the availability
> > of __auto_type. Although if I recall correctly, __unqual_scalar_typeof
> > became the first user of _Generic (the first C11 keyword we used in
> > the kernel?), but we used some ifdef to still support ancient
> > compilers initially (that definitely also didn't have __auto_type).
> >
> > Reviewed-by: Marco Elver <elver@google.com>
> >
> > Which tree is this for?
> >
> > > ---
> > >
> > > include/linux/compiler.h | 5 +----
> > > 1 file changed, 1 insertion(+), 4 deletions(-)
> > >
> > > --- a/include/linux/compiler.h
> > > +++ b/include/linux/compiler.h
> > > @@ -200,10 +200,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> > > */
> > > #define data_race(expr) \
> > > ({ \
> > > - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> > > - __kcsan_disable_current(); \
> > > - expr; \
> > > - }); \
> > > + __auto_type __v = (__kcsan_disable_current(), expr); \
> > > __kcsan_enable_current(); \
> > > __v; \
> > > })
>
> I just realized, comma expression should not be necesary.
> -Wdeclaration-after-statement prohibited simple
>
> ({
> __kcsan_disable_current
> auto v = (expr);
> __kcsan_enable_current
> v;
> })
Even better.
-Wdeclaration-after-statement used since forever required statement
expressions to inject __kcsan_disable_current(), __kcsan_enable_current()
to mark data race. Now that it is gone, make macro expansion simpler.
__unqual_scalar_typeof() is wordy macro by itself.
"expr" is expanded twice.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
include/linux/compiler.h | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -200,10 +200,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
*/
#define data_race(expr) \
({ \
- __unqual_scalar_typeof(({ expr; })) __v = ({ \
- __kcsan_disable_current(); \
- expr; \
- }); \
+ __kcsan_disable_current(); \
+ __auto_type __v = (expr); \
__kcsan_enable_current(); \
__v; \
})
From: Alexey Dobriyan
> Sent: 24 June 2024 16:40
>
> -Wdeclaration-after-statement used since forever required statement
> expressions to inject __kcsan_disable_current(), __kcsan_enable_current()
> to mark data race. Now that it is gone, make macro expansion simpler.
>
> __unqual_scalar_typeof() is wordy macro by itself.
> "expr" is expanded twice.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> ---
>
> include/linux/compiler.h | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -200,10 +200,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> */
> #define data_race(expr) \
> ({ \
> - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> - __kcsan_disable_current(); \
> - expr; \
> - }); \
> + __kcsan_disable_current(); \
> + __auto_type __v = (expr); \
> __kcsan_enable_current(); \
> __v; \
> })
I think you can remove a lot of the tabs...
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
On Mon, 24 Jun 2024 at 17:39, Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
> -Wdeclaration-after-statement used since forever required statement
> expressions to inject __kcsan_disable_current(), __kcsan_enable_current()
> to mark data race. Now that it is gone, make macro expansion simpler.
>
> __unqual_scalar_typeof() is wordy macro by itself.
> "expr" is expanded twice.
>
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Reviewed-by: Marco Elver <elver@google.com>
> ---
>
> include/linux/compiler.h | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -200,10 +200,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> */
> #define data_race(expr) \
> ({ \
> - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> - __kcsan_disable_current(); \
> - expr; \
> - }); \
> + __kcsan_disable_current(); \
> + __auto_type __v = (expr); \
> __kcsan_enable_current(); \
> __v; \
> })
On Mon, Jun 24, 2024 at 02:27:43PM +0200, Marco Elver wrote:
> On Mon, 24 Jun 2024 at 13:49, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> >
> > Use auto type deduction and comma expression to decrease macro expansion
> > size.
> >
> > __unqual_scalar_typeof() is quite wordy macro by itself.
> >
> > "expr" can be arbitrary complex so not expanding it twice is good.
> > Should be faster too because type is deduced only once
> > from the initializer.
> >
> > Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
>
> Thanks for cleaning up. That code certainly predates the availability
> of __auto_type. Although if I recall correctly, __unqual_scalar_typeof
> became the first user of _Generic (the first C11 keyword we used in
> the kernel?), but we used some ifdef to still support ancient
> compilers initially (that definitely also didn't have __auto_type).
>
> Reviewed-by: Marco Elver <elver@google.com>
>
> Which tree is this for?
This is against mainline. Should not really matter, -next has the same code.
> > --- a/include/linux/compiler.h
> > +++ b/include/linux/compiler.h
> > @@ -200,10 +200,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> > */
> > #define data_race(expr) \
> > ({ \
> > - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> > - __kcsan_disable_current(); \
> > - expr; \
> > - }); \
> > + __auto_type __v = (__kcsan_disable_current(), expr); \
> > __kcsan_enable_current(); \
> > __v; \
> > })
On Mon, 24 Jun 2024 at 16:38, Alexey Dobriyan <adobriyan@gmail.com> wrote:
>
> On Mon, Jun 24, 2024 at 02:27:43PM +0200, Marco Elver wrote:
> > On Mon, 24 Jun 2024 at 13:49, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> > >
> > > Use auto type deduction and comma expression to decrease macro expansion
> > > size.
> > >
> > > __unqual_scalar_typeof() is quite wordy macro by itself.
> > >
> > > "expr" can be arbitrary complex so not expanding it twice is good.
> > > Should be faster too because type is deduced only once
> > > from the initializer.
> > >
> > > Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
> >
> > Thanks for cleaning up. That code certainly predates the availability
> > of __auto_type. Although if I recall correctly, __unqual_scalar_typeof
> > became the first user of _Generic (the first C11 keyword we used in
> > the kernel?), but we used some ifdef to still support ancient
> > compilers initially (that definitely also didn't have __auto_type).
> >
> > Reviewed-by: Marco Elver <elver@google.com>
> >
> > Which tree is this for?
>
> This is against mainline. Should not really matter, -next has the same code.
I meant which maintainer/tree should pick this up?
> > > --- a/include/linux/compiler.h
> > > +++ b/include/linux/compiler.h
> > > @@ -200,10 +200,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,
> > > */
> > > #define data_race(expr) \
> > > ({ \
> > > - __unqual_scalar_typeof(({ expr; })) __v = ({ \
> > > - __kcsan_disable_current(); \
> > > - expr; \
> > > - }); \
> > > + __auto_type __v = (__kcsan_disable_current(), expr); \
> > > __kcsan_enable_current(); \
> > > __v; \
> > > })
© 2016 - 2025 Red Hat, Inc.