Commit 9a41785cc43d88397f787a651ed7286a33f8462f
Committed by
Ingo Molnar
1 parent
b2be5e96dc
Exists in
master
and in
4 other branches
sched: fix delay accounting regression
Fix the delay accounting regression introduced by commit 75d4ef16a6aa84f708188bada182315f80aab6fa. rq no longer has sched_info data associated with it. task_struct sched_info structure is used by delay accounting to provide back statistics to user space. also remove direct use of sched_clock() (which is not a valid thing to do anymore) and use rq->clock instead. Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Showing 1 changed file with 6 additions and 5 deletions Side-by-side Diff
kernel/sched_stats.h
... | ... | @@ -127,7 +127,7 @@ |
127 | 127 | # define schedstat_set(var, val) do { } while (0) |
128 | 128 | #endif |
129 | 129 | |
130 | -#ifdef CONFIG_SCHEDSTATS | |
130 | +#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) | |
131 | 131 | /* |
132 | 132 | * Called when a process is dequeued from the active array and given |
133 | 133 | * the cpu. We should note that with the exception of interactive |
... | ... | @@ -155,7 +155,7 @@ |
155 | 155 | */ |
156 | 156 | static void sched_info_arrive(struct task_struct *t) |
157 | 157 | { |
158 | - unsigned long long now = sched_clock(), delta = 0; | |
158 | + unsigned long long now = task_rq(t)->clock, delta = 0; | |
159 | 159 | |
160 | 160 | if (t->sched_info.last_queued) |
161 | 161 | delta = now - t->sched_info.last_queued; |
... | ... | @@ -186,7 +186,7 @@ |
186 | 186 | { |
187 | 187 | if (unlikely(sched_info_on())) |
188 | 188 | if (!t->sched_info.last_queued) |
189 | - t->sched_info.last_queued = sched_clock(); | |
189 | + t->sched_info.last_queued = task_rq(t)->clock; | |
190 | 190 | } |
191 | 191 | |
192 | 192 | /* |
... | ... | @@ -195,7 +195,8 @@ |
195 | 195 | */ |
196 | 196 | static inline void sched_info_depart(struct task_struct *t) |
197 | 197 | { |
198 | - unsigned long long delta = sched_clock() - t->sched_info.last_arrival; | |
198 | + unsigned long long delta = task_rq(t)->clock - | |
199 | + t->sched_info.last_arrival; | |
199 | 200 | |
200 | 201 | t->sched_info.cpu_time += delta; |
201 | 202 | rq_sched_info_depart(task_rq(t), delta); |
... | ... | @@ -231,5 +232,5 @@ |
231 | 232 | #else |
232 | 233 | #define sched_info_queued(t) do { } while (0) |
233 | 234 | #define sched_info_switch(t, next) do { } while (0) |
234 | -#endif /* CONFIG_SCHEDSTATS */ | |
235 | +#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ |