Skip to content

Commit

Permalink
cputime: Remove irqsave from seqlock readers
Browse files Browse the repository at this point in the history
The reader side code has no requirement to disable interrupts while
sampling data. The sequence counter is enough to ensure consistency.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
  • Loading branch information
Thomas Gleixner authored and Ingo Molnar committed Feb 19, 2013
1 parent 993db4b commit cdc4e86
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions kernel/sched/cputime.c
Original file line number Diff line number Diff line change
Expand Up @@ -729,18 +729,17 @@ void vtime_init_idle(struct task_struct *t)

cputime_t task_gtime(struct task_struct *t)
{
unsigned long flags;
unsigned int seq;
cputime_t gtime;

do {
seq = read_seqbegin_irqsave(&t->vtime_seqlock, flags);
seq = read_seqbegin(&t->vtime_seqlock);

gtime = t->gtime;
if (t->flags & PF_VCPU)
gtime += vtime_delta(t);

} while (read_seqretry_irqrestore(&t->vtime_seqlock, seq, flags));
} while (read_seqretry(&t->vtime_seqlock, seq));

return gtime;
}
Expand All @@ -756,15 +755,14 @@ fetch_task_cputime(struct task_struct *t,
cputime_t *u_src, cputime_t *s_src,
cputime_t *udelta, cputime_t *sdelta)
{
unsigned long flags;
unsigned int seq;
unsigned long long delta;

do {
*udelta = 0;
*sdelta = 0;

seq = read_seqbegin_irqsave(&t->vtime_seqlock, flags);
seq = read_seqbegin(&t->vtime_seqlock);

if (u_dst)
*u_dst = *u_src;
Expand All @@ -788,7 +786,7 @@ fetch_task_cputime(struct task_struct *t,
if (t->vtime_snap_whence == VTIME_SYS)
*sdelta = delta;
}
} while (read_seqretry_irqrestore(&t->vtime_seqlock, seq, flags));
} while (read_seqretry(&t->vtime_seqlock, seq));
}


Expand Down

0 comments on commit cdc4e86

Please sign in to comment.