* [paulmckrcu:dev 20/22] kernel/rcu/tree.c:2772:59: error: 'struct task_struct' has no member named 'rcu_node_entry'
@ 2026-10-10 9:43 kernel test robot
2026-10-10 19:54 ` Paul E. McKenney
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2026-10-10 9:43 UTC (permalink / raw)
To: Paul E. McKenney; +Cc: oe-kbuild-all
tree: https://github.com/paulmckrcu/linux dev
head: 96aaeadd587ee111e53032f63b93e54a8b476483
commit: 2c4925768252397b03d47704f70891ce2b47e774 [20/22] EXP rcu: Send resched_cpu() to idle CPUs having preempted RCU readers
config: s390-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20261010/202610101152.pcWaETEm-lkp@intel.com/config)
compiler: s390x-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261010/202610101152.pcWaETEm-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202610101152.pcWaETEm-lkp@intel.com/
All errors (new ones prefixed by >>):
kernel/rcu/tree.c: In function 'fqs_slow_task':
>> kernel/rcu/tree.c:2772:59: error: 'struct task_struct' has no member named 'rcu_node_entry'
2772 | if (task_curr(t) || READ_ONCE(rnp->gp_tasks) != &t->rcu_node_entry)
| ^~
In file included from ./include/linux/container_of.h:5,
from ./include/linux/kernel.h:22,
from kernel/rcu/tree.c:21:
kernel/rcu/tree.c: In function 'force_qs_rnp':
>> ./include/linux/container_of.h:8:47: error: 'struct task_struct' has no member named 'rcu_node_entry'
8 | #define typeof_member(T, m) typeof(((T*)0)->m)
| ^~
./include/linux/build_bug.h:80:56: note: in definition of macro '__static_assert'
80 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
| ^~~~
./include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
| ^~~~~~~~~~~~~
./include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
| ^~~~~~~~~~~
./include/linux/container_of.h:20:43: note: in expansion of macro 'typeof_member'
20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
| ^~~~~~~~~~~~~
kernel/rcu/tree.c:2823:37: note: in expansion of macro 'container_of'
2823 | t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
| ^~~~~~~~~~~~
././include/linux/compiler_types.h:610:27: error: expression in static assertion is not an integer
610 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/build_bug.h:80:56: note: in definition of macro '__static_assert'
80 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
| ^~~~
./include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
| ^~~~~~~~~~~~~
./include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
| ^~~~~~~~~~~
kernel/rcu/tree.c:2823:37: note: in expansion of macro 'container_of'
2823 | t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
| ^~~~~~~~~~~~
In file included from ./include/uapi/linux/posix_types.h:5,
from ./include/uapi/linux/types.h:14,
from ./include/linux/types.h:5,
from kernel/rcu/tree.c:20:
>> ./include/linux/stddef.h:16:33: error: 'struct task_struct' has no member named 'rcu_node_entry'
16 | #define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
| ^~~~~~~~~~~~~~~~~~
./include/linux/container_of.h:23:34: note: in expansion of macro 'offsetof'
23 | (type *)((void *)(ptr) - offsetof(type, member)); })
| ^~~~~~~~
kernel/rcu/tree.c:2823:37: note: in expansion of macro 'container_of'
2823 | t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
| ^~~~~~~~~~~~
vim +2772 kernel/rcu/tree.c
2757
2758 // Check to see if a task holding up the current grace period is
2759 // preempted but runnable on an idle CPU. This involves an
2760 // rcu_node structure, a pointer to which is passed to fqs_slow_task()
2761 // as a callback from task_call_func(). The fqs_slow_task()
2762 // function returns the CPU to pass to resched_cpu() or -1 if
2763 // there is no need for an additional call to resched_cpu().
2764 static int fqs_slow_task(struct task_struct *t, void *arg)
2765 {
2766 int cpu;
2767 struct rcu_node *rnp = arg;
2768 struct task_struct *tc;
2769
2770 // If the task is running or is no longer blocking the current
2771 // grace period, there should be no call to resched_cpu().
> 2772 if (task_curr(t) || READ_ONCE(rnp->gp_tasks) != &t->rcu_node_entry)
2773 return -1;
2774
2775 // If the target CPU is not idle, there should be no call to
2776 // resched_cpu().
2777 WARN_ON_ONCE(1); // @@@
2778 cpu = task_cpu(t);
2779 tc = rcu_cpu_curr(cpu);
2780 if (!is_idle_task(tc))
2781 return -1;
2782
2783 // But the target CPU is idle, so resched_cpu() it is!
2784 WARN_ON_ONCE(1); // @@@
2785 return cpu;
2786 }
2787
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [paulmckrcu:dev 20/22] kernel/rcu/tree.c:2772:59: error: 'struct task_struct' has no member named 'rcu_node_entry'
2026-10-10 9:43 [paulmckrcu:dev 20/22] kernel/rcu/tree.c:2772:59: error: 'struct task_struct' has no member named 'rcu_node_entry' kernel test robot
@ 2026-10-10 19:54 ` Paul E. McKenney
0 siblings, 0 replies; 2+ messages in thread
From: Paul E. McKenney @ 2026-10-10 19:54 UTC (permalink / raw)
To: kernel test robot; +Cc: oe-kbuild-all
On Sat, Oct 10, 2026 at 11:43:26AM +0200, kernel test robot wrote:
> tree: https://github.com/paulmckrcu/linux dev
> head: 96aaeadd587ee111e53032f63b93e54a8b476483
> commit: 2c4925768252397b03d47704f70891ce2b47e774 [20/22] EXP rcu: Send resched_cpu() to idle CPUs having preempted RCU readers
> config: s390-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20261010/202610101152.pcWaETEm-lkp@intel.com/config)
> compiler: s390x-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261010/202610101152.pcWaETEm-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202610101152.pcWaETEm-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> kernel/rcu/tree.c: In function 'fqs_slow_task':
> >> kernel/rcu/tree.c:2772:59: error: 'struct task_struct' has no member named 'rcu_node_entry'
Good catch, this experimental patch should handle non-preemptible RCU
despite that not being part of the experiment. Will fix, thank you!
Thanx, Paul
> 2772 | if (task_curr(t) || READ_ONCE(rnp->gp_tasks) != &t->rcu_node_entry)
> | ^~
> In file included from ./include/linux/container_of.h:5,
> from ./include/linux/kernel.h:22,
> from kernel/rcu/tree.c:21:
> kernel/rcu/tree.c: In function 'force_qs_rnp':
> >> ./include/linux/container_of.h:8:47: error: 'struct task_struct' has no member named 'rcu_node_entry'
> 8 | #define typeof_member(T, m) typeof(((T*)0)->m)
> | ^~
> ./include/linux/build_bug.h:80:56: note: in definition of macro '__static_assert'
> 80 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
> | ^~~~
> ./include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
> 20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
> | ^~~~~~~~~~~~~
> ./include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
> 20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
> | ^~~~~~~~~~~
> ./include/linux/container_of.h:20:43: note: in expansion of macro 'typeof_member'
> 20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
> | ^~~~~~~~~~~~~
> kernel/rcu/tree.c:2823:37: note: in expansion of macro 'container_of'
> 2823 | t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
> | ^~~~~~~~~~~~
> ././include/linux/compiler_types.h:610:27: error: expression in static assertion is not an integer
> 610 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ./include/linux/build_bug.h:80:56: note: in definition of macro '__static_assert'
> 80 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
> | ^~~~
> ./include/linux/container_of.h:20:9: note: in expansion of macro 'static_assert'
> 20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
> | ^~~~~~~~~~~~~
> ./include/linux/container_of.h:20:23: note: in expansion of macro '__same_type'
> 20 | static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
> | ^~~~~~~~~~~
> kernel/rcu/tree.c:2823:37: note: in expansion of macro 'container_of'
> 2823 | t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
> | ^~~~~~~~~~~~
> In file included from ./include/uapi/linux/posix_types.h:5,
> from ./include/uapi/linux/types.h:14,
> from ./include/linux/types.h:5,
> from kernel/rcu/tree.c:20:
> >> ./include/linux/stddef.h:16:33: error: 'struct task_struct' has no member named 'rcu_node_entry'
> 16 | #define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
> | ^~~~~~~~~~~~~~~~~~
> ./include/linux/container_of.h:23:34: note: in expansion of macro 'offsetof'
> 23 | (type *)((void *)(ptr) - offsetof(type, member)); })
> | ^~~~~~~~
> kernel/rcu/tree.c:2823:37: note: in expansion of macro 'container_of'
> 2823 | t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
> | ^~~~~~~~~~~~
>
>
> vim +2772 kernel/rcu/tree.c
>
> 2757
> 2758 // Check to see if a task holding up the current grace period is
> 2759 // preempted but runnable on an idle CPU. This involves an
> 2760 // rcu_node structure, a pointer to which is passed to fqs_slow_task()
> 2761 // as a callback from task_call_func(). The fqs_slow_task()
> 2762 // function returns the CPU to pass to resched_cpu() or -1 if
> 2763 // there is no need for an additional call to resched_cpu().
> 2764 static int fqs_slow_task(struct task_struct *t, void *arg)
> 2765 {
> 2766 int cpu;
> 2767 struct rcu_node *rnp = arg;
> 2768 struct task_struct *tc;
> 2769
> 2770 // If the task is running or is no longer blocking the current
> 2771 // grace period, there should be no call to resched_cpu().
> > 2772 if (task_curr(t) || READ_ONCE(rnp->gp_tasks) != &t->rcu_node_entry)
> 2773 return -1;
> 2774
> 2775 // If the target CPU is not idle, there should be no call to
> 2776 // resched_cpu().
> 2777 WARN_ON_ONCE(1); // @@@
> 2778 cpu = task_cpu(t);
> 2779 tc = rcu_cpu_curr(cpu);
> 2780 if (!is_idle_task(tc))
> 2781 return -1;
> 2782
> 2783 // But the target CPU is idle, so resched_cpu() it is!
> 2784 WARN_ON_ONCE(1); // @@@
> 2785 return cpu;
> 2786 }
> 2787
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-10 19:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-10 9:43 [paulmckrcu:dev 20/22] kernel/rcu/tree.c:2772:59: error: 'struct task_struct' has no member named 'rcu_node_entry' kernel test robot
2026-10-10 19:54 ` Paul E. McKenney
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.