Received: by 2002:a05:6358:53a8:b0:117:f937:c515 with SMTP id z40csp5319783rwe; Tue, 18 Apr 2023 05:27:51 -0700 (PDT) X-Google-Smtp-Source: AKy350YbmsCHSV8JUeuuq3lJGc1l0UADf8Tb7suTUiHzJHDKbvqloOr6hOSg0GaePfxBFKlTkN68 X-Received: by 2002:a05:6a20:5489:b0:f0:110b:bf9b with SMTP id i9-20020a056a20548900b000f0110bbf9bmr7375950pzk.16.1681820871693; Tue, 18 Apr 2023 05:27:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681820871; cv=none; d=google.com; s=arc-20160816; b=xBRNCBorvJLUV0B7wEPYYIdTUBTE0fvZ34y78JLXjnlez+OUy/C9gIAazSqv0Q6EP0 SK0ssc3re0olHaUpv7DcJOi/5JDica+QXYbeUstaQ0Rh0vuCNXaDxRXyOVgBPTS++lsg oDeuS6gb4CfiO4XeVx094nrLIUJXRRvP2F1P9WWkMi2zB6iVOrYD0DHDExwaXFtO4KRa qnmUby8Sc80a8yBxG7fnQxTRVOlhPtw9IoGhQF+lW4zLgM2ZPmazN3ZiyNLVtSOA3JtM 8p9mF5j/vtINvZgEnBR79Su2AaR2ITYu+XstytsDw8nEqRHv6J9vVJo7BWIMOBwd2ptz yN8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:dkim-signature :dkim-signature:date; bh=FqUkCjI9Mr4UILiIZm8CkQghAtfwUwan4upLdsoWU00=; b=GTjf0YapFvpKSxT/WQAPR+qnnCef3jNVYaljIn9W3/CtsZJl3oQY0wKIgQkgTjNPOz G5zu4NhQuZ+qNHt+RPq5oobD3DY09vXEBJmuIBZeUhef/nfFaPdT80voEQx8kwxB8gEU 5r+5QcOBK3+mgNkV1A85kJ6d+M2p/03YNUhXboOlalZKF0U74xO0jC+r3aUZZmP9JK91 qd9HgQcHRQfetEssgVbiUWvPpubuB8T+0SE2ilM3UZH1bQOyikkk/JyAEW45JrTUlD7H OMG4uAs3h//KLte2jyNApWsdTcJCX5dRaoaymzxTI7Tb0FKt0ULNHQtyoEoNOQGyIMmP RC2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=XZCTq6LE; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x18-20020a63db52000000b0050726756ee9si14190610pgi.92.2023.04.18.05.27.37; Tue, 18 Apr 2023 05:27:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=XZCTq6LE; dkim=neutral (no key) header.i=@linutronix.de; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230369AbjDRM1Y (ORCPT + 99 others); Tue, 18 Apr 2023 08:27:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36020 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230518AbjDRM1O (ORCPT ); Tue, 18 Apr 2023 08:27:14 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4A669020 for ; Tue, 18 Apr 2023 05:26:54 -0700 (PDT) Date: Tue, 18 Apr 2023 14:26:39 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1681820801; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=FqUkCjI9Mr4UILiIZm8CkQghAtfwUwan4upLdsoWU00=; b=XZCTq6LE1G+yciJO4kkfRVEAfFAeZE7nrI8z+Dh+O/lMDTr0YoepfNWfDxQ6Fqm7Z+tStJ 96mQTG7/wu3/uKC512CHUpWq25rGf5h79ujTEUjCj6dSTr6mCCp/MJxzZiRak+WxXZQ/ku 7Xa493KJmgCnOu6l6fs5DhY8Slk3lbULWfjgNl6nEOXyrhCcTFFDQxhT87nl/v1cmoW8yv DcrfVVX9hyGyFhxhzcblp+6etyRd7nKKHAPPWdOENefzJ21kCuHMYZ4W0vuOa0HXsTcjzn hA+yEAJ6wSbeLukxaQtqIgPnu8zoB0wbOYkMBarar0jwKWxVe9MG14eOwFa0Mg== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1681820801; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=FqUkCjI9Mr4UILiIZm8CkQghAtfwUwan4upLdsoWU00=; b=D5xGMZhIC3TRcsju2YKfLuBS0K+Vt7c+TQfwcD6r/DFJUSdxKYRJ/sOYUBEfxmHB15FZOK LhZxFuEP3rAulMBg== From: Sebastian Andrzej Siewior To: Thomas Gleixner Cc: Peter Zijlstra , linux-kernel@vger.kernel.org, Ingo Molnar , Gusenleitner Klaus , Frederic Weisbecker Subject: [PATCH] timekeeping: Align tick_sched_timer() with the HZ tick. Message-ID: <20230418122639.ikgfvu3f@linutronix.de> References: <20230406095735.0_14edn3@linutronix.de> <20230406105529.GB392176@hirez.programming.kicks-ass.net> <87mt3lqnde.ffs@tglx> <20230406150254.ZrawA2Y-@linutronix.de> <87jzypq6gq.ffs@tglx> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <87jzypq6gq.ffs@tglx> X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With HIGHRES enabled tick_sched_timer() is programmed every jiffy to expire the timer_list timers. This timer is programmed accurate in respect to CLOCK_MONOTONIC so that 0 seconds and nanoseconds is the first tick and the next one is 1000/CONFIG_HZ ms later. For HZ=250 it is every 4 ms and so based on the current time the next tick can be computed. This accuracy broke since the commit mentioned below because the jiffy based clocksource is initialized with higher accuracy in read_persistent_wall_and_boot_offset(). This higher accuracy is inherited during the setup in tick_setup_device(). The timer still fires every 4ms with HZ=250 but timer is no longer aligned with CLOCK_MONOTONIC with 0 as it origin but has an offset in the us/ns part of the timestamp. The offset differs with every boot and makes it impossible for user land to align with the tick. Align the tick timer with CLOCK_MONOTONIC ensuring that it is always a multiple of 1000/CONFIG_HZ ms. Reported-by: Gusenleitner Klaus Link: https://lore.kernel.org/20230406095735.0_14edn3@linutronix.de Fixes: 857baa87b6422 ("sched/clock: Enable sched clock early") Signed-off-by: Sebastian Andrzej Siewior --- kernel/time/tick-common.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c index 46789356f856e..65b8658da829e 100644 --- a/kernel/time/tick-common.c +++ b/kernel/time/tick-common.c @@ -218,9 +218,19 @@ static void tick_setup_device(struct tick_device *td, * this cpu: */ if (tick_do_timer_cpu == TICK_DO_TIMER_BOOT) { + ktime_t next_p; + u32 rem; + tick_do_timer_cpu = cpu; - tick_next_period = ktime_get(); + next_p = ktime_get(); + div_u64_rem(next_p, TICK_NSEC, &rem); + if (rem) { + next_p -= rem; + next_p += TICK_NSEC; + } + + tick_next_period = next_p; #ifdef CONFIG_NO_HZ_FULL /* * The boot CPU may be nohz_full, in which case set -- 2.40.0