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