tree:
https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git sched/wip2
head: d30dd3f16ed52ccc4d9abe60d4c7bde2159bf4b3
commit: 654d4f9b26bf733bc9eddf18dd584ed5869ee307 [15/16] sched: Fix migrate_disable() vs
rt/dl balancing
:::::: branch date: 4 hours ago
:::::: commit date: 4 hours ago
config: i386-randconfig-s001-20201003 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-201-g24bdaac6-dirty
#
https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git/commit/?...
git remote add peterz-queue
https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git
git fetch --no-tags peterz-queue sched/wip2
git checkout 654d4f9b26bf733bc9eddf18dd584ed5869ee307
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
echo
echo "sparse warnings: (new ones prefixed by >>)"
echo
kernel/sched/rt.c:912:70: sparse: sparse: incompatible types in comparison expression
(different address spaces):
kernel/sched/rt.c:912:70: sparse: struct task_struct [noderef] __rcu *
kernel/sched/rt.c:912:70: sparse: struct task_struct *
kernel/sched/rt.c:2211:25: sparse: sparse: incompatible types in comparison expression
(different address spaces):
kernel/sched/rt.c:2211:25: sparse: struct task_struct *
kernel/sched/rt.c:2211:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/rt.c:529:54: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected struct task_struct *curr @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/rt.c:529:54: sparse: expected struct task_struct *curr
kernel/sched/rt.c:529:54: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:998:38: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected struct task_struct *curr @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/rt.c:998:38: sparse: expected struct task_struct *curr
kernel/sched/rt.c:998:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:1424: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:1424:31: sparse: expected struct task_struct *p
kernel/sched/rt.c:1424:31: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:1741: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:1741:9: sparse: expected struct sched_domain *[assigned] sd
kernel/sched/rt.c:1741:9: sparse: got struct sched_domain [noderef] __rcu *parent
kernel/sched/rt.c:1444:14: sparse: sparse: incorrect type in assignment (different
address spaces) @@ expected struct task_struct *curr @@ got struct task_struct
[noderef] __rcu *const volatile @@
kernel/sched/rt.c:1444:14: sparse: expected struct task_struct *curr
kernel/sched/rt.c:1444:14: sparse: got struct task_struct [noderef] __rcu *const
volatile
kernel/sched/rt.c:1509:45: 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:1509:45: sparse: expected struct task_struct *p
kernel/sched/rt.c:1509:45: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:1570:67: 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:1570:67: sparse: expected struct task_struct *tsk
kernel/sched/rt.c:1570:67: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:1883: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:1883:40: sparse: expected struct
task_struct *task
kernel/sched/rt.c:1883:40: sparse: got struct task_struct
[noderef] __rcu *curr
kernel/sched/rt.c:1904:13: sparse: sparse: incompatible types in comparison expression
(different address spaces):
kernel/sched/rt.c:1904:13: sparse: struct task_struct *
kernel/sched/rt.c:1904:13: sparse: struct task_struct [noderef] __rcu *
kernel/sched/rt.c:2262: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:2262:54: sparse: expected struct task_struct *tsk
kernel/sched/rt.c:2262:54: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:2264:40: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected struct task_struct *p @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/rt.c:2264:40: sparse: expected struct task_struct *p
kernel/sched/rt.c:2264:40: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:2264:61: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected struct task_struct *p @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/rt.c:2264:61: sparse: expected struct task_struct *p
kernel/sched/rt.c:2264:61: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/rt.c:2335:46: sparse: sparse: incompatible types in comparison expression
(different address spaces):
kernel/sched/rt.c:2335:46: sparse: struct task_struct [noderef] __rcu *
kernel/sched/rt.c:2335:46: sparse: struct task_struct *
kernel/sched/rt.c:2355:22: sparse: sparse: incompatible types in comparison expression
(different address spaces):
kernel/sched/rt.c:2355:22: sparse: struct task_struct [noderef] __rcu *
kernel/sched/rt.c:2355:22: sparse: struct task_struct *
kernel/sched/rt.c: note: in included file:
kernel/sched/sched.h:1716:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1716:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1716:25: sparse: struct task_struct *
kernel/sched/sched.h:1716:25: sparse: sparse: incompatible types in comparison
expression (different address spaces):
kernel/sched/sched.h:1716:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:1716:25: sparse: struct task_struct *
vim +1883 kernel/sched/rt.c
917b627d4d981dc kernel/sched_rt.c Gregory Haskins 2008-12-29 1856
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1857 /*
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1858 * If the current CPU
has more than one RT task, see if the non
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1859 * running task can
migrate over to a CPU that is running a task
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1860 * of lesser
priority.
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1861 */
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1862 static int
push_rt_task(struct rq *rq, bool pull)
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1863 {
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1864 struct task_struct
*next_task;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1865 struct rq
*lowest_rq;
311e800e16f63d9 kernel/sched_rt.c Hillf Danton 2011-06-16 1866 int ret = 0;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1867
a22d7fc187ed996 kernel/sched_rt.c Gregory Haskins 2008-01-25 1868 if
(!rq->rt.overloaded)
a22d7fc187ed996 kernel/sched_rt.c Gregory Haskins 2008-01-25 1869 return 0;
a22d7fc187ed996 kernel/sched_rt.c Gregory Haskins 2008-01-25 1870
917b627d4d981dc kernel/sched_rt.c Gregory Haskins 2008-12-29 1871 next_task =
pick_next_pushable_task(rq);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1872 if (!next_task)
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1873 return 0;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1874
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1875 retry:
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1876 if
(is_migration_disabled(next_task)) {
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1877 struct task_struct
*push_task = NULL;
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1878 int cpu;
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1879
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1880 if (!pull ||
rq->push_busy)
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1881 return 0;
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1882
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 @1883 cpu =
find_lowest_rq(rq->curr);
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1884 if (cpu == -1 || cpu
== rq->cpu)
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1885 return 0;
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1886
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1887 /*
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1888 * Given we found a
CPU with lower priority than @next_task,
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1889 * therefore it
should be running. However we cannot migrate it
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1890 * to this other
CPU, instead attempt to push the current
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1891 * running task on
this CPU away.
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1892 */
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1893 push_task =
get_push_task(rq);
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1894 if (push_task) {
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1895
raw_spin_unlock(&rq->lock);
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1896
stop_one_cpu_nowait(rq->cpu, push_cpu_stop,
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1897 push_task,
&rq->push_work);
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1898
raw_spin_lock(&rq->lock);
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1899 }
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1900
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1901 return 0;
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1902 }
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1903
9ebc6053814d37b kernel/sched/rt.c Yangtao Li 2018-11-03 1904 if (WARN_ON(next_task
== rq->curr))
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1905 return 0;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1906
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1907 /*
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1908 * It's possible
that the next_task slipped in of
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1909 * higher priority
than current. If that's the case
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1910 * just reschedule
current.
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1911 */
697f0a487f294e6 kernel/sched_rt.c Gregory Haskins 2008-01-25 1912 if
(unlikely(next_task->prio < rq->curr->prio)) {
8875125efe8402c kernel/sched/rt.c Kirill Tkhai 2014-06-29 1913 resched_curr(rq);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1914 return 0;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1915 }
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1916
697f0a487f294e6 kernel/sched_rt.c Gregory Haskins 2008-01-25 1917 /* We might release
rq lock */
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1918
get_task_struct(next_task);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1919
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1920 /*
find_lock_lowest_rq locks the rq if found */
697f0a487f294e6 kernel/sched_rt.c Gregory Haskins 2008-01-25 1921 lowest_rq =
find_lock_lowest_rq(next_task, rq);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1922 if (!lowest_rq) {
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1923 struct task_struct
*task;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1924 /*
311e800e16f63d9 kernel/sched_rt.c Hillf Danton 2011-06-16 1925 *
find_lock_lowest_rq releases rq->lock
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1926 * so it is possible
that next_task has migrated.
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1927 *
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1928 * We need to make
sure that the task is still on the same
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1929 * run-queue and is
also still the next task eligible for
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1930 * pushing.
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1931 */
917b627d4d981dc kernel/sched_rt.c Gregory Haskins 2008-12-29 1932 task =
pick_next_pushable_task(rq);
de16b91effdbf5a kernel/sched/rt.c Byungchul Park 2017-05-12 1933 if (task ==
next_task) {
917b627d4d981dc kernel/sched_rt.c Gregory Haskins 2008-12-29 1934 /*
311e800e16f63d9 kernel/sched_rt.c Hillf Danton 2011-06-16 1935 * The task
hasn't migrated, and is still the next
311e800e16f63d9 kernel/sched_rt.c Hillf Danton 2011-06-16 1936 * eligible task,
but we failed to find a run-queue
311e800e16f63d9 kernel/sched_rt.c Hillf Danton 2011-06-16 1937 * to push it to.
Do not retry in this case, since
97fb7a0a8944bd6 kernel/sched/rt.c Ingo Molnar 2018-03-03 1938 * other CPUs will
pull from us when ready.
917b627d4d981dc kernel/sched_rt.c Gregory Haskins 2008-12-29 1939 */
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1940 goto out;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1941 }
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1942
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1943 if (!task)
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1944 /* No more tasks,
just exit */
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1945 goto out;
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1946
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1947 /*
1563513d34ed4b1 kernel/sched_rt.c Gregory Haskins 2008-12-29 1948 * Something has
shifted, try again.
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1949 */
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1950
put_task_struct(next_task);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1951 next_task = task;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1952 goto retry;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1953 }
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1954
697f0a487f294e6 kernel/sched_rt.c Gregory Haskins 2008-01-25 1955 deactivate_task(rq,
next_task, 0);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1956
set_task_cpu(next_task, lowest_rq->cpu);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1957
activate_task(lowest_rq, next_task, 0);
8875125efe8402c kernel/sched/rt.c Kirill Tkhai 2014-06-29 1958
resched_curr(lowest_rq);
654d4f9b26bf733 kernel/sched/rt.c Peter Zijlstra 2020-09-28 1959 ret = 1;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1960
1b12bbc747560ea kernel/sched_rt.c Peter Zijlstra 2008-08-11 1961
double_unlock_balance(rq, lowest_rq);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1962 out:
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1963
put_task_struct(next_task);
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1964
311e800e16f63d9 kernel/sched_rt.c Hillf Danton 2011-06-16 1965 return ret;
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1966 }
e8fa136262e1121 kernel/sched_rt.c Steven Rostedt 2008-01-25 1967
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org