diff options
| author | Luis Henriques <henrix@sapo.pt> | 2009-03-16 15:59:02 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-03-17 07:04:41 -0400 |
| commit | 708dc5125309cd33c5daaad3026cc4ae6ef39c8b (patch) | |
| tree | 7a99f6b210ebba4b42123a933345e464e3052eef | |
| parent | 80dd99b368cf6501be88ab517bbbb5bf352b75b8 (diff) | |
sched: small optimisation of can_migrate_task()
There were 3 invocations of task_hot() in can_migrate_task().
Replace these 3 invocations by only one invocation, cached in
a local variable.
Signed-off-by: Luis Henriques <henrix@sapo.pt>
LKML-Reference: <20090316195902.GA6197@hades.domain.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | kernel/sched.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 489e7d926408..d2dfe4c1a225 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -3002,6 +3002,7 @@ int can_migrate_task(struct task_struct *p, struct rq *rq, int this_cpu, | |||
| 3002 | struct sched_domain *sd, enum cpu_idle_type idle, | 3002 | struct sched_domain *sd, enum cpu_idle_type idle, |
| 3003 | int *all_pinned) | 3003 | int *all_pinned) |
| 3004 | { | 3004 | { |
| 3005 | int tsk_cache_hot = 0; | ||
| 3005 | /* | 3006 | /* |
| 3006 | * We do not migrate tasks that are: | 3007 | * We do not migrate tasks that are: |
| 3007 | * 1) running (obviously), or | 3008 | * 1) running (obviously), or |
| @@ -3025,10 +3026,11 @@ int can_migrate_task(struct task_struct *p, struct rq *rq, int this_cpu, | |||
| 3025 | * 2) too many balance attempts have failed. | 3026 | * 2) too many balance attempts have failed. |
| 3026 | */ | 3027 | */ |
| 3027 | 3028 | ||
| 3028 | if (!task_hot(p, rq->clock, sd) || | 3029 | tsk_cache_hot = task_hot(p, rq->clock, sd); |
| 3029 | sd->nr_balance_failed > sd->cache_nice_tries) { | 3030 | if (!tsk_cache_hot || |
| 3031 | sd->nr_balance_failed > sd->cache_nice_tries) { | ||
| 3030 | #ifdef CONFIG_SCHEDSTATS | 3032 | #ifdef CONFIG_SCHEDSTATS |
| 3031 | if (task_hot(p, rq->clock, sd)) { | 3033 | if (tsk_cache_hot) { |
| 3032 | schedstat_inc(sd, lb_hot_gained[idle]); | 3034 | schedstat_inc(sd, lb_hot_gained[idle]); |
| 3033 | schedstat_inc(p, se.nr_forced_migrations); | 3035 | schedstat_inc(p, se.nr_forced_migrations); |
| 3034 | } | 3036 | } |
| @@ -3036,7 +3038,7 @@ int can_migrate_task(struct task_struct *p, struct rq *rq, int this_cpu, | |||
| 3036 | return 1; | 3038 | return 1; |
| 3037 | } | 3039 | } |
| 3038 | 3040 | ||
| 3039 | if (task_hot(p, rq->clock, sd)) { | 3041 | if (tsk_cache_hot) { |
| 3040 | schedstat_inc(p, se.nr_failed_migrations_hot); | 3042 | schedstat_inc(p, se.nr_failed_migrations_hot); |
| 3041 | return 0; | 3043 | return 0; |
| 3042 | } | 3044 | } |
