diff options
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 41541d79e3c8..dc85ceb90832 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -1294,6 +1294,10 @@ static void resched_task(struct task_struct *p) | |||
| 1294 | static void sched_rt_avg_update(struct rq *rq, u64 rt_delta) | 1294 | static void sched_rt_avg_update(struct rq *rq, u64 rt_delta) |
| 1295 | { | 1295 | { |
| 1296 | } | 1296 | } |
| 1297 | |||
| 1298 | static void sched_avg_update(struct rq *rq) | ||
| 1299 | { | ||
| 1300 | } | ||
| 1297 | #endif /* CONFIG_SMP */ | 1301 | #endif /* CONFIG_SMP */ |
| 1298 | 1302 | ||
| 1299 | #if BITS_PER_LONG == 32 | 1303 | #if BITS_PER_LONG == 32 |
| @@ -3182,6 +3186,8 @@ static void update_cpu_load(struct rq *this_rq) | |||
| 3182 | 3186 | ||
| 3183 | this_rq->cpu_load[i] = (old_load * (scale - 1) + new_load) >> i; | 3187 | this_rq->cpu_load[i] = (old_load * (scale - 1) + new_load) >> i; |
| 3184 | } | 3188 | } |
| 3189 | |||
| 3190 | sched_avg_update(this_rq); | ||
| 3185 | } | 3191 | } |
| 3186 | 3192 | ||
| 3187 | static void update_cpu_load_active(struct rq *this_rq) | 3193 | static void update_cpu_load_active(struct rq *this_rq) |
| @@ -3507,9 +3513,9 @@ void task_times(struct task_struct *p, cputime_t *ut, cputime_t *st) | |||
| 3507 | rtime = nsecs_to_cputime(p->se.sum_exec_runtime); | 3513 | rtime = nsecs_to_cputime(p->se.sum_exec_runtime); |
| 3508 | 3514 | ||
| 3509 | if (total) { | 3515 | if (total) { |
| 3510 | u64 temp; | 3516 | u64 temp = rtime; |
| 3511 | 3517 | ||
| 3512 | temp = (u64)(rtime * utime); | 3518 | temp *= utime; |
| 3513 | do_div(temp, total); | 3519 | do_div(temp, total); |
| 3514 | utime = (cputime_t)temp; | 3520 | utime = (cputime_t)temp; |
| 3515 | } else | 3521 | } else |
| @@ -3540,9 +3546,9 @@ void thread_group_times(struct task_struct *p, cputime_t *ut, cputime_t *st) | |||
| 3540 | rtime = nsecs_to_cputime(cputime.sum_exec_runtime); | 3546 | rtime = nsecs_to_cputime(cputime.sum_exec_runtime); |
| 3541 | 3547 | ||
| 3542 | if (total) { | 3548 | if (total) { |
| 3543 | u64 temp; | 3549 | u64 temp = rtime; |
| 3544 | 3550 | ||
| 3545 | temp = (u64)(rtime * cputime.utime); | 3551 | temp *= cputime.utime; |
| 3546 | do_div(temp, total); | 3552 | do_div(temp, total); |
| 3547 | utime = (cputime_t)temp; | 3553 | utime = (cputime_t)temp; |
| 3548 | } else | 3554 | } else |
| @@ -3865,8 +3871,16 @@ int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner) | |||
| 3865 | /* | 3871 | /* |
| 3866 | * Owner changed, break to re-assess state. | 3872 | * Owner changed, break to re-assess state. |
| 3867 | */ | 3873 | */ |
| 3868 | if (lock->owner != owner) | 3874 | if (lock->owner != owner) { |
| 3875 | /* | ||
| 3876 | * If the lock has switched to a different owner, | ||
| 3877 | * we likely have heavy contention. Return 0 to quit | ||
| 3878 | * optimistic spinning and not contend further: | ||
| 3879 | */ | ||
| 3880 | if (lock->owner) | ||
| 3881 | return 0; | ||
| 3869 | break; | 3882 | break; |
| 3883 | } | ||
| 3870 | 3884 | ||
| 3871 | /* | 3885 | /* |
| 3872 | * Is that owner really running on that cpu? | 3886 | * Is that owner really running on that cpu? |
