Re: [PATCH v2] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-28 Thread Peter Zijlstra
On Tue, Apr 28, 2015 at 08:53:18AM -0400, Rik van Riel wrote: > So what can I do to move forward with this patch? > > It speeds up syscall entry / exit by 7% when nohz_full > is enabled on a CPU... > > Should I have the irq block compiled in only when > sizeof(cputime_t) > sizeof(long) ? So I'm

Re: [PATCH v2] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-28 Thread Rik van Riel
On 04/27/2015 07:18 AM, Heiko Carstens wrote: > On Sat, Apr 25, 2015 at 08:50:49AM -0400, Rik van Riel wrote: >> On 04/25/2015 05:43 AM, Heiko Carstens wrote: >>> ...the READ_ONCE() doesn't give you any guarantees about reading >>> tsk->acct_timexpd in an atomic way. >>> Well, actually you don't ne

Re: [PATCH v2] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-27 Thread Heiko Carstens
On Sat, Apr 25, 2015 at 08:50:49AM -0400, Rik van Riel wrote: > On 04/25/2015 05:43 AM, Heiko Carstens wrote: > > ...the READ_ONCE() doesn't give you any guarantees about reading > > tsk->acct_timexpd in an atomic way. > > Well, actually you don't need atomic semantics, but only to make sure that >

Re: [PATCH v2] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-25 Thread Rik van Riel
On 04/25/2015 05:43 AM, Heiko Carstens wrote: > On Fri, Apr 24, 2015 at 11:16:53AM -0400, Rik van Riel wrote: >> V2: introduce signed_cputime_t to deal with 64 bit cputime_t on >> 32 bit architectures, and use READ_ONCE to ensure the value >> is always read atomically (Heiko Karstens) > >

Re: [PATCH v2] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-25 Thread Heiko Carstens
On Fri, Apr 24, 2015 at 11:16:53AM -0400, Rik van Riel wrote: > V2: introduce signed_cputime_t to deal with 64 bit cputime_t on > 32 bit architectures, and use READ_ONCE to ensure the value > is always read atomically (Heiko Karstens) Erm, that's not what I said ;) READ_ONCE() only fixes t

[PATCH v2] context_tracking: remove local_irq_save from __acct_update_integrals

2015-04-24 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