On Fri, Jan 10, 2025 at 08:25:53PM -0800, Suren Baghdasaryan wrote: > Move rcuwait struct definition into types.h so that rcuwait can be used > without including rcuwait.h which includes other headers. Without this > change mm_types.h can't use rcuwait due to a the following circular > dependency: > > mm_types.h -> rcuwait.h -> signal.h -> mm_types.h Thanks for including details of motivation for this move :) > > Suggested-by: Matthew Wilcox <willy@xxxxxxxxxxxxx> > Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> > Acked-by: Davidlohr Bueso <dave@xxxxxxxxxxxx> > Acked-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> Acked-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> > --- > include/linux/rcuwait.h | 13 +------------ > include/linux/types.h | 12 ++++++++++++ > 2 files changed, 13 insertions(+), 12 deletions(-) > > diff --git a/include/linux/rcuwait.h b/include/linux/rcuwait.h > index 27343424225c..9ad134a04b41 100644 > --- a/include/linux/rcuwait.h > +++ b/include/linux/rcuwait.h > @@ -4,18 +4,7 @@ > > #include <linux/rcupdate.h> > #include <linux/sched/signal.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; > -}; > +#include <linux/types.h> > > #define __RCUWAIT_INITIALIZER(name) \ > { .task = NULL, } > diff --git a/include/linux/types.h b/include/linux/types.h > index 2d7b9ae8714c..f1356a9a5730 100644 > --- a/include/linux/types.h > +++ b/include/linux/types.h > @@ -248,5 +248,17 @@ typedef void (*swap_func_t)(void *a, void *b, int size); > typedef int (*cmp_r_func_t)(const void *a, const void *b, const void *priv); > typedef int (*cmp_func_t)(const void *a, const void *b); > > +/* > + * 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; > +}; > + > #endif /* __ASSEMBLY__ */ > #endif /* _LINUX_TYPES_H */ > -- > 2.47.1.613.gc27f4b7a9f-goog >