From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793654206; b=G3vGd4kV9AswSi2aX49h/7CRTLJLutr6E3jxRCsmBB+UCEuozwCF+AkAcB+YfOK/OBqT U7aWysk5j/ufbuC70xuC7YtKow4Te9WODSqZfQNX8a63XLBR6bZ7mrPKgQI+Ja2KXZGpu Srgolbk+6sFcVbEVDgZKsBmxGCG6gopbDEYlOZ4fsGZHZVFwszsTJHlygoXbQ9wek7f8Q GX6qKBw6avaJlljvj/hOGBh7FMBDddjKtZRv++kfBXAr654SuVHL+hh+mmbifc26FKnzh 8gbOReX2L93lxpWGjEpgULmZzXVRJcmYMwI5M40vws0r1E4TMLmCLg4RmlLs7OHN+tA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793654206; h=DMARC-Filter:DKIM-Signature:Received:X-MC-Unique: X-Mimecast-MFC-AGG-ID:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Gm-Message-State:X-Gm-Gg:X-Received:X-Received:Received:From:Date: Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-Id:References:In-Reply-To:To:Cc:X-Mailer: X-Developer-Signature:X-Developer-Key; bh=NVNdZHoQPN+JOSE1vDDpIyMY0YkiFmXQ5S2CPq/BOTY=; b=c9+GhkxEOgquiGnLZCExw6yLp/UjV9s+tLwRR7EeXLe760N0eYMkiXnt7k2Fk3eSne3Y JerZB5JkAKRnpen4i9pKKJTdUv+nUzrflr/smbcMU83xwWUNT9/oVR9+Pa8Gr1knXBj7S CvDp1MdbT5diBJm6CxDv5FT7TXrxP14dPP5+ulMaTghABh4y+B2mrvE10vl4qDC9fRRDw UL8XYcQ3ycpv2k8Kuj44VOOr6iHOSPTOmU43IBTOpxxaGX/mHZKOwHdekXs9xR36JCMz/ LiQ3+rpabz5tmCBbF527KJmmHWIMjSjHh5q6skpjcuLq0bxQfH74SqgNPaNv+BOdTWw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=IJaT6FAI; dkim=pass header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=google header.b=Oy2sd2j+; arc=none smtp.remote-ip=170.10.129.124 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90C61606A326 for ; Mon, 2 Nov 2026 21:16:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 90C61606A326 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=IJaT6FAI; dkim=pass (2048-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=google header.b=Oy2sd2j+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1793654204; 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: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NVNdZHoQPN+JOSE1vDDpIyMY0YkiFmXQ5S2CPq/BOTY=; b=IJaT6FAIa7aTamcsy2QZJQ7pscJm/akdUTH+7dQDeb0SBrfwOzPt5XmZA1kaZRaIZaiDZp 7ZOBPUCWwzLGVxQx4949H1s2JtQVydW5woPXK782wtphS5xbBHPT5/C+8MmiqJMH7CzKHk Vxm1Op3S7VCBNAaXEBjAyrWj5DVupNU= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-213-owBLxOemMPmepnR5WOtglw-1; Mon, 02 Nov 2026 16:16:43 -0500 X-MC-Unique: owBLxOemMPmepnR5WOtglw-1 X-Mimecast-MFC-AGG-ID: owBLxOemMPmepnR5WOtglw_1793654202 Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4aa7a73b799so4907895e9.2 for ; Mon, 02 Nov 2026 13:16:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1793654202; x=1794259002; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NVNdZHoQPN+JOSE1vDDpIyMY0YkiFmXQ5S2CPq/BOTY=; b=Oy2sd2j+V2rQ/PnlaP4UzDtHk4NudnB44qal76nw2rMOcG9Rd3yD3trmnEfxkIKnpY eDDabyEI95SLIelAJwBGzroxFr3zPtrxITbTVPd0AQ9/Wpkg0DlOH6iUgEcJ6yGFsZZX 2PEyQ6WHzUS9aHMbbPcWvLVuX9gmcuaIO3UMUhT2EYpSefo7+WHE4lBQpy6U0z5++DGt bVZH7E3/P1A6jUceH+jB7aVQptyWl+HzS8LunSM/VrMbqrcdEhpPPZcAljpaFAx+XF9v R90553uqIsTK1fZn7MxAmrvGMjnGHtP3CE5+iPDOtzWa80jHgw2LYau0U38ywbPsE/wG emeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793654202; x=1794259002; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=NVNdZHoQPN+JOSE1vDDpIyMY0YkiFmXQ5S2CPq/BOTY=; b=BhBa9+E0vN6qrHoFUPd46DICz+eNpQdwiGENSdkTojeot1lSTjrWbi3K3MzdizOiok M9K/bJhIXB+h2brQBdgzfVEeSQPnq8F6YSBG/hHFQ1lu9UiQvA2v5OSTjgGyZRZCXCSJ Xmb1m/EXQBS4hMN6DYkzY/DeqYEIHjfsNX5YXnrQBn7rf6WjIZLveUsOAc9vTxZxKqB+ nkeajVJoyu/rVI/1a9hdmGjJsYyvi7cg9Hf4c6U4F9XT+51JLYdZBqMw8NYKua/cU75Z OI5qO3rgY8C/KhWkfNmvfz2mwPgPlzC8/wUEFC6SZE+qld3R0MxFMRcB/cgHN6MuUKfj Bt7w== X-Gm-Message-State: AFq9FYKvRZDj/a9onJQCS3IL1BY9JuTqCeIRb5nUag8XuwQ+cbv3hytv hpQniofs06ur2Ze73JkRUi/sCE9TcxogwbUWx2rfBxqs1uL+jkS+pxYmxIaV4BmlwcQ5fCFCRY9 3HFLUHL7hb+V+GnHi63pTDoCqsAzUDKMJpg7HOj4vRvSTmifVnbwyNZKTQDRzPCJrQQ== X-Gm-Gg: AYBFou2hOjEZQF/ywk2BJb1VZyBOAj6KRWJ7KrP/aPmZLt1gwRoQUg7a622CqVKWPKZ nRx401QgcYfvqnqrBqTfSPvb/ZnhHgF5/L1sOk2jMBUIoRlyefWcuD0QJuSt1V9Dux0xuhh2uiR 0s6xfNHLONW91zpRfrFg36iTnabmKO1bPJmcgcUn+FmTUBt/pQxMDqqYOMAYI7YiK/Z1jmd+UQf a10aEoFeLAejfcC1f59n36WsJv5uk5aK1nZmhEwtoo5oaod539Z7UMv7N3oUoTzXh7bwQrwUnT9 5U+coYtDHhIAd9SG+pvBOj+0ilMCF4gGzN6sv/dO8rVN1r5szF0XILcq/oa2b7lfXO4EfrH/YVx C7j7ZFSrQTOrnWbfIH+h61K5VWSYU+8EAvh9elZ8ENVwsSOLbCVTSVNnPG0Rdy2KJPL2l82olRd KIpykWYqxv3jDtsg== X-Received: by 2002:a05:600c:c08c:b0:4a0:1e9f:64f6 with SMTP id 5b1f17b1804b1-4ac12193b17mr209123905e9.0.1793654202101; Mon, 02 Nov 2026 13:16:42 -0800 (PST) X-Received: by 2002:a05:600c:c08c:b0:4a0:1e9f:64f6 with SMTP id 5b1f17b1804b1-4ac12193b17mr209123535e9.0.1793654201707; Mon, 02 Nov 2026 13:16:41 -0800 (PST) Received: from localhost (119.red-83-42-172.dynamicip.rima-tde.net. [83.42.172.119]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4b2a9fafe08sm17123535e9.3.2026.11.02.13.16.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Nov 2026 13:16:38 -0800 (PST) From: Enric Balletbo i Serra Date: Mon, 02 Nov 2026 22:16:21 +0100 Subject: [PATCH v2 2/3] clocksource/drivers/nxp-stm: Fix missed comparator match in set_next_event X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261102-nxp-stm-fixes-v2-2-8ca2706f30ef@redhat.com> References: <20261102-nxp-stm-fixes-v2-0-8ca2706f30ef@redhat.com> In-Reply-To: <20261102-nxp-stm-fixes-v2-0-8ca2706f30ef@redhat.com> To: Daniel Lezcano , Thomas Gleixner , Maxime Coquelin , Alexandre Torgue , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt Cc: linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-rt-devel@lists.linux.dev, Ghennadi Procopciuc , NXP S32 Linux Team , stable@vger.kernel.org, Enric Balletbo i Serra X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1793654192; l=2807; i=eballetb@redhat.com; s=20261026; h=from:subject:message-id; bh=kUWoWgTvYPenE4IKiBrz1IwM+AB6oxN1Q/yu3Rn0P74=; b=IpqG5whRDSxl3Gemnzq/I3tMvPQOsvjl6i/rI0ZXL9gB1z0N/7it4tFHtVRUPlAyMQCeZQxH7 xIRxFfg7tweD7qacyfG/703TsKhVCLMA+IC05ckAZvQ9CwLerQxPFso X-Developer-Key: i=eballetb@redhat.com; a=ed25519; pk=5zh6xuAxTiQwglL2NXQFqWuyRPmCE8T5KPXLbNXhnKI= The NXP STM generates an interrupt only on exact match between STM_CNT and STM_CMP0. If the counter passes the comparator value before the overshoot check runs, the match is missed and the hardware must count through all 2^32 ticks (~32.2s at 133 MHz) before firing, causing soft lockups. The existing overshoot check: if (val > nxp_stm_clockevent_read_counter(stm_timer) + delta) simplifies to checking if counter_before > counter_after, which only detects a 32-bit counter wrap and misses the normal overshoot case where the counter advances past val. Use a signed comparison on the difference between the target and current counter values instead, following the established pattern in timer-imx-gpt. If the counter has reached or passed val, the signed difference goes to zero or negative and we return -ETIME so the clockevents layer retries immediately. Fixes: cec32ac75827 ("clocksource/drivers/nxp-timer: Add the System Timer Module for the s32gx platforms") Signed-off-by: Enric Balletbo i Serra --- drivers/clocksource/timer-nxp-stm.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/clocksource/timer-nxp-stm.c b/drivers/clocksource/timer-nxp-stm.c index ee249fed1b91..ed7662a4e2bc 100644 --- a/drivers/clocksource/timer-nxp-stm.c +++ b/drivers/clocksource/timer-nxp-stm.c @@ -247,7 +247,7 @@ static int nxp_stm_clockevent_shutdown(struct clock_event_device *ced) static int nxp_stm_clockevent_set_next_event(unsigned long delta, struct clock_event_device *ced) { struct stm_timer *stm_timer = ced_to_stm(ced); - u32 val; + u32 val, now; nxp_stm_clockevent_disable(stm_timer); @@ -258,16 +258,12 @@ static int nxp_stm_clockevent_set_next_event(unsigned long delta, struct clock_e writel(val, STM_CMP0(stm_timer->base)); /* - * The counter is shared across the channels and can not be - * stopped while we are setting the next event. If the delta - * is very small it is possible the counter increases above - * the computed 'val'. The min_delta value specified when - * registering the clockevent will prevent that. The second - * case is if the counter wraps while we compute the 'val' and - * before writing the comparator register. We read the counter, - * check if we are back in time and abort the timer with -ETIME. + * If the counter reached or passed 'val' during or before the + * write to the comparator, the hardware match will be missed, + * resulting in a full 32-bit (32.2s) wraparound lockup. */ - if (val > nxp_stm_clockevent_read_counter(stm_timer) + delta) + now = nxp_stm_clockevent_read_counter(stm_timer); + if ((int)(val - now) <= 0) return -ETIME; nxp_stm_clockevent_enable(stm_timer); -- 2.56.0