Message ID | 1363955155-18382-5-git-send-email-vincent.guittot@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, 2013-03-22 at 13:25 +0100, Vincent Guittot wrote: > @@ -3364,13 +3364,16 @@ done: > static bool is_buddy_busy(int cpu) > { > struct rq *rq = cpu_rq(cpu); > + u32 sum = rq->avg.runnable_avg_sum; > + u32 period = rq->avg.runnable_avg_period; > + > + sum = min(sum, period); OK this makes sense; use a simple sanity constraint instead of going overboard on serialization -- however, why is this a separate patch? That is, this could easily be part of the patch that introduces is_buddy_busy(); also you likely want part of this patch's changelog to become a comment that goes right above this min() :-)
On 26 March 2013 13:50, Peter Zijlstra <peterz@infradead.org> wrote: > On Fri, 2013-03-22 at 13:25 +0100, Vincent Guittot wrote: >> @@ -3364,13 +3364,16 @@ done: >> static bool is_buddy_busy(int cpu) >> { >> struct rq *rq = cpu_rq(cpu); >> + u32 sum = rq->avg.runnable_avg_sum; >> + u32 period = rq->avg.runnable_avg_period; >> + >> + sum = min(sum, period); > > OK this makes sense; use a simple sanity constraint instead of going > overboard on serialization -- however, why is this a separate patch? There is no real reason other than explaining why I have added this additional check > > That is, this could easily be part of the patch that introduces > is_buddy_busy(); also you likely want part of this patch's changelog > to become a comment that goes right above this min() :-) Yes, i 'm going to do that >
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 021c7b7..b636199 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -3364,13 +3364,16 @@ done: static bool is_buddy_busy(int cpu) { struct rq *rq = cpu_rq(cpu); + u32 sum = rq->avg.runnable_avg_sum; + u32 period = rq->avg.runnable_avg_period; + + sum = min(sum, period); /* * A busy buddy is a CPU with a high load or a small load with a lot of * running tasks. */ - return (rq->avg.runnable_avg_sum > - (rq->avg.runnable_avg_period / (rq->nr_running + 2))); + return (sum > (period / (rq->nr_running + 2))); } static bool is_light_task(struct task_struct *p)