Message ID | 20230718211147.18647-2-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | kernel.h: Split out a couple of macros to args.h | expand |
On Wed, 19 Jul 2023 at 05:11, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote: > > kernel.h is being used as a dump for all kinds of stuff for a long time. > The COUNT_ARGS() and CONCATENATE() macros may be used in some places > without need of the full kernel.h dependency train with it. > > Here is the attempt on cleaning it up by splitting out these macros(). > > While at it, include new header where it's being used. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org> > --- Works fine here. Acked-by: David Gow <davidgow@google.com> # KUnit Cheers, -- David > include/kunit/test.h | 1 + > include/linux/args.h | 28 ++++++++++++++++++++++++++++ > include/linux/kernel.h | 7 ------- > include/linux/pci.h | 2 +- > include/trace/bpf_probe.h | 2 ++ > 5 files changed, 32 insertions(+), 8 deletions(-) > create mode 100644 include/linux/args.h > > diff --git a/include/kunit/test.h b/include/kunit/test.h > index 23120d50499e..107c81431634 100644 > --- a/include/kunit/test.h > +++ b/include/kunit/test.h > @@ -12,6 +12,7 @@ > #include <kunit/assert.h> > #include <kunit/try-catch.h> > > +#include <linux/args.h> > #include <linux/compiler.h> > #include <linux/container_of.h> > #include <linux/err.h> > diff --git a/include/linux/args.h b/include/linux/args.h > new file mode 100644 > index 000000000000..8ff60a54eb7d > --- /dev/null > +++ b/include/linux/args.h > @@ -0,0 +1,28 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > + > +#ifndef _LINUX_ARGS_H > +#define _LINUX_ARGS_H > + > +/* > + * How do these macros work? > + * > + * In __COUNT_ARGS() _0 to _12 are just placeholders from the start > + * in order to make sure _n is positioned over the correct number > + * from 12 to 0 (depending on X, which is a variadic argument list). > + * They serve no purpose other than occupying a position. Since each > + * macro parameter must have a distinct identifier, those identifiers > + * are as good as any. > + * > + * In COUNT_ARGS() we use actual integers, so __COUNT_ARGS() returns > + * that as _n. > + */ > + > +/* This counts to 12. Any more, it will return 13th argument. */ > +#define __COUNT_ARGS(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _n, X...) _n > +#define COUNT_ARGS(X...) __COUNT_ARGS(, ##X, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) > + > +/* Concatenate two parameters, but allow them to be expanded beforehand. */ > +#define __CONCAT(a, b) a ## b > +#define CONCATENATE(a, b) __CONCAT(a, b) > + > +#endif /* _LINUX_ARGS_H */ > diff --git a/include/linux/kernel.h b/include/linux/kernel.h > index 0b00e1aef33d..15d9496db169 100644 > --- a/include/linux/kernel.h > +++ b/include/linux/kernel.h > @@ -419,13 +419,6 @@ ftrace_vprintk(const char *fmt, va_list ap) > static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } > #endif /* CONFIG_TRACING */ > > -/* This counts to 12. Any more, it will return 13th argument. */ > -#define __COUNT_ARGS(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _n, X...) _n > -#define COUNT_ARGS(X...) __COUNT_ARGS(, ##X, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) > - > -#define __CONCAT(a, b) a ## b > -#define CONCATENATE(a, b) __CONCAT(a, b) > - > /* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */ > #ifdef CONFIG_FTRACE_MCOUNT_RECORD > # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD > diff --git a/include/linux/pci.h b/include/linux/pci.h > index 0ff7500772e6..eeb2e6f6130f 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -23,7 +23,7 @@ > #ifndef LINUX_PCI_H > #define LINUX_PCI_H > > - > +#include <linux/args.h> > #include <linux/mod_devicetable.h> > > #include <linux/types.h> > diff --git a/include/trace/bpf_probe.h b/include/trace/bpf_probe.h > index 1f7fc1fc590c..e609cd7da47e 100644 > --- a/include/trace/bpf_probe.h > +++ b/include/trace/bpf_probe.h > @@ -12,6 +12,8 @@ > #undef __perf_task > #define __perf_task(t) (t) > > +#include <linux/args.h> > + > /* cast any integer, pointer, or small struct to u64 */ > #define UINTTYPE(size) \ > __typeof__(__builtin_choose_expr(size == 1, (u8)1, \ > -- > 2.40.0.1.gaa8946217a0b >
On Wed, Jul 19, 2023 at 12:11:44AM +0300, Andy Shevchenko wrote: > kernel.h is being used as a dump for all kinds of stuff for a long time. > The COUNT_ARGS() and CONCATENATE() macros may be used in some places > without need of the full kernel.h dependency train with it. > > Here is the attempt on cleaning it up by splitting out these macros(). > > While at it, include new header where it's being used. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org> Acked-by: Bjorn Helgaas <bhelgaas@google.com> # PCI > diff --git a/include/linux/pci.h b/include/linux/pci.h > index 0ff7500772e6..eeb2e6f6130f 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -23,7 +23,7 @@ > #ifndef LINUX_PCI_H > #define LINUX_PCI_H > > - > +#include <linux/args.h> > #include <linux/mod_devicetable.h> > > #include <linux/types.h> If there's not a reason otherwise, I'd put this in the main list instead of the weirdly separated mod_devicetable.h.
On Tue, Aug 01, 2023 at 04:11:39PM -0500, Bjorn Helgaas wrote: > On Wed, Jul 19, 2023 at 12:11:44AM +0300, Andy Shevchenko wrote: > > kernel.h is being used as a dump for all kinds of stuff for a long time. > > The COUNT_ARGS() and CONCATENATE() macros may be used in some places > > without need of the full kernel.h dependency train with it. > > > > Here is the attempt on cleaning it up by splitting out these macros(). > > > > While at it, include new header where it's being used. > > > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > > Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org> > > Acked-by: Bjorn Helgaas <bhelgaas@google.com> # PCI Thank you! ... > > - > > +#include <linux/args.h> > > #include <linux/mod_devicetable.h> > > > > #include <linux/types.h> > > If there's not a reason otherwise, I'd put this in the main list > instead of the weirdly separated mod_devicetable.h. The idea is to make them alphabetically ordered. currently even main list is a mess. And I have no idea why mod_devicetable.h is so special, a few bus headers (e.g., i2c, spi) consider that just as yet another header while actually ain't using it (in the respective _headers_). That said, I would take the sorting change as a separate one that can be done after this.
diff --git a/include/kunit/test.h b/include/kunit/test.h index 23120d50499e..107c81431634 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -12,6 +12,7 @@ #include <kunit/assert.h> #include <kunit/try-catch.h> +#include <linux/args.h> #include <linux/compiler.h> #include <linux/container_of.h> #include <linux/err.h> diff --git a/include/linux/args.h b/include/linux/args.h new file mode 100644 index 000000000000..8ff60a54eb7d --- /dev/null +++ b/include/linux/args.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _LINUX_ARGS_H +#define _LINUX_ARGS_H + +/* + * How do these macros work? + * + * In __COUNT_ARGS() _0 to _12 are just placeholders from the start + * in order to make sure _n is positioned over the correct number + * from 12 to 0 (depending on X, which is a variadic argument list). + * They serve no purpose other than occupying a position. Since each + * macro parameter must have a distinct identifier, those identifiers + * are as good as any. + * + * In COUNT_ARGS() we use actual integers, so __COUNT_ARGS() returns + * that as _n. + */ + +/* This counts to 12. Any more, it will return 13th argument. */ +#define __COUNT_ARGS(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _n, X...) _n +#define COUNT_ARGS(X...) __COUNT_ARGS(, ##X, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) + +/* Concatenate two parameters, but allow them to be expanded beforehand. */ +#define __CONCAT(a, b) a ## b +#define CONCATENATE(a, b) __CONCAT(a, b) + +#endif /* _LINUX_ARGS_H */ diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 0b00e1aef33d..15d9496db169 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -419,13 +419,6 @@ ftrace_vprintk(const char *fmt, va_list ap) static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } #endif /* CONFIG_TRACING */ -/* This counts to 12. Any more, it will return 13th argument. */ -#define __COUNT_ARGS(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _n, X...) _n -#define COUNT_ARGS(X...) __COUNT_ARGS(, ##X, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) - -#define __CONCAT(a, b) a ## b -#define CONCATENATE(a, b) __CONCAT(a, b) - /* Rebuild everything on CONFIG_FTRACE_MCOUNT_RECORD */ #ifdef CONFIG_FTRACE_MCOUNT_RECORD # define REBUILD_DUE_TO_FTRACE_MCOUNT_RECORD diff --git a/include/linux/pci.h b/include/linux/pci.h index 0ff7500772e6..eeb2e6f6130f 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -23,7 +23,7 @@ #ifndef LINUX_PCI_H #define LINUX_PCI_H - +#include <linux/args.h> #include <linux/mod_devicetable.h> #include <linux/types.h> diff --git a/include/trace/bpf_probe.h b/include/trace/bpf_probe.h index 1f7fc1fc590c..e609cd7da47e 100644 --- a/include/trace/bpf_probe.h +++ b/include/trace/bpf_probe.h @@ -12,6 +12,8 @@ #undef __perf_task #define __perf_task(t) (t) +#include <linux/args.h> + /* cast any integer, pointer, or small struct to u64 */ #define UINTTYPE(size) \ __typeof__(__builtin_choose_expr(size == 1, (u8)1, \