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 | } |