Messages in this thread | | | Subject | Re: [RFC][PATCH 14/17] sched: Remove rq argument to ttwu_stat() | From | Peter Zijlstra <> | Date | Mon, 03 Jan 2011 12:20:22 +0100 |
| |
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@chello.nl> > > --- > > 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 ;-)
| |