2023-06-09 12:17:13

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] rcuscale: fix building with RCU_TINY

From: Arnd Bergmann <[email protected]>

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 <[email protected]>
---
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



2023-06-09 23:02:09

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH] rcuscale: fix building with RCU_TINY

On Fri, Jun 09, 2023 at 02:05:14PM +0200, Arnd Bergmann wrote:
> From: Arnd Bergmann <[email protected]>
>
> 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 <[email protected]>

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
>

2023-06-13 15:01:07

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH] rcuscale: fix building with RCU_TINY

Paul-

On 6/9/23 15:51, Paul E. McKenney wrote:
> On Fri, Jun 09, 2023 at 02:05:14PM +0200, Arnd Bergmann wrote:
>> From: Arnd Bergmann <[email protected]>
>>
>> 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 <[email protected]>
>
> Queued and pushed, thank you!
>
> I clearly need to improve my Kconfig coverage here...
>

Pushed where. I'm still seeing this build error in linux-next 20230613.

Thanks.

>
>> ---
>> 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
>>

--
~Randy

2023-06-13 17:14:54

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH] rcuscale: fix building with RCU_TINY

On Tue, Jun 13, 2023 at 07:42:17AM -0700, Randy Dunlap wrote:
> Paul-
>
> On 6/9/23 15:51, Paul E. McKenney wrote:
> > On Fri, Jun 09, 2023 at 02:05:14PM +0200, Arnd Bergmann wrote:
> >> From: Arnd Bergmann <[email protected]>
> >>
> >> 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 <[email protected]>
> >
> > Queued and pushed, thank you!
> >
> > I clearly need to improve my Kconfig coverage here...
>
> Pushed where. I'm still seeing this build error in linux-next 20230613.

To rcu/dev. There have been some testing bottlenecks, but it should
reach rcu/next soon.

Thanx, Paul

> Thanks.
>
> >
> >> ---
> >> 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
> >>
>
> --
> ~Randy