From nobody Sun Feb 8 07:21:54 2026 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1295015665C for ; Thu, 25 Dec 2025 08:16:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766650600; cv=none; b=dfubPF56zFBxD1DVB4pFzqx0ewW0XkTaIgv9gQe5B8aMidTEHvTvtGRdc2JAmeGURMHirYsmXLybWzqKxf7Nv0DRwuQvWhameUbM/cM7vpudhz0GrYRpyxvy8ITbQ77Bz3qp+rzFar9GBdii0tJHgEar8+h4+bortN3QmLKvoJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766650600; c=relaxed/simple; bh=PJijvVySaHLo/cpiS2rDvB2lis3qmoO0I/ixuWZDblo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=Rpg3IR5IUfvkwpeF7p3Lr1vI8BuFyKdq3+vak390nt7RH/brE78x+WUdldcf5nciNIVpi1utuYSs0YjbYqZhY1vzOPw73XT7MYgjKdBZn+LK/3CRMy4hLp4yVG0RU6KhSLHZrkpeKBNXssxDZwAR77iXBEw0P+myA7AlJLGZlI0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nKVXBOmd; arc=none smtp.client-ip=209.85.210.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nKVXBOmd" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-7b9387df58cso10460513b3a.3 for ; Thu, 25 Dec 2025 00:16:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766650598; x=1767255398; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=GcQyJUdha4jeDSGNeOvn/hyk/QmPV1+qpaXo8gbkA6I=; b=nKVXBOmd+d5eytC116tGjYbGH3sMu8JQX61WITfkAVwhpVS4e0y6a9WB7gZvCW7N1G 3R4DSjyrJyLqNNVW4uu4OlIxG19axaKwn1QeSnSWbi77yJDhLmkcPqSrtID3AqwRfvDy /c8G6xO4XuKclfx3pdEk9N0/2DvJbmHv+rLjMK6q1EhoIbLK4nzUk/EZkuRaZgAWP4VM uap2WaIs9xaXrZcOkFNwgeoTlfDgKWvz08wLJKysMqiFOvJYryubnwC4Lo32/EeRoKMI B9odGcwsJ07iubSzz2b5rXJ7Zw9opeL7VUvbsk1XjcBNCwwfHUceJ2aLp6g7i6KYC1NP 289w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766650598; x=1767255398; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=GcQyJUdha4jeDSGNeOvn/hyk/QmPV1+qpaXo8gbkA6I=; b=ed9Pih36iGWus3wWOGCBxfdipWYTQGjVARTNyUsljuPhed4b/YF+lK0QfLZSyubjEy dzu/QXXR+Ag964pWjuIhAX3L5gW6VVfrbOaewQ7OxD1bCImW7Iq2+ZX89TwZcvIR7WHE rNor7wz3T6pEQ0AhFa/Nqq7bLIgy0bJ5+b8AaNn1TDqeUyuOd1wwVHlqXBkiuyCTHVBh By/r++LTyQ83fGPhpx+BTFGbcykfy4rhcY9jBajZFYO5skDnxboC5uRauhQokOCwmfoV 593VhsEbmOIBqo5jHWoSnyU2lafjZJVE+zmMtoR61/zz0hmtGtcYszHbZzVbz/aFWzBe tXuw== X-Gm-Message-State: AOJu0YySYrZ1xtXDMEYBHGh1hMPwP4BwsgVIMsPSPV0zarHr7FUH8PdE Yaa9wdd5vFFNkGloYiG3QEvRby+c4cQFAnJCD7QdHeTivpJrbTGDC34LAiEF0J74 X-Gm-Gg: AY/fxX6r1VqRWS0uo09gWBWDImiB0A4koPmIFLx5/gIv8L4IGFhds4fqtOkBC+5C5xe z96EJjM9Ry1qhs5UU6k8ZUHCXt6Fvj7cv+R2/8kKY1hKlsaf57188fnBnBf0sZADLMVRHsAIF6O xax8N+rHc790NN5vfVgW0J7ISOgyL7AzCvDaHnpXcHS2LP6mGMETpYBb36UXD+Udb4TgHtt1Jco SYa8Qf5nI1VDgGDjiaf7uTgVH3NDv83+65A+V2hk8y0+L9LFMfk3YDvhHxvGWTCsi3jNjz702sU OQkm/vAWPbPPpg1N2C6hONCKfUZHCjo9rg7sdyRMnvvyi6ijoXTI6BgAD7mQipVvnKl7UcWNKf+ j/K/PX33ANtFEu3YW4jQ3qa7bM2OiO2/ExL63ViADqjS56Ol0Nc9hKBN/I41wQvoFBNhlyiu9H5 zJ2O0I3mNwgl9f5Aah3hg= X-Google-Smtp-Source: AGHT+IGiqujeFc90Rn28PAxUWUT0bpoopk+Kx5KmwPSb3IZmfmKEhfcgsiBOXZ0UEwFeg89PgHksBA== X-Received: by 2002:a05:6a00:8017:b0:7ac:edc4:fb92 with SMTP id d2e1a72fcca58-7ff646f9458mr17004211b3a.11.1766650597996; Thu, 25 Dec 2025 00:16:37 -0800 (PST) Received: from [127.0.1.1] ([180.172.132.17]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7e0a19besm18562932b3a.40.2025.12.25.00.16.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Dec 2025 00:16:37 -0800 (PST) From: Stephen Eta Zhou Date: Thu, 25 Dec 2025 16:16:31 +0800 Subject: [PATCH v2] clocksource: timer-sp804: Fix an Oops when read_current_timer is called on ARM32 platforms where the SP804 is not registered as the sched_clock. 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251225-fix_timersp804-v2-1-a366d7157f58@gmail.com> X-B4-Tracking: v=1; b=H4sIAN7yTGkC/13MQQqDMBCF4avIrJuSSSOpXXmPIkWSUQcalURCi +TuTYVuuvyHed8OkQJThFu1Q6DEkZe5hDpVYKd+HkmwKw1KqhoVGjHw67GxpxDXq9TCNCgJrTb oNJTRGqh8HOC9Kz1x3JbwPvyE3+uPav6phAKFVJIu1pGxQ92Ovufn2S4eupzzB+YDlZasAAAA X-Change-ID: 20251217-fix_timersp804-7910e1c471d4 To: Daniel Lezcano , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, Guenter Roeck , kernel test robot , Stephen Eta Zhou X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766650595; l=3287; i=stephen.eta.zhou@gmail.com; s=20250411; h=from:subject:message-id; bh=PJijvVySaHLo/cpiS2rDvB2lis3qmoO0I/ixuWZDblo=; b=JOvZDVZk/VcD+l4nHAdAGFOKU05RcP+yeFwHEwO5U/YhFjhYy43ZR+OrYwDfqUiHSLGcMkVVN PwfaWX1HnB6AIwT3XmgB1NXwGjcwH6bIuXMnkPZeu9eLOkv0YBZwClq X-Developer-Key: i=stephen.eta.zhou@gmail.com; a=ed25519; pk=JMRa8Po5ykvp3C9lVKJCeZ9BuRW6xWwa0Sj4KqnLoOk= On SP804, the delay timer shares the same clkevt instance with sched_clock. On some platforms, when sp804_clocksource_and_sched_clock_init is called with use_sched_clock not set to 1, sched_clkevt is not properly initialized. However, sp804_register_delay_timer is invoked unconditionally, and read_current_timer() subsequently calls sp804_read on an uninitialized sched_clkevt, leading to a kernel Oops when accessing sched_clkevt->value. Declare a dedicated clkevt instance exclusively for delay timer, instead of sharing the same clkevt with sched_clock. This ensures that read_current_timer continues to work correctly regardless of whether SP804 is selected as the sched_clock. Fixes: 640594a04f11 ("clocksource/drivers/timer-sp804: Fix read_current_tim= er() issue when clock source is not registered") Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202512250520.APOMkYRQ-lkp@int= el.com/ Signed-off-by: Stephen Eta Zhou --- Changes in v2: - Declared `delay_clkevt` as `static` to fix the sparse warning. - Link to v1: https://lore.kernel.org/r/20251219-fix_timersp804-v1-1-020e3c= de7cf5@gmail.com --- drivers/clocksource/timer-sp804.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/clocksource/timer-sp804.c b/drivers/clocksource/timer-= sp804.c index e82a95ea472478ae096b2bf7abea0d65a7bca480..d698584273596b99973afcc10da= 07c19d26cf8a5 100644 --- a/drivers/clocksource/timer-sp804.c +++ b/drivers/clocksource/timer-sp804.c @@ -106,21 +106,25 @@ static u64 notrace sp804_read(void) return ~readl_relaxed(sched_clkevt->value); } =20 +/* Register delay timer backed by the hardware counter */ #ifdef CONFIG_ARM static struct delay_timer delay; +static struct sp804_clkevt *delay_clkevt; + static unsigned long sp804_read_delay_timer_read(void) { - return sp804_read(); + return ~readl_relaxed(delay_clkevt->value); } =20 -static void sp804_register_delay_timer(int freq) +static void sp804_register_delay_timer(struct sp804_clkevt *clk, int freq) { + delay_clkevt =3D clk; delay.freq =3D freq; delay.read_current_timer =3D sp804_read_delay_timer_read; register_current_timer_delay(&delay); } #else -static inline void sp804_register_delay_timer(int freq) {} +static inline void sp804_register_delay_timer(struct sp804_clkevt *clk, in= t freq) {} #endif =20 static int __init sp804_clocksource_and_sched_clock_init(void __iomem *bas= e, @@ -135,8 +139,6 @@ static int __init sp804_clocksource_and_sched_clock_ini= t(void __iomem *base, if (rate < 0) return -EINVAL; =20 - sp804_register_delay_timer(rate); - clkevt =3D sp804_clkevt_get(base); =20 writel(0, clkevt->ctrl); @@ -152,6 +154,8 @@ static int __init sp804_clocksource_and_sched_clock_ini= t(void __iomem *base, clocksource_mmio_init(clkevt->value, name, rate, 200, 32, clocksource_mmio_readl_down); =20 + sp804_register_delay_timer(clkevt, rate); + if (use_sched_clock) { sched_clkevt =3D clkevt; sched_clock_register(sp804_read, 32, rate); --- base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8 change-id: 20251217-fix_timersp804-7910e1c471d4 Best regards, --=20 Stephen Eta Zhou