Re: [tip:sched/core] sched/cpuacct: Split usage accounting into user_usage and sys_usage

From: Peter Zijlstra
Date: Wed Apr 06 2016 - 07:08:55 EST


On Wed, Apr 06, 2016 at 08:32:19PM +1000, Anton Blanchard wrote:
> Hi,
>
> > > > void cpuacct_charge(struct task_struct *tsk, u64 cputime)
> > > > {
> > > > struct cpuacct *ca;
> > > > + int index;
> > > > +
> > > > + if (user_mode(task_pt_regs(tsk)))
> > > > + index = CPUACCT_USAGE_USER;
> > > > + else
> > > > + index = CPUACCT_USAGE_SYSTEM;
>
> This is oopsing because PowerPC task_pt_regs() returns NULL for
> kernel threads.

Ah, so sometihng like:

struct pt_regs *regs = task_pt_regs();
int index = CPUACCT_USAGE_SYSTEM;

if (regs && user_mode(regs))
index = CPUACCT_USAGE_USER;

should work, right?