Hi, Anton and Peter > -----Original Message----- > From: Peter Zijlstra [mailto:pet...@infradead.org] > Sent: Wednesday, April 06, 2016 7:08 PM > To: Anton Blanchard <an...@samba.org> > Cc: Ingo Molnar <mi...@kernel.org>; Srikar Dronamraju > <sri...@linux.vnet.ibm.com>; t...@linutronix.de; efa...@gmx.de; > hte...@gmail.com; linux-kernel@vger.kernel.org; t...@kernel.org; > torva...@linux-foundation.org; zhao...@cn.fujitsu.com; > yangds.f...@cn.fujitsu.com; h...@zytor.com; Stephen Rothwell > <s...@canb.auug.org.au>; Michael Ellerman <m...@ellerman.id.au> > 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 >