On Thu, Jul 11, 2024 at 02:59:55PM +0200, Valentin Schneider wrote: > 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 Can't we simplu stick this in include/linux/types.h ?