Re: [PATCH] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-24 Thread Rik van Riel
On 04/24/2015 05:11 AM, Heiko Carstens wrote: > On Thu, Apr 23, 2015 at 09:57:13PM -0400, Rik van Riel wrote: >> diff --git a/kernel/tsacct.c b/kernel/tsacct.c >> index 975cb49e32bf..0b967f116a6b 100644 >> --- a/kernel/tsacct.c >> +++ b/kernel/tsacct.c >> @@ -126,23 +126,29 @@ static void __acct_up

Re: [PATCH] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-24 Thread Heiko Carstens
On Thu, Apr 23, 2015 at 09:57:13PM -0400, Rik van Riel wrote: > diff --git a/kernel/tsacct.c b/kernel/tsacct.c > index 975cb49e32bf..0b967f116a6b 100644 > --- a/kernel/tsacct.c > +++ b/kernel/tsacct.c > @@ -126,23 +126,29 @@ static void __acct_update_integrals(struct task_struct > *tsk, > if

[PATCH] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-23 Thread Rik van Riel
The function __acct_update_integrals() is called both from irq context and task context. This creates a race where irq context can advance tsk->acct_timexpd to a value larger than time, leading to a negative value, which causes a divide error. See commit 6d5b5acca9e5 ("Fix fixpoint divide exception