Skip to content

Commit

Permalink
sched: fix delay accounting regression
Browse files Browse the repository at this point in the history
Fix the delay accounting regression introduced by commit
75d4ef1. 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>
  • Loading branch information
Balbir Singh authored and Ingo Molnar committed Nov 9, 2007
1 parent b2be5e9 commit 9a41785
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions kernel/sched_stats.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ rq_sched_info_depart(struct rq *rq, unsigned long long delta)
# define schedstat_set(var, val) do { } while (0)
#endif

#ifdef CONFIG_SCHEDSTATS
#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
/*
* Called when a process is dequeued from the active array and given
* the cpu. We should note that with the exception of interactive
Expand Down Expand Up @@ -155,7 +155,7 @@ static inline void sched_info_dequeued(struct task_struct *t)
*/
static void sched_info_arrive(struct task_struct *t)
{
unsigned long long now = sched_clock(), delta = 0;
unsigned long long now = task_rq(t)->clock, delta = 0;

if (t->sched_info.last_queued)
delta = now - t->sched_info.last_queued;
Expand Down Expand Up @@ -186,7 +186,7 @@ static inline void sched_info_queued(struct task_struct *t)
{
if (unlikely(sched_info_on()))
if (!t->sched_info.last_queued)
t->sched_info.last_queued = sched_clock();
t->sched_info.last_queued = task_rq(t)->clock;
}

/*
Expand All @@ -195,7 +195,8 @@ static inline void sched_info_queued(struct task_struct *t)
*/
static inline void sched_info_depart(struct task_struct *t)
{
unsigned long long delta = sched_clock() - t->sched_info.last_arrival;
unsigned long long delta = task_rq(t)->clock -
t->sched_info.last_arrival;

t->sched_info.cpu_time += delta;
rq_sched_info_depart(task_rq(t), delta);
Expand Down Expand Up @@ -231,5 +232,5 @@ sched_info_switch(struct task_struct *prev, struct task_struct *next)
#else
#define sched_info_queued(t) do { } while (0)
#define sched_info_switch(t, next) do { } while (0)
#endif /* CONFIG_SCHEDSTATS */
#endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */

0 comments on commit 9a41785

Please sign in to comment.