Hi, Anton and Peter > -----Original Message----- > From: Peter Zijlstra [mailto:[email protected]] > Sent: Wednesday, April 06, 2016 7:08 PM > To: Anton Blanchard <[email protected]> > Cc: Ingo Molnar <[email protected]>; Srikar Dronamraju > <[email protected]>; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; > [email protected]; [email protected]; Stephen Rothwell > <[email protected]>; Michael Ellerman <[email protected]> > Subject: Re: [tip:sched/core] sched/cpuacct: Split usage accounting into > user_usage and sys_usage > > 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. > Thanks for notice it.
> 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? > Thanks, I'll confirm it in a Power7 VM from buildroot. (maybe need some hours or till tomorrow in a poor pc...) Btw, I reproduced this bug in above vm. Thanks Zhaolei >

