Re: [RFC][PATCH 14/17] sched: Remove rq argument to ttwu_stat()
From: Peter Zijlstra
Date: Mon Jan 03 2011 - 06:20:13 EST
On Wed, 2010-12-29 at 22:40 +0800, Yong Zhang wrote:
> On Fri, Dec 24, 2010 at 01:23:52PM +0100, Peter Zijlstra wrote:
> >
> > Signed-off-by: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx>
> > ---
> > kernel/sched.c | 8 +++++---
> > 1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > Index: linux-2.6/kernel/sched.c
> > ===================================================================
> > --- linux-2.6.orig/kernel/sched.c
> > +++ linux-2.6/kernel/sched.c
> > @@ -2367,10 +2367,11 @@ static void update_avg(u64 *avg, u64 sam
> > #endif
> >
> > static void
> > -ttwu_stat(struct rq *rq, struct task_struct *p, int cpu, int wake_flags)
> > +ttwu_stat(struct task_struct *p, int cpu, int wake_flags)
> > {
> > #ifdef CONFIG_SCHEDSTATS
> > int this_cpu = smp_processor_id();
> > + struct rq *rq = this_rq();
>
> task_rq(p)?
No we cannot change stats on task_rq() since we don't hold any locks
there, but since we have IRQs disabled we can change stats on the local
rq.
It changes the accounting slightly (instead of accounting the wakeup on
the task's rq we account it on the waking cpu's rq) but that shouldn't
matter.
> >
> > schedstat_inc(rq, ttwu_count);
> > schedstat_inc(p, se.statistics.nr_wakeups);
> > @@ -2491,9 +2492,10 @@ try_to_wake_up(struct task_struct *p, un
> > activate_task(rq, p, ENQUEUE_WAKEUP | ENQUEUE_WAKING);
> > out_running:
> > ttwu_post_activation(p, rq, wake_flags);
> > - ttwu_stat(rq, p, cpu, wake_flags);
> > success = 1;
> > __task_rq_unlock(rq);
> > +
> > + ttwu_stat(p, cpu, wake_flags);
>
> Typo? You just put it out of rq_lock.
That's the purpose of this patch, we need to be able to do ttwu_stat()
without holding rq->lock.
I should have written a changelog but it was either finish all fancy
changelogs on an rfc series and post after the holidays or post
before ;-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/