A later commit will add a struct irq_work member to struct task_struct, which would require <linux/sched.h> to include the definition of struct irq_work. Thanks to header dependency hell, incudling <linux/irq_work.h> in <linux/sched.h> results in defining inline helpers using not-yet-defined fields (mm_struct, task_struct, various task states...). Break off the definition of struct rcuwait into its own header file. Signed-off-by: Valentin Schneider <vschneid@xxxxxxxxxx> --- include/linux/rcuwait.h | 9 ++------- include/linux/rcuwait_types.h | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 include/linux/rcuwait_types.h diff --git a/include/linux/rcuwait.h b/include/linux/rcuwait.h index 27343424225cf..1f1ca7d38cdf8 100644 --- a/include/linux/rcuwait.h +++ b/include/linux/rcuwait.h @@ -5,17 +5,12 @@ #include <linux/rcupdate.h> #include <linux/sched/signal.h> +#include <linux/rcuwait_types.h> + /* * rcuwait provides a way of blocking and waking up a single * task in an rcu-safe manner. - * - * The only time @task is non-nil is when a user is blocked (or - * checking if it needs to) on a condition, and reset as soon as we - * know that the condition has succeeded and are awoken. */ -struct rcuwait { - struct task_struct __rcu *task; -}; #define __RCUWAIT_INITIALIZER(name) \ { .task = NULL, } diff --git a/include/linux/rcuwait_types.h b/include/linux/rcuwait_types.h new file mode 100644 index 0000000000000..60a4385a2c368 --- /dev/null +++ b/include/linux/rcuwait_types.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_RCUWAIT_TYPES_H_ +#define _LINUX_RCUWAIT_TYPES_H_ + +#include <linux/sched.h> + +/* + * The only time @task is non-nil is when a user is blocked (or + * checking if it needs to) on a condition, and reset as soon as we + * know that the condition has succeeded and are awoken. + */ +struct rcuwait { + struct task_struct __rcu *task; +}; + +#endif -- 2.43.0