From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B46BCC31E4B for ; Fri, 14 Jun 2019 15:54:37 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8BBB32168B for ; Fri, 14 Jun 2019 15:54:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8BBB32168B Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linutronix.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 9F293147E; Fri, 14 Jun 2019 15:54:23 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 88B8E147A for ; Fri, 14 Jun 2019 15:54:22 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from Galois.linutronix.de (Galois.linutronix.de [146.0.238.70]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 1AD30775 for ; Fri, 14 Jun 2019 15:54:22 +0000 (UTC) Received: from [5.158.153.52] (helo=nanos.tec.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1hboWk-0002JC-4R; Fri, 14 Jun 2019 17:54:06 +0200 Date: Fri, 14 Jun 2019 17:54:05 +0200 (CEST) From: Thomas Gleixner To: Ricardo Neri Subject: Re: [RFC PATCH v4 03/21] x86/hpet: Calculate ticks-per-second in a separate function In-Reply-To: <1558660583-28561-4-git-send-email-ricardo.neri-calderon@linux.intel.com> Message-ID: References: <1558660583-28561-1-git-send-email-ricardo.neri-calderon@linux.intel.com> <1558660583-28561-4-git-send-email-ricardo.neri-calderon@linux.intel.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Cc: Kate Stewart , "Ravi V. Shankar" , x86@kernel.org, Ashok Raj , Arnd Bergmann , Peter Zijlstra , Philippe Ombredanne , Randy Dunlap , Clemens Ladisch , linux-kernel@vger.kernel.org, Stephane Eranian , Ricardo Neri , "Rafael J. Wysocki" , iommu@lists.linux-foundation.org, Tony Luck , "H. Peter Anvin" , Andi Kleen , Borislav Petkov , Ingo Molnar X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org On Thu, 23 May 2019, Ricardo Neri wrote: > > +u64 hpet_get_ticks_per_sec(u64 hpet_caps) > +{ > + u64 ticks_per_sec, period; > + > + period = (hpet_caps & HPET_COUNTER_CLK_PERIOD_MASK) >> > + HPET_COUNTER_CLK_PERIOD_SHIFT; /* fs, 10^-15 */ > + > + /* > + * The frequency is the reciprocal of the period. The period is given > + * in femtoseconds per second. Thus, prepare a dividend to obtain the > + * frequency in ticks per second. > + */ > + > + /* 10^15 femtoseconds per second */ > + ticks_per_sec = 1000000000000000ULL; > + ticks_per_sec += period >> 1; /* round */ > + > + /* The quotient is put in the dividend. We drop the remainder. */ > + do_div(ticks_per_sec, period); > + > + return ticks_per_sec; > +} > + > int hpet_alloc(struct hpet_data *hdp) > { > u64 cap, mcfg; > @@ -844,7 +867,6 @@ int hpet_alloc(struct hpet_data *hdp) > struct hpets *hpetp; > struct hpet __iomem *hpet; > static struct hpets *last; > - unsigned long period; > unsigned long long temp; > u32 remainder; > > @@ -894,12 +916,7 @@ int hpet_alloc(struct hpet_data *hdp) > > last = hpetp; > > - period = (cap & HPET_COUNTER_CLK_PERIOD_MASK) >> > - HPET_COUNTER_CLK_PERIOD_SHIFT; /* fs, 10^-15 */ > - temp = 1000000000000000uLL; /* 10^15 femtoseconds per second */ > - temp += period >> 1; /* round */ > - do_div(temp, period); > - hpetp->hp_tick_freq = temp; /* ticks per second */ > + hpetp->hp_tick_freq = hpet_get_ticks_per_sec(cap); Why are we actually computing this over and over? In hpet_enable() which is the first function invoked we have: /* * The period is a femto seconds value. Convert it to a * frequency. */ freq = FSEC_PER_SEC; do_div(freq, hpet_period); hpet_freq = freq; So we already have ticks per second, aka frequency, right? So why do we need yet another function instead of using the value which is computed once? The frequency of the HPET channels has to be identical no matter what. If it's not HPET is broken beyond repair. Thanks, tglx _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu