[RFC][PATCH 15/18] sched: Remove rq argument from ttwu_stat()

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Peter Zijlstra
Date: Tuesday, January 4, 2011 - 7:59 am

In order to call ttwu_stat() without holding rq->lock we must remove
its rq argument. Since we need to change rq stats, account to the
local rq instead of the task rq, this is safe since we have IRQs
disabled.

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();
 
 	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);
 out:
 	raw_spin_unlock_irqrestore(&p->pi_lock, flags);
 	put_cpu();
@@ -2527,7 +2529,7 @@ static void try_to_wake_up_local(struct 
 		activate_task(rq, p, ENQUEUE_WAKEUP);
 
 	ttwu_post_activation(p, rq, 0);
-	ttwu_stat(rq, p, smp_processor_id(), 0);
+	ttwu_stat(p, smp_processor_id(), 0);
 out:
 	raw_spin_unlock(&p->pi_lock);
 }


--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC][PATCH 01/18] sched: Always provide p-&gt;on_cpu, Peter Zijlstra, (Tue Jan 4, 7:59 am)
[RFC][PATCH 03/18] sched: Change the ttwu success details, Peter Zijlstra, (Tue Jan 4, 7:59 am)
[RFC][PATCH 04/18] sched: Clean up ttwu stats, Peter Zijlstra, (Tue Jan 4, 7:59 am)
[RFC][PATCH 05/18] sched: Provide p-&gt;on_rq, Peter Zijlstra, (Tue Jan 4, 7:59 am)
[RFC][PATCH 15/18] sched: Remove rq argument from ttwu_stat(), Peter Zijlstra, (Tue Jan 4, 7:59 am)
[RFC][PATCH 16/18] sched: Rename ttwu_post_activation, Peter Zijlstra, (Tue Jan 4, 7:59 am)
[RFC][PATCH 18/18] sched: Sort hotplug vs ttwu queueing, Peter Zijlstra, (Tue Jan 4, 7:59 am)