From patchwork Thu Mar 3 04:21:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 591230 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 2717C14130B for ; Thu, 3 Mar 2016 15:24:34 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b=ch4FCRfz; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756051AbcCCEWO (ORCPT ); Wed, 2 Mar 2016 23:22:14 -0500 Received: from mail-pf0-f179.google.com ([209.85.192.179]:34761 "EHLO mail-pf0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752839AbcCCEWM (ORCPT ); Wed, 2 Mar 2016 23:22:12 -0500 Received: by mail-pf0-f179.google.com with SMTP id 4so7132753pfd.1 for ; Wed, 02 Mar 2016 20:22:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UQGiJ7cAgzVzfB1swuPItrAryCULFOUCkoDAOOa/oRU=; b=ch4FCRfzhelGiWc5vwPcwl/aQwH6grSbsPuC5Fx4nDsrlWwtKX6hG+vNZJdeSky1Ia f8rwyJTCchJRn15XOxjL2bu/3Cehl2BzXpOMRSD9Ug7oBhFvmUbgzcpUBK8Oo/T7uMfZ iRdMTqy2G2aMFzL+vAK3RptBWWtxjEs+4kV2U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UQGiJ7cAgzVzfB1swuPItrAryCULFOUCkoDAOOa/oRU=; b=IcfMdqdlL8+7mgExx9/INiGdl4T3VaYmTwaANzjeocze1pGaHaEN3MG8IO3khKdNgC 4ZJenEM/JN9fSfba1Tm8ZZuqiip4+ZQ/dCOyQmQaM0BqOsiz31RxkYx7YpsAwvIUaGmN o1AYIJspFJ2h+mwGMQBDmxlqUeL8I0qM2jkrQfxqZPFbGhgFTbCCws5ViXz1o/dpU7R8 JsKDeOKlWJPmzwg/ZMW4y15B7vFEjbwdJ4LpqjBaWYsceEXT07SY17DwqxM9OK2C3kDE mhyQUJhhu1GZeAzhaCWyGkHNexGXRfN6F5d7/7U2BQgVrbG5C0qerF3RdBxX5g2UFqsB dgxw== X-Gm-Message-State: AD7BkJJ/+nQwR6g7gJ6GSBwo4H0R7b4hFiwgJfaEZiEUj9htW2hx5QaI1mK1zKsA8OsSjQUu X-Received: by 10.98.74.17 with SMTP id x17mr831430pfa.14.1456978931421; Wed, 02 Mar 2016 20:22:11 -0800 (PST) Received: from localhost.localdomain (c-76-115-103-22.hsd1.or.comcast.net. [76.115.103.22]) by smtp.gmail.com with ESMTPSA id xu1sm56468698pab.31.2016.03.02.20.22.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 Mar 2016 20:22:10 -0800 (PST) From: John Stultz To: lkml Cc: "Christopher S. Hall" , Prarit Bhargava , Richard Cochran , Thomas Gleixner , Ingo Molnar , Andy Lutomirski , kevin.b.stanton@intel.com, kevin.j.clarke@intel.com, hpa@zytor.com, jeffrey.t.kirsher@intel.com, netdev@vger.kernel.org, John Stultz Subject: [PATCH 1/8] time: Add cycles to nanoseconds translation Date: Wed, 2 Mar 2016 20:21:52 -0800 Message-Id: <1456978919-30076-2-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1456978919-30076-1-git-send-email-john.stultz@linaro.org> References: <1456978919-30076-1-git-send-email-john.stultz@linaro.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: "Christopher S. Hall" The timekeeping code does not currently provide a way to translate externally provided clocksource cycles to system time. The cycle count is always provided by the result clocksource read() method internal to the timekeeping code. The added function timekeeping_cycles_to_ns() calculated a nanosecond value from a cycle count that can be added to tk_read_base.base value yielding the current system time. This allows clocksource cycle values external to the timekeeping code to provide a cycle count that can be transformed to system time. Cc: Prarit Bhargava Cc: Richard Cochran Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Andy Lutomirski Cc: kevin.b.stanton@intel.com Cc: kevin.j.clarke@intel.com Cc: hpa@zytor.com Cc: jeffrey.t.kirsher@intel.com Cc: netdev@vger.kernel.org Reviewed-by: Thomas Gleixner Signed-off-by: Christopher S. Hall Signed-off-by: John Stultz --- kernel/time/timekeeping.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 34b4ced..4243d28 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -298,17 +298,34 @@ u32 (*arch_gettimeoffset)(void) = default_arch_gettimeoffset; static inline u32 arch_gettimeoffset(void) { return 0; } #endif +static inline s64 timekeeping_delta_to_ns(struct tk_read_base *tkr, + cycle_t delta) +{ + s64 nsec; + + nsec = delta * tkr->mult + tkr->xtime_nsec; + nsec >>= tkr->shift; + + /* If arch requires, add in get_arch_timeoffset() */ + return nsec + arch_gettimeoffset(); +} + static inline s64 timekeeping_get_ns(struct tk_read_base *tkr) { cycle_t delta; - s64 nsec; delta = timekeeping_get_delta(tkr); + return timekeeping_delta_to_ns(tkr, delta); +} - nsec = (delta * tkr->mult + tkr->xtime_nsec) >> tkr->shift; +static inline s64 timekeeping_cycles_to_ns(struct tk_read_base *tkr, + cycle_t cycles) +{ + cycle_t delta; - /* If arch requires, add in get_arch_timeoffset() */ - return nsec + arch_gettimeoffset(); + /* calculate the delta since the last update_wall_time */ + delta = clocksource_delta(cycles, tkr->cycle_last, tkr->mask); + return timekeeping_delta_to_ns(tkr, delta); } /**