The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Tejun Heo <tj@kernel.org>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
	Andrea Righi <arighi@nvidia.com>
Subject: kernel/sched/ext/ext.c:1451:38: sparse: sparse: incorrect type in initializer (different address spaces)
Date: Thu, 02 Jul 2026 06:31:30 +0800	[thread overview]
Message-ID: <202607020613.LQ2nDja8-lkp@intel.com> (raw)

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

                 reply	other threads:[~2026-07-01 22:32 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202607020613.LQ2nDja8-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=arighi@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox