* kernel/sched/ext/ext.c:1451:38: sparse: sparse: incorrect type in initializer (different address spaces)
@ 2026-07-01 22:31 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-01 22:31 UTC (permalink / raw)
To: Tejun Heo; +Cc: oe-kbuild-all, linux-kernel, Andrea Righi
Hi Tejun,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 665159e246749578d4e4bfe106ee3b74edcdab18
commit: bba2c3615bd6cfee7456d1130f2e6b01b3f4e9ba sched_ext: Move sources under kernel/sched/ext/
date: 9 days ago
config: powerpc64-randconfig-r113-20260702 (https://download.01.org/0day-ci/archive/20260702/202607020613.LQ2nDja8-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 6cc609bb250b21b47fc7d394b4019101e9983597)
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260702/202607020613.LQ2nDja8-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
| Fixes: bba2c3615bd6 ("sched_ext: Move sources under kernel/sched/ext/")
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202607020613.LQ2nDja8-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
kernel/sched/rt.c:1517:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu * @@
kernel/sched/rt.c:1517:14: sparse: expected struct task_struct *curr
kernel/sched/rt.c:1517:14: sparse: got struct task_struct [noderef] __rcu *
kernel/sched/rt.c:1518:15: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu * @@
kernel/sched/rt.c:1518:15: sparse: expected struct task_struct *donor
kernel/sched/rt.c:1518:15: sparse: got struct task_struct [noderef] __rcu *
kernel/sched/rt.c:1579:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/rt.c:1579:45: sparse: expected struct task_struct *p
kernel/sched/rt.c:1579:45: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/rt.c:1605:35: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/rt.c:1605:35: sparse: expected struct task_struct *p
kernel/sched/rt.c:1605:35: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/rt.c:1627:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/rt.c:1627:39: sparse: expected struct task_struct *donor
kernel/sched/rt.c:1627:39: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/rt.c:1652:64: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/rt.c:1652:64: sparse: expected struct task_struct *tsk
kernel/sched/rt.c:1652:64: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:2002:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *task @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/rt.c:2002:40: sparse: expected struct task_struct *task
kernel/sched/rt.c:2002:40: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:2025:13: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/rt.c:2025:13: sparse: struct task_struct *
kernel/sched/rt.c:2025:13: sparse: struct task_struct [noderef] __rcu *
kernel/sched/rt.c:2376:54: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/rt.c:2376:54: sparse: expected struct task_struct *tsk
kernel/sched/rt.c:2376:54: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:2378:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/rt.c:2378:40: sparse: expected struct task_struct *p
kernel/sched/rt.c:2378:40: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/rt.c:2378:62: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/rt.c:2378:62: sparse: expected struct task_struct *p
kernel/sched/rt.c:2378:62: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/build_policy.c: note: in included file:
kernel/sched/cpudeadline.c:255:24: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/cpudeadline.c:255:24: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/cpudeadline.c:255:24: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/build_policy.c: note: in included file:
kernel/sched/deadline.c:3151:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/deadline.c:3151:23: sparse: expected struct task_struct *p
kernel/sched/deadline.c:3151:23: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/deadline.c:3161:13: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/deadline.c:3161:13: sparse: struct task_struct *
kernel/sched/deadline.c:3161:13: sparse: struct task_struct [noderef] __rcu *
kernel/sched/deadline.c:3267:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/deadline.c:3267:25: sparse: struct task_struct *
kernel/sched/deadline.c:3267:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/deadline.c:2744:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@
kernel/sched/deadline.c:2744:42: sparse: expected struct sched_dl_entity const *b
kernel/sched/deadline.c:2744:42: sparse: got struct sched_dl_entity [noderef] __rcu *
kernel/sched/deadline.c:2754:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/deadline.c:2754:38: sparse: expected struct task_struct *tsk
kernel/sched/deadline.c:2754:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/deadline.c:1188:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/deadline.c:1188:39: sparse: expected struct task_struct *p
kernel/sched/deadline.c:1188:39: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/deadline.c:1188:85: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@
kernel/sched/deadline.c:1188:85: sparse: expected struct sched_dl_entity const *b
kernel/sched/deadline.c:1188:85: sparse: got struct sched_dl_entity [noderef] __rcu *
kernel/sched/deadline.c:1286:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/deadline.c:1286:23: sparse: expected struct task_struct *p
kernel/sched/deadline.c:1286:23: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/deadline.c:1815:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/deadline.c:1815:31: sparse: expected struct task_struct *p
kernel/sched/deadline.c:1815:31: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/deadline.c:1815:70: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@
kernel/sched/deadline.c:1815:70: sparse: expected struct sched_dl_entity const *b
kernel/sched/deadline.c:1815:70: sparse: got struct sched_dl_entity [noderef] __rcu *
kernel/sched/deadline.c:2130:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/deadline.c:2130:39: sparse: expected struct task_struct *donor
kernel/sched/deadline.c:2130:39: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/deadline.c:2973:9: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct sched_domain *[assigned] sd @@ got struct sched_domain [noderef] __rcu *parent @@
kernel/sched/deadline.c:2973:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/deadline.c:2973:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/deadline.c:2618:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu * @@
kernel/sched/deadline.c:2618:14: sparse: expected struct task_struct *curr
kernel/sched/deadline.c:2618:14: sparse: got struct task_struct [noderef] __rcu *
kernel/sched/deadline.c:2619:15: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu * @@
kernel/sched/deadline.c:2619:15: sparse: expected struct task_struct *donor
kernel/sched/deadline.c:2619:15: sparse: got struct task_struct [noderef] __rcu *
kernel/sched/deadline.c:2693:43: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/deadline.c:2693:43: sparse: expected struct task_struct *p
kernel/sched/deadline.c:2693:43: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/deadline.c:2713:35: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/deadline.c:2713:35: sparse: expected struct task_struct *p
kernel/sched/deadline.c:2713:35: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/deadline.c:3312:38: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/deadline.c:3312:38: sparse: expected struct task_struct *tsk
kernel/sched/deadline.c:3312:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/deadline.c:3314:23: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/deadline.c:3314:23: sparse: expected struct task_struct *p
kernel/sched/deadline.c:3314:23: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/deadline.c:3316:44: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct sched_dl_entity const *b @@ got struct sched_dl_entity [noderef] __rcu * @@
kernel/sched/deadline.c:3316:44: sparse: expected struct sched_dl_entity const *b
kernel/sched/deadline.c:3316:44: sparse: got struct sched_dl_entity [noderef] __rcu *
kernel/sched/deadline.c:3578:23: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/deadline.c:3578:23: sparse: struct task_struct [noderef] __rcu *
kernel/sched/deadline.c:3578:23: sparse: struct task_struct *
kernel/sched/deadline.c:3631:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/build_policy.c: note: in included file:
>> kernel/sched/ext/ext.c:1451:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *curr @@
>> kernel/sched/ext/ext.c:1622:48: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:1622:48: sparse: struct task_struct *
kernel/sched/ext/ext.c:1622:48: sparse: struct task_struct [noderef] __rcu *
kernel/sched/ext/ext.c:1771:66: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:1771:66: sparse: struct task_struct [noderef] __rcu *
kernel/sched/ext/ext.c:1771:66: sparse: struct task_struct *
>> kernel/sched/ext/ext.c:2315:35: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/ext/ext.c:2315:35: sparse: expected struct task_struct *p
kernel/sched/ext/ext.c:2315:35: sparse: got struct task_struct [noderef] __rcu *donor
>> kernel/sched/ext/ext.c:2326:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *from @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/ext/ext.c:2326:38: sparse: expected struct task_struct *from
kernel/sched/ext/ext.c:2326:38: sparse: got struct task_struct [noderef] __rcu *donor
>> kernel/sched/ext/ext.c:3000:33: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_sched *sch @@ got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root @@
kernel/sched/ext/ext.c:3000:33: sparse: expected struct scx_sched *sch
kernel/sched/ext/ext.c:3000:33: sparse: got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root
kernel/sched/ext/ext.c:3136:33: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_sched *sch @@ got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root @@
kernel/sched/ext/ext.c:3136:33: sparse: expected struct scx_sched *sch
kernel/sched/ext/ext.c:3136:33: sparse: got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root
>> kernel/sched/ext/ext.c:3278:38: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *prev @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/ext/ext.c:3278:38: sparse: expected struct task_struct *prev
kernel/sched/ext/ext.c:3278:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/ext/ext.c:3509:33: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_sched *sch @@ got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root @@
kernel/sched/ext/ext.c:3509:33: sparse: expected struct scx_sched *sch
kernel/sched/ext/ext.c:3509:33: sparse: got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root
kernel/sched/ext/ext.c:3917:41: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_sched *sch @@ got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root @@
kernel/sched/ext/ext.c:3917:41: sparse: expected struct scx_sched *sch
kernel/sched/ext/ext.c:3917:41: sparse: got struct scx_sched [noderef] __rcu *[addressable] [toplevel] scx_root
kernel/sched/ext/ext.c:5757:14: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5757:14: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5757:14: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5762:18: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5762:18: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5762:18: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5763:19: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5763:19: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5763:19: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5764:20: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5764:20: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5764:20: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:5803:50: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_kick_syncs **ksyncs @@ got struct scx_kick_syncs [noderef] __rcu ** @@
kernel/sched/ext/ext.c:5803:50: sparse: expected struct scx_kick_syncs **ksyncs
kernel/sched/ext/ext.c:5803:50: sparse: got struct scx_kick_syncs [noderef] __rcu **
kernel/sched/ext/ext.c:5806:27: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:5806:27: sparse: struct scx_kick_syncs [noderef] __rcu *
kernel/sched/ext/ext.c:5806:27: sparse: struct scx_kick_syncs *
kernel/sched/ext/ext.c:5806:27: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:5806:27: sparse: struct scx_kick_syncs [noderef] __rcu *
kernel/sched/ext/ext.c:5806:27: sparse: struct scx_kick_syncs *
>> kernel/sched/ext/ext.c:6626:57: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct const *p @@ got struct task_struct [noderef] __rcu *curr @@
>> kernel/sched/ext/ext.c:6627:51: sparse: sparse: incorrect type in argument 5 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/ext/ext.c:6784:50: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_kick_syncs **ksyncs @@ got struct scx_kick_syncs [noderef] __rcu ** @@
kernel/sched/ext/ext.c:6787:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:6787:17: sparse: struct scx_kick_syncs [noderef] __rcu *
kernel/sched/ext/ext.c:6787:17: sparse: struct scx_kick_syncs *
kernel/sched/ext/ext.c:6789:30: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6789:30: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6789:30: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6796:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:6796:17: sparse: struct scx_kick_syncs [noderef] __rcu *
kernel/sched/ext/ext.c:6796:17: sparse: struct scx_kick_syncs *
kernel/sched/ext/ext.c:6814:17: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6814:17: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6814:17: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6857:15: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6857:15: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6857:15: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6873:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6873:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:6873:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:8379:32: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct const *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/ext/ext.c:8379:32: sparse: expected struct task_struct const *p
kernel/sched/ext/ext.c:8379:32: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/ext/ext.c:9314:15: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:9314:15: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/ext.c:9314:15: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
>> kernel/sched/ext/ext.c:9751:18: sparse: sparse: symbol 'scx_bpf_reenqueue_local___v2' was not declared. Should it be static?
kernel/sched/ext/ext.c:10196:33: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/ext/ext.c:10196:33: sparse: struct task_struct [noderef] __rcu *
kernel/sched/ext/ext.c:10196:33: sparse: struct task_struct const *
kernel/sched/build_policy.c: note: in included file:
kernel/sched/ext/cid.c:53:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:53:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:53:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:54:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:54:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:54:22: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:55:20: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:55:20: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/cid.c:55:20: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/build_policy.c: note: in included file:
kernel/sched/ext/idle.c:682:31: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/idle.c:682:31: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/idle.c:682:31: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/idle.c:686:42: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/idle.c:686:42: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/ext/idle.c:686:42: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
>> kernel/sched/ext/idle.c:748:33: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct scx_sched *sch @@ got struct scx_sched [noderef] __rcu *[addressable] [assigned] [toplevel] scx_root @@
kernel/sched/ext/idle.c:748:33: sparse: expected struct scx_sched *sch
kernel/sched/ext/idle.c:748:33: sparse: got struct scx_sched [noderef] __rcu *[addressable] [assigned] [toplevel] scx_root
>> kernel/sched/ext/idle.c:768:49: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct const *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/ext/idle.c:768:49: sparse: expected struct task_struct const *p
kernel/sched/ext/idle.c:768:49: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/build_policy.c: note: in included file:
kernel/sched/syscalls.c:1418:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *curr @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/syscalls.c:1418:22: sparse: expected struct task_struct *curr
kernel/sched/syscalls.c:1418:22: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/build_policy.c: note: in included file:
kernel/sched/rt.c:1313:23: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/rt.c:1313:23: sparse: struct task_struct *
kernel/sched/rt.c:1313:23: sparse: struct task_struct [noderef] __rcu *
kernel/sched/build_policy.c: note: in included file:
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2462:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2462:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2462:26: sparse: struct task_struct *
kernel/sched/sched.h:2462:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2462:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2462:26: sparse: struct task_struct *
kernel/sched/sched.h:2462:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2462:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2462:26: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2462:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2462:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2462:26: sparse: struct task_struct *
kernel/sched/sched.h:1423:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:1423:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1423:25: sparse: struct task_struct *
kernel/sched/build_policy.c: note: in included file:
kernel/sched/deadline.c:2339:15: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/deadline.c:2339:15: sparse: struct task_struct *
kernel/sched/deadline.c:2339:15: sparse: struct task_struct [noderef] __rcu *
kernel/sched/build_policy.c: note: in included file:
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2462:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2462:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2462:26: sparse: struct task_struct *
kernel/sched/sched.h:2462:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2462:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2462:26: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:2451:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2451:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2451:25: sparse: struct task_struct *
kernel/sched/sched.h:1423:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:1423:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1423:25: sparse: struct task_struct *
kernel/sched/sched.h:2894:16: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/sched.h:2894:16: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
kernel/sched/sched.h:2894:16: sparse: sparse: undefined identifier '__builtin_infer_alloc_token'
vim +1451 kernel/sched/ext/ext.c
7b0888b7cc1924 kernel/sched/ext.c Tejun Heo 2024-06-18 1448
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1449 static void update_curr_scx(struct rq *rq)
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1450 {
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 @1451 struct task_struct *curr = rq->curr;
7799140b6a1697 kernel/sched/ext.c Tejun Heo 2024-08-06 1452 s64 delta_exec;
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1453
7799140b6a1697 kernel/sched/ext.c Tejun Heo 2024-08-06 1454 delta_exec = update_curr_common(rq);
7799140b6a1697 kernel/sched/ext.c Tejun Heo 2024-08-06 1455 if (unlikely(delta_exec <= 0))
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1456 return;
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1457
7b0888b7cc1924 kernel/sched/ext.c Tejun Heo 2024-06-18 1458 if (curr->scx.slice != SCX_SLICE_INF) {
7799140b6a1697 kernel/sched/ext.c Tejun Heo 2024-08-06 1459 curr->scx.slice -= min_t(u64, curr->scx.slice, delta_exec);
7b0888b7cc1924 kernel/sched/ext.c Tejun Heo 2024-06-18 1460 if (!curr->scx.slice)
7b0888b7cc1924 kernel/sched/ext.c Tejun Heo 2024-06-18 1461 touch_core_sched(rq, curr);
7b0888b7cc1924 kernel/sched/ext.c Tejun Heo 2024-06-18 1462 }
cd959a3562050d kernel/sched/ext.c Andrea Righi 2026-01-26 1463
cd959a3562050d kernel/sched/ext.c Andrea Righi 2026-01-26 1464 dl_server_update(&rq->ext_server, delta_exec);
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1465 }
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1466
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1467 static bool scx_dsq_priq_less(struct rb_node *node_a,
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1468 const struct rb_node *node_b)
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1469 {
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1470 const struct task_struct *a =
d4af01c3731ff9 kernel/sched/ext.c Tejun Heo 2024-07-08 1471 container_of(node_a, struct task_struct, scx.dsq_priq);
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1472 const struct task_struct *b =
d4af01c3731ff9 kernel/sched/ext.c Tejun Heo 2024-07-08 1473 container_of(node_b, struct task_struct, scx.dsq_priq);
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1474
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1475 return time_before64(a->scx.dsq_vtime, b->scx.dsq_vtime);
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1476 }
06e51be3d5e7a0 kernel/sched/ext.c Tejun Heo 2024-06-18 1477
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1478 static void dsq_inc_nr(struct scx_dispatch_q *dsq, struct task_struct *p, u64 enq_flags)
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1479 {
80a54b807d6c0b kernel/sched/ext.c Tejun Heo 2026-03-07 1480 /* scx_bpf_dsq_nr_queued() reads ->nr without locking, use WRITE_ONCE() */
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1481 WRITE_ONCE(dsq->nr, dsq->nr + 1);
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1482
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1483 /*
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1484 * Once @p reaches a local DSQ, it can only leave it by being dispatched
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1485 * to the CPU or dequeued. In both cases, the only way @p can go back to
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1486 * the BPF sched is through enqueueing. If being inserted into a local
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1487 * DSQ with IMMED, persist the state until the next enqueueing event in
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1488 * do_enqueue_task() so that we can maintain IMMED protection through
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1489 * e.g. SAVE/RESTORE cycles and slice extensions.
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1490 */
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1491 if (enq_flags & SCX_ENQ_IMMED) {
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1492 if (unlikely(dsq->id != SCX_DSQ_LOCAL)) {
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1493 WARN_ON_ONCE(!(enq_flags & SCX_ENQ_GDSQ_FALLBACK));
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1494 return;
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1495 }
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1496 p->scx.flags |= SCX_TASK_IMMED;
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1497 }
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1498
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1499 if (p->scx.flags & SCX_TASK_IMMED) {
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1500 struct rq *rq = container_of(dsq, struct rq, scx.local_dsq);
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1501
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1502 if (WARN_ON_ONCE(dsq->id != SCX_DSQ_LOCAL))
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1503 return;
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1504
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1505 rq->scx.nr_immed++;
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1506
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1507 /*
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1508 * If @rq already had other tasks or the current task is not
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1509 * done yet, @p can't go on the CPU immediately. Re-enqueue.
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1510 */
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1511 if (unlikely(dsq->nr > 1 || !rq_is_open(rq, enq_flags)))
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1512 schedule_reenq_local(rq, 0);
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1513 }
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1514 }
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1515
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1516 static void dsq_dec_nr(struct scx_dispatch_q *dsq, struct task_struct *p)
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1517 {
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1518 /* see dsq_inc_nr() */
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1519 WRITE_ONCE(dsq->nr, dsq->nr - 1);
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1520
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1521 if (p->scx.flags & SCX_TASK_IMMED) {
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1522 struct rq *rq = container_of(dsq, struct rq, scx.local_dsq);
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1523
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1524 if (WARN_ON_ONCE(dsq->id != SCX_DSQ_LOCAL) ||
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1525 WARN_ON_ONCE(rq->scx.nr_immed <= 0))
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1526 return;
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1527
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1528 rq->scx.nr_immed--;
98d709cba3193f kernel/sched/ext.c Tejun Heo 2026-03-13 1529 }
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1530 }
f0e1a0643a59bf kernel/sched/ext.c Tejun Heo 2024-06-18 1531
c0008a5632103e kernel/sched/ext.c Tejun Heo 2025-09-23 1532 static void refill_task_slice_dfl(struct scx_sched *sch, struct task_struct *p)
69120f82282977 kernel/sched/ext.c Honglei Wang 2025-04-18 1533 {
e1cccf365ef4b8 kernel/sched/ext.c Tejun Heo 2026-03-06 1534 p->scx.slice = READ_ONCE(sch->slice_dfl);
c0008a5632103e kernel/sched/ext.c Tejun Heo 2025-09-23 1535 __scx_add_event(sch, SCX_EV_REFILL_SLICE_DFL, 1);
69120f82282977 kernel/sched/ext.c Honglei Wang 2025-04-18 1536 }
69120f82282977 kernel/sched/ext.c Honglei Wang 2025-04-18 1537
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1538 /*
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1539 * Return true if @p is moving due to an internal SCX migration, false
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1540 * otherwise.
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1541 */
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1542 static inline bool task_scx_migrating(struct task_struct *p)
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1543 {
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1544 /*
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1545 * We only need to check sticky_cpu: it is set to the destination
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1546 * CPU in move_remote_task_to_local_dsq() before deactivate_task()
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1547 * and cleared when the task is enqueued on the destination, so it
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1548 * is only non-negative during an internal SCX migration.
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1549 */
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1550 return p->scx.sticky_cpu >= 0;
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1551 }
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1552
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1553 /*
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1554 * Call ops.dequeue() if the task is in BPF custody and not migrating.
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1555 * Clears %SCX_TASK_IN_CUSTODY when the callback is invoked.
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1556 */
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1557 static void call_task_dequeue(struct scx_sched *sch, struct rq *rq,
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1558 struct task_struct *p, u64 deq_flags)
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1559 {
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1560 if (!(p->scx.flags & SCX_TASK_IN_CUSTODY) || task_scx_migrating(p))
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1561 return;
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1562
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1563 if (SCX_HAS_OP(sch, dequeue))
7cd9a5d7d4b758 kernel/sched/ext.c Cheng-Yang Chou 2026-04-10 1564 SCX_CALL_OP_TASK(sch, dequeue, rq, p, deq_flags);
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1565
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1566 p->scx.flags &= ~SCX_TASK_IN_CUSTODY;
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1567 }
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1568
4e3d7c89e15ac5 kernel/sched/ext.c zhidao su 2026-04-23 1569 static void local_dsq_post_enq(struct scx_sched *sch, struct scx_dispatch_q *dsq,
4e3d7c89e15ac5 kernel/sched/ext.c zhidao su 2026-04-23 1570 struct task_struct *p, u64 enq_flags)
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1571 {
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1572 struct rq *rq = container_of(dsq, struct rq, scx.local_dsq);
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1573
4e3d7c89e15ac5 kernel/sched/ext.c zhidao su 2026-04-23 1574 call_task_dequeue(sch, rq, p, 0);
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1575
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1576 /*
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1577 * Note that @rq's lock may be dropped between this enqueue and @p
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1578 * actually getting on CPU. This gives higher-class tasks (e.g. RT)
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1579 * an opportunity to wake up on @rq and prevent @p from running.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1580 * Here are some concrete examples:
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1581 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1582 * Example 1:
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1583 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1584 * We dispatch two tasks from a single ops.dispatch():
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1585 * - First, a local task to this CPU's local DSQ;
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1586 * - Second, a local/remote task to a remote CPU's local DSQ.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1587 * We must drop the local rq lock in order to finish the second
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1588 * dispatch. In that time, an RT task can wake up on the local rq.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1589 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1590 * Example 2:
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1591 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1592 * We dispatch a local/remote task to a remote CPU's local DSQ.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1593 * We must drop the remote rq lock before the dispatched task can run,
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1594 * which gives an RT task an opportunity to wake up on the remote rq.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1595 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1596 * Both examples work the same if we replace dispatching with moving
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1597 * the tasks from a user-created DSQ.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1598 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1599 * We must detect these wakeups so that we can re-enqueue IMMED tasks
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1600 * from @rq's local DSQ. scx_wakeup_preempt() serves exactly this
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1601 * purpose, but for it to be invoked, we must ensure that we bump
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1602 * @rq->next_class to &ext_sched_class if it's currently idle.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1603 *
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1604 * wakeup_preempt() does the bumping, and since we only invoke it if
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1605 * @rq->next_class is below &ext_sched_class, it will also
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1606 * resched_curr(rq).
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1607 */
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1608 if (sched_class_above(p->sched_class, rq->next_class))
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1609 wakeup_preempt(rq, p, 0);
ebf1ccff79c43f kernel/sched/ext.c Andrea Righi 2026-02-18 1610
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1611 /*
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1612 * If @rq is in balance, the CPU is already vacant and looking for the
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1613 * next task to run. No need to preempt or trigger resched after moving
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1614 * @p into its local DSQ.
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1615 * Note that the wakeup_preempt() above may have already triggered
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1616 * a resched if @rq->next_class was idle. It's harmless, since
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1617 * need_resched is cleared immediately after task pick.
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1618 */
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1619 if (rq->scx.flags & SCX_RQ_IN_BALANCE)
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1620 return;
f5e1e5ec204da1 kernel/sched/ext.c Tejun Heo 2025-12-11 1621
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 @1622 if ((enq_flags & SCX_ENQ_PREEMPT) && p != rq->curr &&
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1623 rq->curr->sched_class == &ext_sched_class) {
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1624 rq->curr->scx.slice = 0;
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1625 resched_curr(rq);
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1626 }
163f8b7f9a8408 kernel/sched/ext.c Kuba Piecuch 2026-04-28 1627 }
530b6637c79e72 kernel/sched/ext.c Tejun Heo 2025-12-11 1628
:::::: The code at line 1451 was first introduced by commit
:::::: f0e1a0643a59bf1f922fa209cec86a170b784f3f sched_ext: Implement BPF extensible scheduler class
:::::: TO: Tejun Heo <tj@kernel.org>
:::::: CC: Tejun Heo <tj@kernel.org>
--
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-07-01 22:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-01 22:31 kernel/sched/ext/ext.c:1451:38: sparse: sparse: incorrect type in initializer (different address spaces) 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.