CC: kbuild-all(a)lists.01.org TO: "Joel Fernandes (Google)" CC: Peter Zijlstra tree: https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git sched/core-sched head: ead81f232b5b31ab6240a719ff3bad564c3f0e4c commit: 6f7eefbb382e8c5fa56180f8cd5becb5f882a3d6 [10/11] sched/fair: Snapshot the min_vruntime of CPUs on force idle :::::: branch date: 24 hours ago :::::: commit date: 24 hours ago config: x86_64-randconfig-m001-20210108 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: kernel/sched/core.c:5262 pick_next_task() error: we previously assumed 'next' could be null (see line 5258) vim +/next +5262 kernel/sched/core.c 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5175) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5176 static struct task_struct * 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5177 pick_next_task(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5178 { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5179 struct task_struct *next, *max = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5180 const struct sched_class *class; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5181 const struct cpumask *smt_mask; 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5182) bool fi_before = false; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5183 bool need_sync; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5184 int i, j, cpu; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5185 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5186 if (!sched_core_enabled(rq)) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5187 return __pick_next_task(rq, prev, rf); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5188 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5189 cpu = cpu_of(rq); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5190 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5191 /* Stopper task is switching into idle, no need core-wide selection. */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5192 if (cpu_is_offline(cpu)) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5193 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5194 * Reset core_pick so that we don't enter the fastpath when 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5195 * coming online. core_pick would already be migrated to 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5196 * another cpu during offline. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5197 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5198 rq->core_pick = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5199 return __pick_next_task(rq, prev, rf); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5200 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5201 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5202 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5203 * If there were no {en,de}queues since we picked (IOW, the task 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5204 * pointers are all still valid), and we haven't scheduled the last 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5205 * pick yet, do so now. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5206 * 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5207 * rq->core_pick can be NULL if no selection was made for a CPU because 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5208 * it was either offline or went offline during a sibling's core-wide 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5209 * selection. In this case, do a core-wide selection. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5210 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5211 if (rq->core->core_pick_seq == rq->core->core_task_seq && 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5212 rq->core->core_pick_seq != rq->core_sched_seq && 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5213 rq->core_pick) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5214 WRITE_ONCE(rq->core_sched_seq, rq->core->core_pick_seq); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5215 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5216 next = rq->core_pick; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5217 if (next != prev) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5218 put_prev_task(rq, prev); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5219 set_next_task(rq, next); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5220 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5221 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5222 rq->core_pick = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5223 return next; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5224 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5225 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5226 put_prev_task_balance(rq, prev, rf); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5227 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5228 smt_mask = cpu_smt_mask(cpu); d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5229) need_sync = !!rq->core->core_cookie; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5230) d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5231) /* reset state */ d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5232) rq->core->core_cookie = 0UL; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5233) if (rq->core->core_forceidle) { d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5234) need_sync = true; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5235) fi_before = true; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5236) rq->core->core_forceidle = false; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5237) } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5238 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5239 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5240 * core->core_task_seq, core->core_pick_seq, rq->core_sched_seq 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5241 * 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5242 * @task_seq guards the task state ({en,de}queues) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5243 * @pick_seq is the @task_seq we did a selection on 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5244 * @sched_seq is the @pick_seq we scheduled 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5245 * 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5246 * However, preemptions can cause multiple picks on the same task set. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5247 * 'Fix' this by also increasing @task_seq for every pick. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5248 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5249 rq->core->core_task_seq++; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5250 d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5251) /* d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5252) * Optimize for common case where this CPU has no cookies d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5253) * and there are no cookied tasks running on siblings. d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5254) */ d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5255) if (!need_sync) { d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5256) for_each_class(class) { d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5257) next = class->pick_task(rq); d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 @5258) if (next) d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5259) break; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5260) } d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5261) d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 @5262) if (!next->core_cookie) { d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5263) rq->core_pick = NULL; 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5264) /* 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5265) * For robustness, update the min_vruntime_fi for 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5266) * unconstrained picks as well. 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5267) */ 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5268) WARN_ON_ONCE(fi_before); 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5269) task_vruntime_update(rq, next, false); d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5270) goto done; d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5271) } 651b592b4b80bae Vineeth Pillai 2020-11-17 5272 } d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5273) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5274 for_each_cpu(i, smt_mask) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5275 struct rq *rq_i = cpu_rq(i); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5276 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5277 rq_i->core_pick = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5278 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5279 if (i != cpu) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5280 update_rq_clock(rq_i); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5281 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5282 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5283 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5284 * Try and select tasks for each sibling in decending sched_class 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5285 * order. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5286 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5287 for_each_class(class) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5288 again: 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5289 for_each_cpu_wrap(i, smt_mask, cpu) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5290 struct rq *rq_i = cpu_rq(i); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5291 struct task_struct *p; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5292 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5293 if (rq_i->core_pick) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5294 continue; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5295 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5296 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5297 * If this sibling doesn't yet have a suitable task to 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5298 * run; ask for the most elegible task, given the 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5299 * highest priority task already selected for this 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5300 * core. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5301 */ 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5302) p = pick_task(rq_i, class, max, fi_before); d7bbf5f9ab91135 Joel Fernandes (Google 2020-11-17 5303) if (!p) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5304 continue; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5305 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5306 rq_i->core_pick = p; 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5307) if (rq_i->idle == p && rq_i->nr_running) { 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5308) rq->core->core_forceidle = true; 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5309) if (!fi_before) 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5310) rq->core->core_forceidle_seq++; 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5311) } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5312 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5313 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5314 * If this new candidate is of higher priority than the 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5315 * previous; and they're incompatible; we need to wipe 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5316 * the slate and start over. pick_task makes sure that 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5317 * p's priority is more than max if it doesn't match 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5318 * max's cookie. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5319 * 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5320 * NOTE: this is a linear max-filter and is thus bounded 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5321 * in execution time. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5322 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5323 if (!max || !cookie_match(max, p)) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5324 struct task_struct *old_max = max; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5325 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5326 rq->core->core_cookie = p->core_cookie; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5327 max = p; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5328 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5329 if (old_max) { 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5330) rq->core->core_forceidle = false; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5331 for_each_cpu(j, smt_mask) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5332 if (j == i) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5333 continue; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5334 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5335 cpu_rq(j)->core_pick = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5336 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5337 goto again; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5338 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5339 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5340 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5341 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5342 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5343 rq->core->core_pick_seq = rq->core->core_task_seq; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5344 next = rq->core_pick; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5345 rq->core_sched_seq = rq->core->core_pick_seq; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5346 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5347 /* Something should have been selected for current CPU */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5348 WARN_ON_ONCE(!next); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5349 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5350 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5351 * Reschedule siblings 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5352 * 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5353 * NOTE: L1TF -- at this point we're no longer running the old task and 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5354 * sending an IPI (below) ensures the sibling will no longer be running 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5355 * their task. This ensures there is no inter-sibling overlap between 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5356 * non-matching user state. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5357 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5358 for_each_cpu(i, smt_mask) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5359 struct rq *rq_i = cpu_rq(i); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5360 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5361 /* 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5362 * An online sibling might have gone offline before a task 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5363 * could be picked for it, or it might be offline but later 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5364 * happen to come online, but its too late and nothing was 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5365 * picked for it. That's Ok - it will pick tasks for itself, 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5366 * so ignore it. 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5367 */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5368 if (!rq_i->core_pick) 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5369 continue; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5370 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5371) /* 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5372) * Update for new !FI->FI transitions, or if continuing to be in !FI: 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5373) * fi_before fi update? 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5374) * 0 0 1 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5375) * 0 1 1 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5376) * 1 0 1 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5377) * 1 1 0 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5378) */ 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5379) if (!(fi_before && rq->core->core_forceidle)) 6f7eefbb382e8c5 Joel Fernandes (Google 2020-11-17 5380) task_vruntime_update(rq_i, rq_i->core_pick, rq->core->core_forceidle); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5381 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5382 if (i == cpu) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5383 rq_i->core_pick = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5384 continue; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5385 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5386 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5387 /* Did we break L1TF mitigation requirements? */ 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5388 WARN_ON_ONCE(!cookie_match(next, rq_i->core_pick)); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5389 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5390 if (rq_i->curr == rq_i->core_pick) { 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5391 rq_i->core_pick = NULL; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5392 continue; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5393 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5394 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5395 resched_curr(rq_i); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5396 } 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5397 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5398 done: 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5399 set_next_task(rq, next); 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5400 return next; 2d8ac06b6ca3a0f Peter Zijlstra 2020-11-17 5401 } 2230396a2aab443 Peter Zijlstra 2020-11-17 5402 :::::: The code at line 5262 was first introduced by commit :::::: d7bbf5f9ab91135f8e39144df4189ae963e63cf8 sched: Simplify the core pick loop for optimized case :::::: TO: Joel Fernandes (Google) :::::: CC: Peter Zijlstra --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org