tree:
https://android.googlesource.com/kernel/common android-mainline
head: 9a81ce5c7163581153905c037693a7e17df4888b
commit: 6b0a9dc6df8d8be21c8d178a01e0711b0fe6ce73 [4/6] ANDROID: GKI: core: Export for
runqueues
config: x86_64-randconfig-s022-20200812 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.2-168-g9554805c-dirty
git checkout 6b0a9dc6df8d8be21c8d178a01e0711b0fe6ce73
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
> kernel/sched/core.c:190:22: sparse: sparse: incorrect type in
initializer (different address spaces) @@ expected void const [noderef] __percpu
*__vpp_verify @@ got struct rq * @@
> kernel/sched/core.c:190:22: sparse: expected void const [noderef] __percpu
*__vpp_verify
> kernel/sched/core.c:190:22: sparse: got struct rq *
kernel/sched/core.c:192:21: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:192:21: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:192:21: sparse: got struct rq *
kernel/sched/core.c:214:22: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:214:22: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:214:22: sparse: got struct rq *
kernel/sched/core.c:233:21: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:233:21: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:233:21: sparse: got struct rq *
kernel/sched/core.c:613:38: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected struct task_struct *curr @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/core.c:613:38: sparse: expected struct task_struct *curr
kernel/sched/core.c:613:38: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:637:25: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:637:25: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:637:25: sparse: got struct rq *
kernel/sched/core.c:1706:33: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected struct task_struct *p @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/core.c:1706:33: sparse: expected struct task_struct *p
kernel/sched/core.c:1706:33: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:1706:68: sparse: sparse: incorrect type in argument 1 (different
address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct
[noderef] __rcu *curr @@
kernel/sched/core.c:1706:68: sparse: expected struct task_struct *tsk
kernel/sched/core.c:1706:68: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:1756:14: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:1756:14: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:1756:14: sparse: got struct rq *
kernel/sched/core.c:1802:25: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:1802:25: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:1802:25: sparse: got struct rq *
kernel/sched/core.c:1824:13: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:1824:13: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:1824:13: sparse: got struct rq *
kernel/sched/core.c:1849:25: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:1849:25: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:1849:25: sparse: got struct rq *
kernel/sched/core.c:2028:26: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2028:26: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2028:26: sparse: got struct rq *
kernel/sched/core.c:2029:26: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2029:26: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2029:26: sparse: got struct rq *
kernel/sched/core.c:2066:18: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2066:18: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2066:18: sparse: got struct rq *
kernel/sched/core.c:2067:18: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2067:18: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2067:18: sparse: got struct rq *
kernel/sched/core.c:2168:22: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2168:22: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2168:22: sparse: got struct rq *
kernel/sched/core.c:2398:40: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2398:40: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2398:40: sparse: got struct rq *
kernel/sched/core.c:2414:9: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2414:9: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2414:9: sparse: got struct rq *
kernel/sched/core.c:2443:14: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2443:14: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2443:14: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
kernel/sched/core.c:2454:17: sparse: sparse: incorrect type in initializer (different
address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got
struct rq * @@
kernel/sched/core.c:2454:17: sparse: expected void const [noderef] __percpu
*__vpp_verify
kernel/sched/core.c:2454:17: sparse: got struct rq *
vim +190 kernel/sched/core.c
fa85ae2418e684 kernel/sched.c Peter Zijlstra 2008-01-25 84
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 85
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 86 /*
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 87 * Serialization
rules:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 88 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 89 * Lock order:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 90 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 91 * p->pi_lock
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 92 * rq->lock
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 93 *
hrtimer_cpu_base->lock (hrtimer_start() for bandwidth controls)
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 94 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 95 * rq1->lock
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 96 * rq2->lock
where: rq1 < rq2
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 97 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 98 * Regular state:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 99 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 100 * Normal scheduling
state is serialized by rq->lock. __schedule() takes the
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 101 * local CPU's
rq->lock, it optionally removes the task from the runqueue and
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 102 * always looks at the
local rq data structures to find the most elegible task
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 103 * to run next.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 104 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 105 * Task enqueue is also
under rq->lock, possibly taken from another CPU.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 106 * Wakeups from another
LLC domain might use an IPI to transfer the enqueue to
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 107 * the local CPU to
avoid bouncing the runqueue state around [ see
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 108 *
ttwu_queue_wakelist() ]
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 109 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 110 * Task wakeup,
specifically wakeups that involve migration, are horribly
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 111 * complicated to avoid
having to take two rq->locks.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 112 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 113 * Special state:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 114 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 115 * System-calls and
anything external will use task_rq_lock() which acquires
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 116 * both p->pi_lock
and rq->lock. As a consequence the state they change is
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 117 * stable while holding
either lock:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 118 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 119 * -
sched_setaffinity()/
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 120 *
set_cpus_allowed_ptr(): p->cpus_ptr, p->nr_cpus_allowed
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 121 * -
set_user_nice(): p->se.load, p->*prio
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 122 * -
__sched_setscheduler(): p->sched_class, p->policy, p->*prio,
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 123 * p->se.load,
p->rt_priority,
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 124
* p->dl.dl_{runtime, deadline, period, flags, bw, density}
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 125 * -
sched_setnuma(): p->numa_preferred_nid
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 126 * -
sched_move_task()/
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 127 *
cpu_cgroup_fork(): p->sched_task_group
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 128 * -
uclamp_update_active() p->uclamp*
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 129 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 130 * p->state <-
TASK_*:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 131 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 132 * is changed
locklessly using set_current_state(), __set_current_state() or
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 133 *
set_special_state(), see their respective comments, or by
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 134 * try_to_wake_up().
This latter uses p->pi_lock to serialize against
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 135 * concurrent self.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 136 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 137 * p->on_rq <- {
0, 1 = TASK_ON_RQ_QUEUED, 2 = TASK_ON_RQ_MIGRATING }:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 138 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 139 * is set by
activate_task() and cleared by deactivate_task(), under
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 140 * rq->lock.
Non-zero indicates the task is runnable, the special
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 141 * ON_RQ_MIGRATING
state is used for migration without holding both
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 142 * rq->locks. It
indicates task_cpu() is not stable, see task_rq_lock().
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 143 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 144 * p->on_cpu <- {
0, 1 }:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 145 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 146 * is set by
prepare_task() and cleared by finish_task() such that it will be
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 147 * set before p is
scheduled-in and cleared after p is scheduled-out, both
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 148 * under rq->lock.
Non-zero indicates the task is running on its CPU.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 149 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 150 * [ The astute
reader will observe that it is possible for two tasks on one
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 151 * CPU to have
->on_cpu = 1 at the same time. ]
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 152 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 153 * task_cpu(p): is
changed by set_task_cpu(), the rules are:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 154 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 155 * - Don't call
set_task_cpu() on a blocked task:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 156 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 157 * We don't care
what CPU we're not running on, this simplifies hotplug,
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 158 * the CPU
assignment of blocked tasks isn't required to be valid.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 159 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 160 * - for
try_to_wake_up(), called under p->pi_lock:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 161 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 162 * This allows
try_to_wake_up() to only take one rq->lock, see its comment.
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 163 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 164 * - for migration
called under rq->lock:
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 165 * [ see
task_on_rq_migrating() in task_rq_lock() ]
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 166 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 167 * o
move_queued_task()
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 168 * o detach_task()
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 169 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 170 * - for migration
called under double_rq_lock():
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 171 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 172 * o
__migrate_swap_task()
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 173 * o push_rt_task()
/ pull_rt_task()
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 174 * o push_dl_task()
/ pull_dl_task()
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 175 * o
dl_task_offline_migration()
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 176 *
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 177 */
58877d347b58c9 kernel/sched/core.c Peter Zijlstra 2020-07-02 178
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 179 /*
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 180 * __task_rq_lock -
lock the rq @p resides on.
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 181 */
eb58075149b7f0 kernel/sched/core.c Peter Zijlstra 2015-07-31 182 struct rq
*__task_rq_lock(struct task_struct *p, struct rq_flags *rf)
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 183
__acquires(rq->lock)
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 184 {
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 185 struct rq *rq;
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 186
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 187
lockdep_assert_held(&p->pi_lock);
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 188
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 189 for (;;) {
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 @190 rq = task_rq(p);
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 191
raw_spin_lock(&rq->lock);
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 192 if (likely(rq ==
task_rq(p) && !task_on_rq_migrating(p))) {
d8ac897137a230 kernel/sched/core.c Matt Fleming 2016-09-21 193 rq_pin_lock(rq,
rf);
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 194 return rq;
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 195 }
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 196
raw_spin_unlock(&rq->lock);
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 197
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 198 while
(unlikely(task_on_rq_migrating(p)))
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 199 cpu_relax();
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 200 }
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 201 }
3e71a462dd483c kernel/sched/core.c Peter Zijlstra 2016-04-28 202
:::::: The code at line 190 was first introduced by commit
:::::: 3e71a462dd483ce508a723356b293731e7d788ea sched/core: Move task_rq_lock() out of
line
:::::: TO: Peter Zijlstra <peterz(a)infradead.org>
:::::: CC: Ingo Molnar <mingo(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org