* [tj-sched-ext:scx-sub-sched-v2 29/40] kernel/sched/ext.c:2459:27: error: 'struct scx_sched_pcpu' has no member named 'bypass_host_seq'
@ 2026-02-25 11:58 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-02-25 11:58 UTC (permalink / raw)
To: Tejun Heo; +Cc: oe-kbuild-all
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git scx-sub-sched-v2
head: f2122e67cf5ccb9d8844e72cd437a6fd56f0ad80
commit: 6f0091bd18342d745facac02f1f57490f8a67d49 [29/40] sched_ext: Implement hierarchical bypass mode
config: powerpc-randconfig-001-20260225 (https://download.01.org/0day-ci/archive/20260225/202602251959.622Zkdps-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 12.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260225/202602251959.622Zkdps-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/202602251959.622Zkdps-lkp@intel.com/
All errors (new ones prefixed by >>):
| ^
include/linux/compiler_types.h:686:23: note: in definition of macro '__compiletime_assert'
686 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:706:9: note: in expansion of macro '_compiletime_assert'
706 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:28: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/rcupdate.h:507:50: note: in expansion of macro 'READ_ONCE'
507 | typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
| ^~~~~~~~~
include/linux/rcupdate.h:626:31: note: in expansion of macro '__rcu_access_pointer'
626 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:24: note: in expansion of macro 'rcu_access_pointer'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:52: error: 'struct sched_ext_entity' has no member named 'sched'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^
include/linux/compiler_types.h:686:23: note: in definition of macro '__compiletime_assert'
686 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:706:9: note: in expansion of macro '_compiletime_assert'
706 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:9: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:9: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/rcupdate.h:507:50: note: in expansion of macro 'READ_ONCE'
507 | typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
| ^~~~~~~~~
include/linux/rcupdate.h:626:31: note: in expansion of macro '__rcu_access_pointer'
626 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:24: note: in expansion of macro 'rcu_access_pointer'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:52: error: 'struct sched_ext_entity' has no member named 'sched'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^
include/linux/compiler_types.h:633:27: note: in definition of macro '__unqual_scalar_typeof'
633 | _Generic((x), \
| ^
include/asm-generic/rwonce.h:50:9: note: in expansion of macro '__READ_ONCE'
50 | __READ_ONCE(x); \
| ^~~~~~~~~~~
include/linux/rcupdate.h:507:50: note: in expansion of macro 'READ_ONCE'
507 | typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
| ^~~~~~~~~
include/linux/rcupdate.h:626:31: note: in expansion of macro '__rcu_access_pointer'
626 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:24: note: in expansion of macro 'rcu_access_pointer'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^~~~~~~~~~~~~~~~~~
In file included from ./arch/powerpc/include/generated/asm/rwonce.h:1,
from include/linux/compiler.h:372,
from include/linux/build_bug.h:5,
from include/linux/container_of.h:5,
from include/linux/list.h:5,
from include/linux/smp.h:12,
from include/linux/sched/clock.h:5,
from kernel/sched/build_policy.c:16:
kernel/sched/ext.c:2435:52: error: 'struct sched_ext_entity' has no member named 'sched'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^
include/asm-generic/rwonce.h:44:73: note: in definition of macro '__READ_ONCE'
44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
| ^
include/linux/rcupdate.h:507:50: note: in expansion of macro 'READ_ONCE'
507 | typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
| ^~~~~~~~~
include/linux/rcupdate.h:626:31: note: in expansion of macro '__rcu_access_pointer'
626 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:24: note: in expansion of macro 'rcu_access_pointer'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^~~~~~~~~~~~~~~~~~
kernel/sched/ext.c:2435:52: error: 'struct sched_ext_entity' has no member named 'sched'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^
include/linux/rcupdate.h:509:19: note: in definition of macro '__rcu_access_pointer'
509 | ((typeof(*p) __force __kernel *)(local)); \
| ^
kernel/sched/ext.c:2435:24: note: in expansion of macro 'rcu_access_pointer'
2435 | sch == rcu_access_pointer(prev->scx.sched);
| ^~~~~~~~~~~~~~~~~~
In file included from kernel/sched/build_policy.c:62:
>> kernel/sched/ext.c:2459:27: error: 'struct scx_sched_pcpu' has no member named 'bypass_host_seq'
2459 | if (!(pcpu->bypass_host_seq++ % SCX_BYPASS_HOST_NTH) &&
| ^~
kernel/sched/ext.c: In function '__scx_init_task':
kernel/sched/ext.c:3190:28: warning: unused variable 'tg' [-Wunused-variable]
3190 | struct task_group *tg = task_group(p);
| ^~
kernel/sched/ext.c: In function 'scx_root_disable':
kernel/sched/ext.c:4833:9: error: implicit declaration of function 'drain_descendants' [-Werror=implicit-function-declaration]
4833 | drain_descendants(sch);
| ^~~~~~~~~~~~~~~~~
kernel/sched/ext.c:4894:29: error: 'struct scx_sched' has no member named 'cgrp'
4894 | set_cgroup_sched(sch->cgrp, NULL);
| ^~
kernel/sched/ext.c: In function 'scx_vexit':
kernel/sched/ext.c:5368:9: warning: function 'scx_vexit' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
5368 | vscnprintf(ei->msg, SCX_EXIT_MSG_LEN, fmt, args);
| ^~~~~~~~~~
kernel/sched/ext.c: In function 'scx_root_enable':
kernel/sched/ext.c:5619:45: error: 'cgrp_dfl_root' undeclared (first use in this function)
5619 | sch = scx_alloc_and_add_sched(ops, &cgrp_dfl_root.cgrp, NULL);
| ^~~~~~~~~~~~~
kernel/sched/ext.c:5619:45: note: each undeclared identifier is reported only once for each function it appears in
kernel/sched/ext.c:5745:29: error: 'struct scx_sched' has no member named 'cgrp'
5745 | set_cgroup_sched(sch->cgrp, sch);
| ^~
kernel/sched/ext.c: At top level:
kernel/sched/ext.c:4820:13: warning: 'scx_propgate_disable' defined but not used [-Wunused-function]
4820 | static void scx_propgate_disable(struct scx_sched *sch) { }
| ^~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +2459 kernel/sched/ext.c
2427
2428 static bool scx_dispatch_sched(struct scx_sched *sch, struct rq *rq,
2429 struct task_struct *prev)
2430 {
2431 struct scx_dsp_ctx *dspc = this_cpu_ptr(scx_dsp_ctx);
2432 int nr_loops = SCX_DSP_MAX_LOOPS;
2433 s32 cpu = cpu_of(rq);
2434 bool prev_on_sch = (prev->sched_class == &ext_sched_class) &&
2435 sch == rcu_access_pointer(prev->scx.sched);
2436
2437 if (consume_global_dsq(sch, rq))
2438 return true;
2439
2440 if (bypass_dsp_enabled(sch)) {
2441 struct scx_sched_pcpu *pcpu = per_cpu_ptr(sch->pcpu, cpu);
2442
2443 /* if @sch is bypassing, only the bypass DSQs are active */
2444 if (scx_bypassing(sch, cpu))
2445 return consume_dispatch_q(sch, rq, bypass_dsq(sch, cpu));
2446
2447 /*
2448 * If @sch isn't bypassing but its children are, @sch is
2449 * responsible for making forward progress for both its own
2450 * tasks that aren't bypassing and the bypassing descendants'
2451 * tasks. The following implements a simple built-in behavior -
2452 * let each CPU try to run the bypass DSQ every Nth time.
2453 *
2454 * Later, if necessary, we can add an ops flag to suppress the
2455 * auto-consumption and a kfunc to consume the bypass DSQ and,
2456 * so that the BPF scheduler can fully control scheduling of
2457 * bypassed tasks.
2458 */
> 2459 if (!(pcpu->bypass_host_seq++ % SCX_BYPASS_HOST_NTH) &&
2460 consume_dispatch_q(sch, rq, bypass_dsq(sch, cpu))) {
2461 __scx_add_event(sch, SCX_EV_SUB_BYPASS_DISPATCH, 1);
2462 return true;
2463 }
2464 }
2465
2466 if (unlikely(!SCX_HAS_OP(sch, dispatch)) || !scx_rq_online(rq))
2467 return false;
2468
2469 dspc->rq = rq;
2470
2471 /*
2472 * The dispatch loop. Because flush_dispatch_buf() may drop the rq lock,
2473 * the local DSQ might still end up empty after a successful
2474 * ops.dispatch(). If the local DSQ is empty even after ops.dispatch()
2475 * produced some tasks, retry. The BPF scheduler may depend on this
2476 * looping behavior to simplify its implementation.
2477 */
2478 do {
2479 dspc->nr_tasks = 0;
2480
2481 SCX_CALL_OP(sch, SCX_KF_DISPATCH, dispatch, rq, cpu,
2482 prev_on_sch ? prev : NULL);
2483
2484 flush_dispatch_buf(sch, rq);
2485
2486 if ((prev->scx.flags & SCX_TASK_QUEUED) && prev->scx.slice) {
2487 rq->scx.flags |= SCX_RQ_BAL_KEEP;
2488 return true;
2489 }
2490 if (rq->scx.local_dsq.nr)
2491 return true;
2492 if (consume_global_dsq(sch, rq))
2493 return true;
2494
2495 /*
2496 * ops.dispatch() can trap us in this loop by repeatedly
2497 * dispatching ineligible tasks. Break out once in a while to
2498 * allow the watchdog to run. As IRQ can't be enabled in
2499 * balance(), we want to complete this scheduling cycle and then
2500 * start a new one. IOW, we want to call resched_curr() on the
2501 * next, most likely idle, task, not the current one. Use
2502 * __scx_bpf_kick_cpu() for deferred kicking.
2503 */
2504 if (unlikely(!--nr_loops)) {
2505 scx_kick_cpu(sch, cpu, 0);
2506 break;
2507 }
2508 } while (dspc->nr_tasks);
2509
2510 /*
2511 * Prevent the CPU from going idle while bypassed descendants have tasks
2512 * queued. Without this fallback, bypassed tasks could stall if the host
2513 * scheduler's ops.dispatch() doesn't yield any tasks.
2514 */
2515 if (bypass_dsp_enabled(sch))
2516 return consume_dispatch_q(sch, rq, bypass_dsq(sch, cpu));
2517
2518 return false;
2519 }
2520
--
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-02-25 11:59 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-25 11:58 [tj-sched-ext:scx-sub-sched-v2 29/40] kernel/sched/ext.c:2459:27: error: 'struct scx_sched_pcpu' has no member named 'bypass_host_seq' 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.