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