All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.