From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933158AbcFJPfd (ORCPT ); Fri, 10 Jun 2016 11:35:33 -0400 Received: from mail-qt0-f169.google.com ([209.85.216.169]:35718 "EHLO mail-qt0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932734AbcFJPfb (ORCPT ); Fri, 10 Jun 2016 11:35:31 -0400 X-Greylist: delayed 336 seconds by postgrey-1.27 at vger.kernel.org; Fri, 10 Jun 2016 11:35:31 EDT Date: Fri, 10 Jun 2016 11:29:52 -0400 (EDT) From: Nicolas Pitre To: Thomas Gleixner cc: Daniel Lezcano , shreyas@linux.vnet.ibm.com, linux-kernel@vger.kernel.org, peterz@infradead.org, rafael@kernel.org, vincent.guittot@linaro.org Subject: Re: [PATCH V4] irq: Track the interrupt timings In-Reply-To: Message-ID: References: <1460545556-15085-1-git-send-email-daniel.lezcano@linaro.org> User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 10 Jun 2016, Thomas Gleixner wrote: > On Fri, 10 Jun 2016, Nicolas Pitre wrote: > > On Fri, 10 Jun 2016, Thomas Gleixner wrote: > > > > + diff = now - prev; > > > > + > > > > + /* > > > > + * microsec (actually 1024th of a milisec) precision is good > > > > + * enough for our purpose. > > > > + */ > > > > + diff >>= 10; > > > > > > And that shift instruction is required because of the following? > > > > > > > * Otherwise we know the magnitude of diff is > > > > + * well within 32 bits. > > > > > > AFAICT that's pointless. You are not saving anything because NSEC_PER_SEC is > > > smaller than 2^32 and your 8 values are not going to overflow 64 bit in the > > > sum. > > > > Those values are squared later, so we really want 32 bits here. > > Well, you can do sum >> 10 exaclty once when you calculate stuff. Given your later argument I agree. > > > > + */ > > > > + if (unlikely(diff > USEC_PER_SEC)) { > > > > + memset(timings, 0, sizeof(*timings)); > > > > + timings->timestamp = now; > > > > > > Redundant store. > > > > We just trashed all our data with the memset so the current timestamp > > needs to be restored. > > So why doing a full memset and not only on the array ? Go figure. This code has come a long way. > > > Now the real question is whether you really need all that math, checks and > > > memsets in the irq hotpath. If you make the storage slightly larger then you > > > can just store the values unconditionally in the circular buffer and do all > > > the computational stuff when you really it. > > > > Well... given that you need an IRQ everytime you come out of idle that > > means there will always be more IRQs than entries into idle, so you're > > probably right. > > Glad you agree. > > Thanks, > > tglx >