| From: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Subject: kernel.h: split out COUNT_ARGS() and CONCATENATE() to args.h |
| Date: Wed, 19 Jul 2023 00:11:44 +0300 |
| |
| Patch series "kernel.h: Split out a couple of macros to args.h", v4. |
| |
| There are macros in kernel.h that can be used outside of that header. |
| Split them to args.h and replace open coded variants. |
| |
| |
| This patch (of 4): |
| |
| 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. |
| |
| Link: https://lkml.kernel.org/r/20230718211147.18647-1-andriy.shevchenko@linux.intel.com |
| Link: https://lkml.kernel.org/r/20230718211147.18647-2-andriy.shevchenko@linux.intel.com |
| Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org> |
| Cc: Bjorn Helgaas <bhelgaas@google.com> |
| Acked-by: Bjorn Helgaas <bhelgaas@google.com> [PCI] |
| Cc: Brendan Higgins <brendan.higgins@linux.dev> |
| Cc: Daniel Latypov <dlatypov@google.com> |
| Cc: Dave Hansen <dave.hansen@linux.intel.com> |
| Cc: David Gow <davidgow@google.com> |
| Cc: "H. Peter Anvin" <hpa@zytor.com> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Lorenzo Pieralisi <lpieralisi@kernel.org> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org> |
| Cc: Shuah Khan <skhan@linuxfoundation.org> |
| Cc: Sudeep Holla <sudeep.holla@arm.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| 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(-) |
| |
| --- a/include/kunit/test.h~kernelh-split-out-count_args-and-concatenate-to-argsh |
| +++ a/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> |
| --- /dev/null |
| +++ a/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 */ |
| --- a/include/linux/kernel.h~kernelh-split-out-count_args-and-concatenate-to-argsh |
| +++ a/include/linux/kernel.h |
| @@ -457,13 +457,6 @@ ftrace_vprintk(const char *fmt, va_list |
| 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 |
| --- a/include/linux/pci.h~kernelh-split-out-count_args-and-concatenate-to-argsh |
| +++ a/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> |
| --- a/include/trace/bpf_probe.h~kernelh-split-out-count_args-and-concatenate-to-argsh |
| +++ a/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, \ |
| _ |