lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202512120524.r3WemLC8-lkp@intel.com>
Date: Fri, 12 Dec 2025 05:45:02 +0800
From: kernel test robot <lkp@...el.com>
To: Ingo Molnar <mingo@...nel.org>
Cc: oe-kbuild-all@...ts.linux.dev, linux-kernel@...r.kernel.org
Subject: kernel/sched/rt.c:1971:40: sparse: sparse: incorrect type in
 argument 1 (different address spaces)

Hi Ingo,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   d358e5254674b70f34c847715ca509e46eb81e6f
commit: 15125a229abc2404a264ce493e64a9ffa7850f6e sched/smp: Use the SMP version of the RT scheduling class
date:   6 months ago
config: sh-randconfig-r131-20251211 (https://download.01.org/0day-ci/archive/20251212/202512120524.r3WemLC8-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251212/202512120524.r3WemLC8-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202512120524.r3WemLC8-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
   kernel/sched/build_policy.c: note: in included file:
   kernel/sched/rt.c:838:70: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/rt.c:838:70: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/rt.c:838:70: sparse:    struct task_struct *
   kernel/sched/rt.c:2289:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/rt.c:2289:25: sparse:    struct task_struct *
   kernel/sched/rt.c:2289:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/rt.c:529:55: 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:529:55: sparse:     expected struct task_struct *donor
   kernel/sched/rt.c:529:55: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/rt.c:976: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:976:39: sparse:     expected struct task_struct *donor
   kernel/sched/rt.c:976:39: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/rt.c:1490:31: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct task_struct *p @@     got struct task_struct [noderef] __rcu *curr @@
   kernel/sched/rt.c:1490:31: sparse:     expected struct task_struct *p
   kernel/sched/rt.c:1490:31: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/rt.c:1804: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/rt.c:1804:9: sparse:     expected struct sched_domain *[assigned] sd
   kernel/sched/rt.c:1804:9: sparse:     got struct sched_domain [noderef] __rcu *parent
   kernel/sched/rt.c:1509: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:1509:14: sparse:     expected struct task_struct *curr
   kernel/sched/rt.c:1509:14: sparse:     got struct task_struct [noderef] __rcu *
   kernel/sched/rt.c:1510: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:1510:15: sparse:     expected struct task_struct *donor
   kernel/sched/rt.c:1510:15: sparse:     got struct task_struct [noderef] __rcu *
   kernel/sched/rt.c:1571: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:1571:45: sparse:     expected struct task_struct *p
   kernel/sched/rt.c:1571:45: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/rt.c:1613: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:1613:39: sparse:     expected struct task_struct *donor
   kernel/sched/rt.c:1613:39: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/rt.c:1632: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:1632:64: sparse:     expected struct task_struct *tsk
   kernel/sched/rt.c:1632:64: sparse:     got struct task_struct [noderef] __rcu *curr
>> kernel/sched/rt.c:1971: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:1971:40: sparse:     expected struct task_struct *task
   kernel/sched/rt.c:1971:40: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/rt.c:1994:13: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/rt.c:1994:13: sparse:    struct task_struct *
   kernel/sched/rt.c:1994:13: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/rt.c:2340: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:2340:54: sparse:     expected struct task_struct *tsk
   kernel/sched/rt.c:2340:54: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/rt.c:2342: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:2342:40: sparse:     expected struct task_struct *p
   kernel/sched/rt.c:2342:40: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/rt.c:2342: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:2342:62: sparse:     expected struct task_struct *p
   kernel/sched/rt.c:2342:62: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/build_policy.c: note: in included file:
   kernel/sched/deadline.c:2634: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:2634:23: sparse:     expected struct task_struct *p
   kernel/sched/deadline.c:2634:23: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/deadline.c:2644:13: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/deadline.c:2644:13: sparse:    struct task_struct *
   kernel/sched/deadline.c:2644:13: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/deadline.c:2750:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/deadline.c:2750:25: sparse:    struct task_struct *
   kernel/sched/deadline.c:2750:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/deadline.c:2278: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:2278:42: sparse:     expected struct sched_dl_entity const *b
   kernel/sched/deadline.c:2278:42: sparse:     got struct sched_dl_entity [noderef] __rcu *
   kernel/sched/deadline.c:2288: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:2288:38: sparse:     expected struct task_struct *tsk
   kernel/sched/deadline.c:2288:38: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/deadline.c:1197: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:1197:39: sparse:     expected struct task_struct *p
   kernel/sched/deadline.c:1197:39: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/deadline.c:1197: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:1197:85: sparse:     expected struct sched_dl_entity const *b
   kernel/sched/deadline.c:1197:85: sparse:     got struct sched_dl_entity [noderef] __rcu *
   kernel/sched/deadline.c:1295: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:1295:23: sparse:     expected struct task_struct *p
   kernel/sched/deadline.c:1295:23: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/deadline.c:1604: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:1604:31: sparse:     expected struct task_struct *p
   kernel/sched/deadline.c:1604:31: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/deadline.c:1604: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:1604:70: sparse:     expected struct sched_dl_entity const *b
   kernel/sched/deadline.c:1604:70: sparse:     got struct sched_dl_entity [noderef] __rcu *
   kernel/sched/deadline.c:1693: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:1693:39: sparse:     expected struct task_struct *donor
   kernel/sched/deadline.c:1693:39: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/deadline.c:2495: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:2495:9: sparse:     expected struct sched_domain *[assigned] sd
   kernel/sched/deadline.c:2495:9: sparse:     got struct sched_domain [noderef] __rcu *parent
   kernel/sched/deadline.c:2164: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:2164:14: sparse:     expected struct task_struct *curr
   kernel/sched/deadline.c:2164:14: sparse:     got struct task_struct [noderef] __rcu *
   kernel/sched/deadline.c:2165: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:2165:15: sparse:     expected struct task_struct *donor
   kernel/sched/deadline.c:2165:15: sparse:     got struct task_struct [noderef] __rcu *
   kernel/sched/deadline.c:2240: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:2240:43: sparse:     expected struct task_struct *p
   kernel/sched/deadline.c:2240:43: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/deadline.c:2795: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:2795:38: sparse:     expected struct task_struct *tsk
   kernel/sched/deadline.c:2795:38: sparse:     got struct task_struct [noderef] __rcu *curr
   kernel/sched/deadline.c:2797: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:2797:23: sparse:     expected struct task_struct *p
   kernel/sched/deadline.c:2797:23: sparse:     got struct task_struct [noderef] __rcu *donor
   kernel/sched/deadline.c:2799: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:2799:44: sparse:     expected struct sched_dl_entity const *b
   kernel/sched/deadline.c:2799:44: sparse:     got struct sched_dl_entity [noderef] __rcu *
   kernel/sched/deadline.c:2986:23: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/deadline.c:2986:23: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/deadline.c:2986:23: sparse:    struct task_struct *
   kernel/sched/build_policy.c: note: in included file:
   kernel/sched/syscalls.c:206:22: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/syscalls.c:206:22: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/syscalls.c:206:22: sparse:    struct task_struct *
   kernel/sched/build_policy.c: note: in included file:
   kernel/sched/sched.h:2235:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2235:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2235:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2246:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2246:26: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2246:26: sparse:    struct task_struct *
   kernel/sched/sched.h:2235:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2235:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct *
   kernel/sched/sched.h:2246:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2246:26: sparse:    struct task_struct [noderef] __rcu *
   kernel/sched/sched.h:2246:26: sparse:    struct task_struct *
   kernel/sched/sched.h:2235:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
   kernel/sched/sched.h:2235:25: sparse:    struct task_struct [noderef] __rcu *

vim +1971 kernel/sched/rt.c

e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1922  
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1923  /*
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1924   * If the current CPU has more than one RT task, see if the non
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1925   * running task can migrate over to a CPU that is running a task
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1926   * of lesser priority.
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1927   */
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1928  static int push_rt_task(struct rq *rq, bool pull)
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1929  {
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1930  	struct task_struct *next_task;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1931  	struct rq *lowest_rq;
311e800e16f63d kernel/sched_rt.c Hillf Danton       2011-06-16  1932  	int ret = 0;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1933  
a22d7fc187ed99 kernel/sched_rt.c Gregory Haskins    2008-01-25  1934  	if (!rq->rt.overloaded)
a22d7fc187ed99 kernel/sched_rt.c Gregory Haskins    2008-01-25  1935  		return 0;
a22d7fc187ed99 kernel/sched_rt.c Gregory Haskins    2008-01-25  1936  
917b627d4d981d kernel/sched_rt.c Gregory Haskins    2008-12-29  1937  	next_task = pick_next_pushable_task(rq);
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1938  	if (!next_task)
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1939  		return 0;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1940  
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1941  retry:
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1942  	/*
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1943  	 * It's possible that the next_task slipped in of
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1944  	 * higher priority than current. If that's the case
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1945  	 * just reschedule current.
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1946  	 */
af0c8b2bf67b25 kernel/sched/rt.c Peter Zijlstra     2024-10-09  1947  	if (unlikely(next_task->prio < rq->donor->prio)) {
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1948  		resched_curr(rq);
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1949  		return 0;
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1950  	}
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1951  
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1952  	if (is_migration_disabled(next_task)) {
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1953  		struct task_struct *push_task = NULL;
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1954  		int cpu;
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1955  
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1956  		if (!pull || rq->push_busy)
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1957  			return 0;
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1958  
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1959  		/*
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1960  		 * Invoking find_lowest_rq() on anything but an RT task doesn't
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1961  		 * make sense. Per the above priority check, curr has to
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1962  		 * be of higher priority than next_task, so no need to
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1963  		 * reschedule when bailing out.
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1964  		 *
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1965  		 * Note that the stoppers are masqueraded as SCHED_FIFO
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1966  		 * (cf. sched_set_stop_task()), so we can't rely on rt_task().
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1967  		 */
af0c8b2bf67b25 kernel/sched/rt.c Peter Zijlstra     2024-10-09  1968  		if (rq->donor->sched_class != &rt_sched_class)
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1969  			return 0;
49bef33e4b87b7 kernel/sched/rt.c Valentin Schneider 2022-01-27  1970  
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28 @1971  		cpu = find_lowest_rq(rq->curr);
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1972  		if (cpu == -1 || cpu == rq->cpu)
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1973  			return 0;
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1974  
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1975  		/*
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1976  		 * Given we found a CPU with lower priority than @next_task,
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1977  		 * therefore it should be running. However we cannot migrate it
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1978  		 * to this other CPU, instead attempt to push the current
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1979  		 * running task on this CPU away.
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1980  		 */
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1981  		push_task = get_push_task(rq);
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1982  		if (push_task) {
f0498d2a54e796 kernel/sched/rt.c Peter Zijlstra     2023-10-10  1983  			preempt_disable();
5cb9eaa3d274f7 kernel/sched/rt.c Peter Zijlstra     2020-11-17  1984  			raw_spin_rq_unlock(rq);
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1985  			stop_one_cpu_nowait(rq->cpu, push_cpu_stop,
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1986  					    push_task, &rq->push_work);
f0498d2a54e796 kernel/sched/rt.c Peter Zijlstra     2023-10-10  1987  			preempt_enable();
5cb9eaa3d274f7 kernel/sched/rt.c Peter Zijlstra     2020-11-17  1988  			raw_spin_rq_lock(rq);
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1989  		}
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1990  
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1991  		return 0;
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1992  	}
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  1993  
9ebc6053814d37 kernel/sched/rt.c Yangtao Li         2018-11-03  1994  	if (WARN_ON(next_task == rq->curr))
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1995  		return 0;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1996  
697f0a487f294e kernel/sched_rt.c Gregory Haskins    2008-01-25  1997  	/* We might release rq lock */
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1998  	get_task_struct(next_task);
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  1999  
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2000  	/* find_lock_lowest_rq locks the rq if found */
697f0a487f294e kernel/sched_rt.c Gregory Haskins    2008-01-25  2001  	lowest_rq = find_lock_lowest_rq(next_task, rq);
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2002  	if (!lowest_rq) {
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2003  		struct task_struct *task;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2004  		/*
311e800e16f63d kernel/sched_rt.c Hillf Danton       2011-06-16  2005  		 * find_lock_lowest_rq releases rq->lock
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2006  		 * so it is possible that next_task has migrated.
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2007  		 *
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2008  		 * We need to make sure that the task is still on the same
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2009  		 * run-queue and is also still the next task eligible for
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2010  		 * pushing.
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2011  		 */
917b627d4d981d kernel/sched_rt.c Gregory Haskins    2008-12-29  2012  		task = pick_next_pushable_task(rq);
de16b91effdbf5 kernel/sched/rt.c Byungchul Park     2017-05-12  2013  		if (task == next_task) {
917b627d4d981d kernel/sched_rt.c Gregory Haskins    2008-12-29  2014  			/*
311e800e16f63d kernel/sched_rt.c Hillf Danton       2011-06-16  2015  			 * The task hasn't migrated, and is still the next
311e800e16f63d kernel/sched_rt.c Hillf Danton       2011-06-16  2016  			 * eligible task, but we failed to find a run-queue
311e800e16f63d kernel/sched_rt.c Hillf Danton       2011-06-16  2017  			 * to push it to.  Do not retry in this case, since
97fb7a0a8944bd kernel/sched/rt.c Ingo Molnar        2018-03-03  2018  			 * other CPUs will pull from us when ready.
917b627d4d981d kernel/sched_rt.c Gregory Haskins    2008-12-29  2019  			 */
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2020  			goto out;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2021  		}
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2022  
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2023  		if (!task)
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2024  			/* No more tasks, just exit */
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2025  			goto out;
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2026  
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2027  		/*
1563513d34ed4b kernel/sched_rt.c Gregory Haskins    2008-12-29  2028  		 * Something has shifted, try again.
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2029  		 */
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2030  		put_task_struct(next_task);
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2031  		next_task = task;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2032  		goto retry;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2033  	}
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2034  
2b05a0b4c08ffd kernel/sched/rt.c Connor O'Brien     2024-10-09  2035  	move_queued_task_locked(rq, lowest_rq, next_task);
8875125efe8402 kernel/sched/rt.c Kirill Tkhai       2014-06-29  2036  	resched_curr(lowest_rq);
a7c81556ec4d34 kernel/sched/rt.c Peter Zijlstra     2020-09-28  2037  	ret = 1;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2038  
1b12bbc747560e kernel/sched_rt.c Peter Zijlstra     2008-08-11  2039  	double_unlock_balance(rq, lowest_rq);
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2040  out:
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2041  	put_task_struct(next_task);
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2042  
311e800e16f63d kernel/sched_rt.c Hillf Danton       2011-06-16  2043  	return ret;
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2044  }
e8fa136262e112 kernel/sched_rt.c Steven Rostedt     2008-01-25  2045  

:::::: The code at line 1971 was first introduced by commit
:::::: a7c81556ec4d341dfdbf2cc478ead89d73e474a7 sched: Fix migrate_disable() vs rt/dl balancing

:::::: TO: Peter Zijlstra <peterz@...radead.org>
:::::: CC: Peter Zijlstra <peterz@...radead.org>

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ