All of lore.kernel.org
 help / color / mirror / Atom feed
* [paulmckrcu:dev 20/22] kernel/rcu/tree.c:2772:54: error: no member named 'rcu_node_entry' in 'struct task_struct'
@ 2026-10-10  7:07 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-10  7:07 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: hexagon-randconfig-r2106-20261010 (https://download.01.org/0day-ci/archive/20261010/202610100942.wehumJty-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 43c3bf2782849a898d95a345a28179d639ef4e22)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261010/202610100942.wehumJty-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/202610100942.wehumJty-lkp@intel.com/

All errors (new ones prefixed by >>):

>> kernel/rcu/tree.c:2772:54: error: no member named 'rcu_node_entry' in 'struct task_struct'
    2772 |         if (task_curr(t) || READ_ONCE(rnp->gp_tasks) != &t->rcu_node_entry)
         |                                                          ~  ^
   kernel/rcu/tree.c:2823:57: error: no member named 'rcu_node_entry' in 'struct task_struct'
    2823 |                                 t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
         |                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
   include/linux/container_of.h:20:56: note: expanded from macro 'container_of'
      20 |         static_assert(__same_type(*(ptr), typeof_member(type, member)) || \
         |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
      21 |                       __same_type(*(ptr), void),                        \
         |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      22 |                       "pointer type mismatch in container_of()");       \
         |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/container_of.h:8:45: note: expanded from macro 'typeof_member'
       8 | #define typeof_member(T, m)     typeof(((T*)0)->m)
         |                                                 ^
   include/linux/compiler_types.h:610:74: note: expanded from macro '__same_type'
     610 | #define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
         |                                                                          ^
   include/linux/build_bug.h:79:50: note: expanded from macro 'static_assert'
      79 | #define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
         |                                  ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:80:56: note: expanded from macro '__static_assert'
      80 | #define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
         |                                                        ^~~~
>> kernel/rcu/tree.c:2823:9: error: no member named 'rcu_node_entry' in 'task_struct'
    2823 |                                 t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
         |                                     ^                                               ~~~~~~~~~~~~~~
   include/linux/container_of.h:23:27: note: expanded from macro 'container_of'
      23 |         (type *)((void *)(ptr) - offsetof(type, member)); })
         |                                  ^              ~~~~~~
   include/linux/stddef.h:16:32: note: expanded from macro 'offsetof'
      16 | #define offsetof(TYPE, MEMBER)  __builtin_offsetof(TYPE, MEMBER)
         |                                 ^                        ~~~~~~
>> kernel/rcu/tree.c:2823:7: error: assigning to 'struct task_struct *' from incompatible type 'void'
    2823 |                                 t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
         |                                   ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   4 errors generated.


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	
  2788	/*
  2789	 * Scan the leaf rcu_node structures.  For each structure on which all
  2790	 * CPUs have reported a quiescent state and on which there are tasks
  2791	 * blocking the current grace period, initiate RCU priority boosting.
  2792	 * Otherwise, invoke the specified function to check dyntick state for
  2793	 * each CPU that has not yet reported a quiescent state.
  2794	 */
  2795	static void force_qs_rnp(int (*f)(struct rcu_data *rdp))
  2796	{
  2797		int cpu;
  2798		unsigned long flags;
  2799		bool halfway;
  2800		struct rcu_node *rnp;
  2801		struct task_struct *t = NULL;
  2802	
  2803		rcu_state.cbovld = rcu_state.cbovldnext;
  2804		rcu_state.cbovldnext = false;
  2805		rcu_for_each_leaf_node(rnp) {
  2806			unsigned long mask = 0;
  2807			unsigned long rsmask = 0;
  2808	
  2809			cond_resched_tasks_rcu_qs();
  2810			raw_spin_lock_irqsave_rcu_node(rnp, flags);
  2811			rcu_state.cbovldnext |= !!rnp->cbovldmask;
  2812			if (rnp->qsmask == 0) {
  2813	
  2814				// Prepare to check for preempted tasks blocking
  2815				// the current RCU grace period whose CPU is idle.
  2816				// But only if we are at least halfway to the RCU
  2817				// CPU stall warning.
  2818				halfway = time_after(jiffies, rcu_state.jiffies_resched);
  2819				WARN_ONCE(1, "%s: halfway: %d.\n", __func__, halfway); // @@@
  2820				WARN_ON_ONCE(halfway); // @@@
  2821				if (halfway) {
  2822					WARN_ON_ONCE(1); // @@@
> 2823					t = container_of(rnp->gp_tasks, struct task_struct, rcu_node_entry);
  2824					if (t)
  2825						get_task_struct(t);
  2826				}
  2827				if (rcu_preempt_blocked_readers_cgp(rnp)) {
  2828					/*
  2829					 * No point in scanning bits because they
  2830					 * are all zero.  But we might need to
  2831					 * priority-boost blocked readers.
  2832					 */
  2833					rcu_initiate_boost(rnp, flags);
  2834					/* rcu_initiate_boost() releases rnp->lock */
  2835				} else {
  2836					raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
  2837				}
  2838	
  2839				// If the first preempted task blocking the
  2840				// current RCU grace period wants to run on a
  2841				// CPU that is idle, then add that CPU to rsmask.
  2842				// Unless the CPU belongs to some other rcu_node
  2843				// structure, in which case, call resched_cpu()
  2844				// directly.
  2845				if (halfway && t) {
  2846					WARN_ON_ONCE(1); // @@@
  2847					cpu = task_call_func(t, fqs_slow_task, rnp);
  2848					if (cpu >= 0) {
  2849						pr_alert("%s: For task P%d, resched_cpu(%d).\n",
  2850							 __func__, t->pid, cpu); // @@@
  2851						resched_cpu(cpu);
  2852					}
  2853					put_task_struct(t);
  2854				}
  2855	
  2856				continue;
  2857			}
  2858			for_each_leaf_node_cpu_mask(rnp, cpu, rnp->qsmask) {
  2859				struct rcu_data *rdp;
  2860				int ret;
  2861	
  2862				rdp = per_cpu_ptr(&rcu_data, cpu);
  2863				ret = f(rdp);
  2864				if (ret > 0) {
  2865					mask |= rdp->grpmask;
  2866					rcu_disable_urgency_upon_qs(rdp);
  2867				}
  2868				if (ret < 0)
  2869					rsmask |= rdp->grpmask;
  2870			}
  2871	
  2872			if (mask != 0) {
  2873				/* Idle/offline CPUs, report (releases rnp->lock). */
  2874				rcu_report_qs_rnp(mask, rnp, rnp->gp_seq, flags);
  2875			} else {
  2876				/* Nothing to do here, so just drop the lock. */
  2877				raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
  2878			}
  2879	
  2880			for_each_leaf_node_cpu_mask(rnp, cpu, rsmask)
  2881				resched_cpu(cpu);
  2882		}
  2883	}
  2884	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-10  7:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-10  7:07 [paulmckrcu:dev 20/22] kernel/rcu/tree.c:2772:54: error: no member named 'rcu_node_entry' in 'struct task_struct' kernel test robot

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.