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=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,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 944A1C43381 for ; Tue, 26 Mar 2019 20:55:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6011C20700 for ; Tue, 26 Mar 2019 20:55:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732733AbfCZUzp (ORCPT ); Tue, 26 Mar 2019 16:55:45 -0400 Received: from Galois.linutronix.de ([146.0.238.70]:49336 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726811AbfCZUzo (ORCPT ); Tue, 26 Mar 2019 16:55:44 -0400 Received: from p5492e2fc.dip0.t-ipconnect.de ([84.146.226.252] helo=nanos) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1h8t6e-000669-8B; Tue, 26 Mar 2019 21:55:36 +0100 Date: Tue, 26 Mar 2019 21:55:35 +0100 (CET) From: Thomas Gleixner To: Ricardo Neri cc: Ingo Molnar , Borislav Petkov , Ashok Raj , Andi Kleen , Peter Zijlstra , "Ravi V. Shankar" , x86@kernel.org, linux-kernel@vger.kernel.org, Ricardo Neri , "H. Peter Anvin" , Tony Luck , Clemens Ladisch , Arnd Bergmann , Philippe Ombredanne , Kate Stewart , "Rafael J. Wysocki" , Mimi Zohar , Jan Kiszka , Nick Desaulniers , Masahiro Yamada , Nayna Jain Subject: Re: [RFC PATCH v2 12/14] x86/watchdog/hardlockup/hpet: Determine if HPET timer caused NMI In-Reply-To: <1551283518-18922-13-git-send-email-ricardo.neri-calderon@linux.intel.com> Message-ID: References: <1551283518-18922-1-git-send-email-ricardo.neri-calderon@linux.intel.com> <1551283518-18922-13-git-send-email-ricardo.neri-calderon@linux.intel.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 27 Feb 2019, Ricardo Neri wrote: > @@ -62,7 +67,18 @@ static inline void set_comparator(struct hpet_hld_data *hdata, > static void kick_timer(struct hpet_hld_data *hdata, bool force) > { > bool kick_needed = force || !(hdata->flags & HPET_DEV_PERI_CAP); > - unsigned long new_compare, count; > + unsigned long tsc_curr, tsc_delta, new_compare, count; > + > + /* Start obtaining the current TSC and HPET counts. */ > + tsc_curr = rdtsc(); > + > + if (kick_needed) > + count = get_count(); Can you please keep the TSC code in one block and the HPET block in the next one? Having this inbetween is really bad to follow. It really does not matter whether you read the HPET counter before or after the calculation. This is a crystal ball estimation anyway so a few cyles more or less are completely irrelevant. > + tsc_delta = (unsigned long)watchdog_thresh * (unsigned long)tsc_khz > + * 1000L; > + hdata->tsc_next = tsc_curr + tsc_delta; > + hdata->tsc_next_error = tsc_delta >> 6; Thanks, tglx