Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=08e2388aa1e40cb06f7d04ac621e2ae94e1d8fdc Commit: 08e2388aa1e40cb06f7d04ac621e2ae94e1d8fdc Parent: 1091985b482fdd577a5c511059b9d7b4467bd15d Author: Ingo Molnar <[EMAIL PROTECTED]> AuthorDate: Mon Oct 15 17:00:04 2007 +0200 Committer: Ingo Molnar <[EMAIL PROTECTED]> CommitDate: Mon Oct 15 17:00:04 2007 +0200
sched: clean up calc_weighted() clean up calc_weighted() - we always use the normalized shift so it's not needed to pass that in. Also, push the non-nice0 branch into the function. Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]> Signed-off-by: Mike Galbraith <[EMAIL PROTECTED]> Reviewed-by: Thomas Gleixner <[EMAIL PROTECTED]> --- kernel/sched_fair.c | 31 ++++++++----------------------- 1 files changed, 8 insertions(+), 23 deletions(-) diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index 91a227b..b46f807 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c @@ -397,27 +397,16 @@ update_stats_wait_start(struct cfs_rq *cfs_rq, struct sched_entity *se) schedstat_set(se->wait_start, rq_of(cfs_rq)->clock); } -/* - * We calculate fair deltas here, so protect against the random effects - * of a multiplication overflow by capping it to the runtime limit: - */ -#if BITS_PER_LONG == 32 static inline unsigned long -calc_weighted(unsigned long delta, unsigned long weight, int shift) +calc_weighted(unsigned long delta, struct sched_entity *se) { - u64 tmp = (u64)delta * weight >> shift; + unsigned long weight = se->load.weight; - if (unlikely(tmp > sysctl_sched_runtime_limit*2)) - return sysctl_sched_runtime_limit*2; - return tmp; + if (unlikely(weight != NICE_0_LOAD)) + return (u64)delta * se->load.weight >> NICE_0_SHIFT; + else + return delta; } -#else -static inline unsigned long -calc_weighted(unsigned long delta, unsigned long weight, int shift) -{ - return delta * weight >> shift; -} -#endif /* * Task is being enqueued - update stats: @@ -469,9 +458,7 @@ __update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se, schedstat_set(se->wait_max, max(se->wait_max, rq_of(cfs_rq)->clock - se->wait_start)); - if (unlikely(se->load.weight != NICE_0_LOAD)) - delta_fair = calc_weighted(delta_fair, se->load.weight, - NICE_0_SHIFT); + delta_fair = calc_weighted(delta_fair, se); add_wait_runtime(cfs_rq, se, delta_fair); } @@ -554,9 +541,7 @@ static void __enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se, delta_fair = div64_likely32((u64)delta_fair * load, load + se->load.weight); - if (unlikely(se->load.weight != NICE_0_LOAD)) - delta_fair = calc_weighted(delta_fair, se->load.weight, - NICE_0_SHIFT); + delta_fair = calc_weighted(delta_fair, se); prev_runtime = se->wait_runtime; __add_wait_runtime(cfs_rq, se, delta_fair); - To unsubscribe from this list: send the line "unsubscribe git-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html