From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC8DB3D6477 for ; Fri, 3 Apr 2026 21:02:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775250142; cv=none; b=dW03gKo9W5s62ayKys2cdYtfnPyNUkYxlz4ykLCvqz5ZEN+gUT9mYFL7BdoAUqQlOFojauVojReKfrEkrB712TZrR4bvH0URy5bUGcOs3VELAPMHcG8c/3x1pXOg3pjYkTK+MY+jdAbJVHPftW+oSnAPgh4cum1oiDkQSOplr9Y= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775250142; c=relaxed/simple; bh=cFgxkD1Hk3ixrJtUdxUN/6aaEBRBheD1ZBMGLb65jeo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=aWxCaEsC0XMw4uvCgkFtRs/57EY/4gWY7XwcfYYYeGpPBjXaeLTF+RvNZQjRcVlGqkZYvfc0m+zYgNPHoGKo0j8PirPJD9OUTGCd/wS1cAjKkTpd935QEgcKigXpyH9hYoJGE0G5raXf/YI++8m+qO81KdRFICl7stSC28IrFgs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=JmBxaKdt; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="JmBxaKdt" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=dOAVR/KsKGimhCqBt/Zo1KImfZFIEGUN6YFBAIKCIdw=; b=JmBxaKdtkkUkWeBPQs84+vqh/s 8glD8tawUSCsEtM3LWKV+ftxJ7Sy3mKHiZeUwAIvKLUIRyDp1Y14xbeNEyfyNpdODUWXeNYr7xHdl i5hhCYauEisIvIpk7Ay0IGDdiMk/DWSrEeAxI6IhS5ociIHfHLSC15QGENe0SRgGNvUCbHj9vlQBk vz/j/aVht/EeJ/bvaR5UcK6h+YImvslpF26Hjf/O0tRngbVtwOte0vXcIc3VtrNi/d0QulyEE3Ml5 q1jE71rdmCuYYrLYubO52jZ7Di0Hjq7c6z32HYAV14NLvZsnXB7Dp3GXJ3Dm1HxfXteM8tfloTuF5 X2+mpdEw==; Received: from 77-249-17-252.cable.dynamic.v4.ziggo.nl ([77.249.17.252] helo=noisy.programming.kicks-ass.net) by casper.infradead.org with esmtpsa (Exim 4.98.2 #2 (Red Hat Linux)) id 1w8leE-0000000F0PR-2TeT; Fri, 03 Apr 2026 21:01:46 +0000 Received: by noisy.programming.kicks-ass.net (Postfix, from userid 1000) id 4D4DA300346; Fri, 03 Apr 2026 23:01:45 +0200 (CEST) Date: Fri, 3 Apr 2026 23:01:45 +0200 From: Peter Zijlstra To: Thomas Gleixner Cc: Borislav Petkov , Calvin Owens , Petr Mladek , linux-kernel@vger.kernel.org, arighi@nvidia.com, yaozhenguo1@gmail.com, tj@kernel.org, feng.tang@linux.alibaba.com, lirongqing@baidu.com, realwujing@gmail.com, hu.shengming@zte.com.cn, dianders@chromium.org, joel.granados@kernel.org, Ingo Molnar , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Frederic Weisbecker , Anna-Maria Behnsen , x86@kernel.org Subject: Re: [PATCH] clockevents: Prevent timer interrupt starvation Message-ID: <20260403210145.GD2872@noisy.programming.kicks-ass.net> References: <87v7ejetl1.ffs@tglx> <875x6a913n.ffs@tglx> <20260401163435.GGac1JG42tWmsCKL37@fat_crate.local> <87jyup70ka.ffs@tglx> <20260403121648.GZ3738010@noisy.programming.kicks-ass.net> <87341c6mt0.ffs@tglx> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87341c6mt0.ffs@tglx> On Fri, Apr 03, 2026 at 06:17:15PM +0200, Thomas Gleixner wrote: > --- a/kernel/time/hrtimer.c > +++ b/kernel/time/hrtimer.c > @@ -1888,6 +1888,7 @@ void hrtimer_interrupt(struct clock_even > BUG_ON(!cpu_base->hres_active); > cpu_base->nr_events++; > dev->next_event = KTIME_MAX; > + dev->next_event_forced = 0; > > raw_spin_lock_irqsave(&cpu_base->lock, flags); > entry_time = now = hrtimer_update_base(cpu_base); > --- a/kernel/time/tick-common.c > +++ b/kernel/time/tick-common.c > @@ -110,6 +110,7 @@ void tick_handle_periodic(struct clock_e > int cpu = smp_processor_id(); > ktime_t next = dev->next_event; > > + dev->next_event_forced = 0; > tick_periodic(cpu); > > /* > --- a/kernel/time/tick-sched.c > +++ b/kernel/time/tick-sched.c > @@ -1513,6 +1513,7 @@ static void tick_nohz_lowres_handler(str > struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched); > > dev->next_event = KTIME_MAX; > + dev->next_event_forced = 0; > > if (likely(tick_nohz_handler(&ts->sched_timer) == HRTIMER_RESTART)) > tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1); Doesn't that want to be something like this instead? --- virtual patch @@ expression E; struct clock_event_device *ptr; @@ - if (E->event_handler) - E->event_handler(E); + clockevent_handler(E); @@ expression E; struct clock_event_device *ptr; @@ - E->event_handler(E); + clockevent_handler(E); --- --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h @@ -159,6 +159,13 @@ static inline bool clockevent_state_ones return dev->state_use_accessors == CLOCK_EVT_STATE_ONESHOT_STOPPED; } +static inline void clockevent_handler(struct clock_event_device *dev) +{ + dev->next_event_forced = 0; + if (dev->event_handler) + dev->event_handler(dev); +} + /* * Calculate a multiplication factor for scaled math, which is used to convert * nanoseconds based values to clock ticks: