On Fri, Jun 09, 2023 at 02:05:14PM +0200, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > Both the CONFIG_TASKS_RCU and CONFIG_TASKS_RUDE_RCU options > are broken when RCU_TINY is enabled as well, as some functions > are missing a declaration. > > In file included from kernel/rcu/update.c:649: > kernel/rcu/tasks.h:1271:21: error: no previous prototype for 'get_rcu_tasks_rude_gp_kthread' [-Werror=missing-prototypes] > 1271 | struct task_struct *get_rcu_tasks_rude_gp_kthread(void) > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > kernel/rcu/rcuscale.c:330:27: error: 'get_rcu_tasks_rude_gp_kthread' undeclared here (not in a function); did you mean 'get_rcu_tasks_trace_gp_kthread'? > 330 | .rso_gp_kthread = get_rcu_tasks_rude_gp_kthread, > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > | get_rcu_tasks_trace_gp_kthread > > In file included from /home/arnd/arm-soc/kernel/rcu/update.c:649: > kernel/rcu/tasks.h:1113:21: error: no previous prototype for 'get_rcu_tasks_gp_kthread' [-Werror=missing-prototypes] > 1113 | struct task_struct *get_rcu_tasks_gp_kthread(void) > | ^~~~~~~~~~~~~~~~~~~~~~~~ > > Also, building with CONFIG_TASKS_RUDE_RCU but not CONFIG_TASKS_RCU is > broken because of some missing stub functions: > > kernel/rcu/rcuscale.c:322:27: error: 'tasks_scale_read_lock' undeclared here (not in a function); did you mean 'srcu_scale_read_lock'? > 322 | .readlock = tasks_scale_read_lock, > | ^~~~~~~~~~~~~~~~~~~~~ > | srcu_scale_read_lock > kernel/rcu/rcuscale.c:323:27: error: 'tasks_scale_read_unlock' undeclared here (not in a function); did you mean 'srcu_scale_read_unlock'? > 323 | .readunlock = tasks_scale_read_unlock, > | ^~~~~~~~~~~~~~~~~~~~~~~ > | srcu_scale_read_unlock > > Move the declarations outside of the RCU_TINY #ifdef and duplicate the > shared stub functions to address all of the above. > > Fixes: 88d7ff818f0ce ("rcuscale: Add RCU Tasks Rude testing") > Fixes: 755f1c5eb416b ("rcuscale: Measure RCU Tasks Trace grace-period kthread CPU time") > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> Queued and pushed, thank you! I clearly need to improve my Kconfig coverage here... Thanx, Paul > --- > kernel/rcu/rcu.h | 14 ++++++++------ > kernel/rcu/rcuscale.c | 13 +++++++++++-- > 2 files changed, 19 insertions(+), 8 deletions(-) > > diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h > index 9829d8161b213..5befd8780dcd3 100644 > --- a/kernel/rcu/rcu.h > +++ b/kernel/rcu/rcu.h > @@ -505,18 +505,20 @@ void rcu_async_relax(void); > void rcupdate_announce_bootup_oddness(void); > #ifdef CONFIG_TASKS_RCU_GENERIC > void show_rcu_tasks_gp_kthreads(void); > -# ifdef CONFIG_TASKS_RCU > -struct task_struct *get_rcu_tasks_gp_kthread(void); > -# endif // # ifdef CONFIG_TASKS_RCU > -# ifdef CONFIG_TASKS_RUDE_RCU > -struct task_struct *get_rcu_tasks_rude_gp_kthread(void); > -# endif // # ifdef CONFIG_TASKS_RUDE_RCU > #else /* #ifdef CONFIG_TASKS_RCU_GENERIC */ > static inline void show_rcu_tasks_gp_kthreads(void) {} > #endif /* #else #ifdef CONFIG_TASKS_RCU_GENERIC */ > void rcu_request_urgent_qs_task(struct task_struct *t); > #endif /* #else #ifdef CONFIG_TINY_RCU */ > > +#ifdef CONFIG_TASKS_RCU > +struct task_struct *get_rcu_tasks_gp_kthread(void); > +#endif // # ifdef CONFIG_TASKS_RCU > + > +#ifdef CONFIG_TASKS_RUDE_RCU > +struct task_struct *get_rcu_tasks_rude_gp_kthread(void); > +#endif // # ifdef CONFIG_TASKS_RUDE_RCU > + > #define RCU_SCHEDULER_INACTIVE 0 > #define RCU_SCHEDULER_INIT 1 > #define RCU_SCHEDULER_RUNNING 2 > diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c > index 5ce3b4e7ce711..a0eae19007088 100644 > --- a/kernel/rcu/rcuscale.c > +++ b/kernel/rcu/rcuscale.c > @@ -316,11 +316,20 @@ static struct rcu_scale_ops tasks_ops = { > * Definitions for RCU-tasks-rude scalability testing. > */ > > +static int tasks_rude_scale_read_lock(void) > +{ > + return 0; > +} > + > +static void tasks_rude_scale_read_unlock(int idx) > +{ > +} > + > static struct rcu_scale_ops tasks_rude_ops = { > .ptype = RCU_TASKS_RUDE_FLAVOR, > .init = rcu_sync_scale_init, > - .readlock = tasks_scale_read_lock, > - .readunlock = tasks_scale_read_unlock, > + .readlock = tasks_rude_scale_read_lock, > + .readunlock = tasks_rude_scale_read_unlock, > .get_gp_seq = rcu_no_completed, > .gp_diff = rcu_seq_diff, > .async = call_rcu_tasks_rude, > -- > 2.39.2 >