From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751463AbbJBUtR (ORCPT ); Fri, 2 Oct 2015 16:49:17 -0400 Received: from mail-io0-f171.google.com ([209.85.223.171]:35198 "EHLO mail-io0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750983AbbJBUtP (ORCPT ); Fri, 2 Oct 2015 16:49:15 -0400 MIME-Version: 1.0 In-Reply-To: <20150914144843.GB11010@localhost> References: <1441840051-20244-1-git-send-email-john.stultz@linaro.org> <1441840051-20244-2-git-send-email-john.stultz@linaro.org> <20150910120220.GV24711@localhost> <20150914144843.GB11010@localhost> Date: Fri, 2 Oct 2015 13:49:14 -0700 Message-ID: Subject: Re: [PATCH 2/2 (v2)] kselftest: timers: Add adjtick test to validate adjtimex() tick adjustments From: John Stultz To: Miroslav Lichvar Cc: LKML , =?UTF-8?Q?Nuno_Gon=C3=A7alves?= , Prarit Bhargava , Richard Cochran , Ingo Molnar , Thomas Gleixner , Shuah Khan Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Sep 14, 2015 at 7:48 AM, Miroslav Lichvar wrote: > Is there a cheap way to calculate this? > xtime_remainder * (ntp_tick >> ntp_error_shift) / NTP_INTERVAL_LENGTH So as I was trying to figure out before I prematurely hit send... I was thinking... xtime_remainder = (NTP_INTERVAL_LENGTH << tk->tkr_mono.clock->shift) - (tk->cycle_interval * tk->tkr_mono.clock->mult) or for simplification: xtime_remainder = NTP_INTERVAL_SHIFTED - ORIG_MULT_INTERVAL_SHIFTED And we want to scale it as you pointed out above (though slightly fixed here) by: (tk->ntp_tick >> tk->ntp_error_shift) / (NTP_INTERVAL_LENGTH << tk->tkr_mono.clock->shift) Which we'll simplify a touch as: (tk->ntp_tick >> tk->ntp_error_shift) / NTP_INTERVAL_SHIFTED So multiplying these comes out to: (tk->ntp_tick >> tk->ntp_error_shift) - ((tk->ntp_tick >> tk->ntp_error_shift) * ORIG_MULT_INTERVAL_SHIFTED / NTP_INTERVAL_SHIFTED) Which simplifies a bit to: (tk->ntp_tick - (tk->ntp_tick * ORIG_MULT_INTERVAL_SHIFTED / NTP_INTERVAL_SHIFTED)) >> tk->ntp_error_shift (tk->ntp_tick * ( 1 - ORIG_MULT_INTERVAL_SHIFTED / NTP_INTERVAL_SHIFTED)) >> tk->ntp_error_shift; So this looks like it would be cheap to calculate, but since we're doing integer math, the problem is that ORIG_MULT_INTERVAL_SHIFTED / NTP_INTERVAL_SHIFTED isn't an integer value, so if we want any precision we'd still have the costly tk->ntp_tick/NTP_INTERVAL_SHIFTED to do each time. So.. that's a long winded way to say I can't think of a cheap way.... :P thanks -john