diff options
Diffstat (limited to 'kernel/sched/idle.c')
-rw-r--r-- | kernel/sched/idle.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index 80940939b733..54194d41035c 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c | |||
@@ -374,14 +374,25 @@ static void check_preempt_curr_idle(struct rq *rq, struct task_struct *p, int fl | |||
374 | resched_curr(rq); | 374 | resched_curr(rq); |
375 | } | 375 | } |
376 | 376 | ||
377 | static void put_prev_task_idle(struct rq *rq, struct task_struct *prev) | ||
378 | { | ||
379 | } | ||
380 | |||
381 | static void set_next_task_idle(struct rq *rq, struct task_struct *next) | ||
382 | { | ||
383 | update_idle_core(rq); | ||
384 | schedstat_inc(rq->sched_goidle); | ||
385 | } | ||
386 | |||
377 | static struct task_struct * | 387 | static struct task_struct * |
378 | pick_next_task_idle(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) | 388 | pick_next_task_idle(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) |
379 | { | 389 | { |
390 | struct task_struct *next = rq->idle; | ||
391 | |||
380 | put_prev_task(rq, prev); | 392 | put_prev_task(rq, prev); |
381 | update_idle_core(rq); | 393 | set_next_task_idle(rq, next); |
382 | schedstat_inc(rq->sched_goidle); | ||
383 | 394 | ||
384 | return rq->idle; | 395 | return next; |
385 | } | 396 | } |
386 | 397 | ||
387 | /* | 398 | /* |
@@ -397,10 +408,6 @@ dequeue_task_idle(struct rq *rq, struct task_struct *p, int flags) | |||
397 | raw_spin_lock_irq(&rq->lock); | 408 | raw_spin_lock_irq(&rq->lock); |
398 | } | 409 | } |
399 | 410 | ||
400 | static void put_prev_task_idle(struct rq *rq, struct task_struct *prev) | ||
401 | { | ||
402 | } | ||
403 | |||
404 | /* | 411 | /* |
405 | * scheduler tick hitting a task of our scheduling class. | 412 | * scheduler tick hitting a task of our scheduling class. |
406 | * | 413 | * |
@@ -413,10 +420,6 @@ static void task_tick_idle(struct rq *rq, struct task_struct *curr, int queued) | |||
413 | { | 420 | { |
414 | } | 421 | } |
415 | 422 | ||
416 | static void set_curr_task_idle(struct rq *rq) | ||
417 | { | ||
418 | } | ||
419 | |||
420 | static void switched_to_idle(struct rq *rq, struct task_struct *p) | 423 | static void switched_to_idle(struct rq *rq, struct task_struct *p) |
421 | { | 424 | { |
422 | BUG(); | 425 | BUG(); |
@@ -451,13 +454,13 @@ const struct sched_class idle_sched_class = { | |||
451 | 454 | ||
452 | .pick_next_task = pick_next_task_idle, | 455 | .pick_next_task = pick_next_task_idle, |
453 | .put_prev_task = put_prev_task_idle, | 456 | .put_prev_task = put_prev_task_idle, |
457 | .set_next_task = set_next_task_idle, | ||
454 | 458 | ||
455 | #ifdef CONFIG_SMP | 459 | #ifdef CONFIG_SMP |
456 | .select_task_rq = select_task_rq_idle, | 460 | .select_task_rq = select_task_rq_idle, |
457 | .set_cpus_allowed = set_cpus_allowed_common, | 461 | .set_cpus_allowed = set_cpus_allowed_common, |
458 | #endif | 462 | #endif |
459 | 463 | ||
460 | .set_curr_task = set_curr_task_idle, | ||
461 | .task_tick = task_tick_idle, | 464 | .task_tick = task_tick_idle, |
462 | 465 | ||
463 | .get_rr_interval = get_rr_interval_idle, | 466 | .get_rr_interval = get_rr_interval_idle, |