From: sashiko-bot@kernel.org
To: "Ankur Arora" <ankur.a.arora@oracle.com>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH v12 03/15] arm64/delay: move some constants out to a separate header
Date: Mon, 08 Jun 2026 08:22:08 +0000 [thread overview]
Message-ID: <20260608082208.8B4151F00898@smtp.kernel.org> (raw)
In-Reply-To: <20260608080440.127491-4-ankur.a.arora@oracle.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Integer overflow in RPMH_USECS_TO_CYCLES causing premature wakeup from cpuidle for sleep durations > 223 seconds.
--
commit 9dcd4c7ce0611e9eee2b5361157ecadfee51f77d
Author: Ankur Arora <ankur.a.arora@oracle.com>
arm64/delay: move some constants out to a separate header
Moves some constants and functions related to xloops, cycles computation
out to a new header. Also make __delay_cycles() available outside of
arch/arm64/lib/delay.c.
> diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
> index c6f7d5c9c493d..ad5ec5c0de0a3 100644
> --- a/drivers/soc/qcom/rpmh-rsc.c
> +++ b/drivers/soc/qcom/rpmh-rsc.c
> @@ -146,10 +146,10 @@ enum {
> * +---------------------------------------------------+
> */
>
> -#define USECS_TO_CYCLES(time_usecs) \
> - xloops_to_cycles((time_usecs) * 0x10C7UL)
> +#define RPMH_USECS_TO_CYCLES(time_usecs) \
> + rpmh_xloops_to_cycles((time_usecs) * 0x10C7UL)
>
> -static inline unsigned long xloops_to_cycles(u64 xloops)
> +static inline unsigned long rpmh_xloops_to_cycles(u64 xloops)
> {
> return (xloops * loops_per_jiffy * HZ) >> 32;
> }
[Severity: High]
This isn't a bug introduced by this patch, but does the multiplication
in rpmh_xloops_to_cycles() overflow for large sleep durations?
On Qualcomm ARM64 SoCs, loops_per_jiffy * HZ evaluates to the arch timer
rate, typically 19.2 MHz. The intermediate 64-bit multiplication will
overflow the 64-bit boundary if wakeup_us exceeds approximately 223
seconds.
[ ... ]
> @@ -819,7 +819,7 @@ void rpmh_rsc_write_next_wakeup(struct rsc_drv *drv)
> wakeup_us = ktime_to_us(wakeup);
>
> /* Convert the wakeup to arch timer scale */
> - wakeup_cycles = USECS_TO_CYCLES(wakeup_us);
> + wakeup_cycles = RPMH_USECS_TO_CYCLES(wakeup_us);
> wakeup_cycles += arch_timer_read_counter();
[Severity: High]
This is a pre-existing issue, but what happens in rpmh_rsc_write_next_wakeup()
when there are no pending timers?
If dev_pm_genpd_get_next_hrtimer() returns a maximum timeout value,
wakeup_us would severely overflow the 64-bit bounds in RPMH_USECS_TO_CYCLES()
multiple times.
Could this overflow cause the macro to return a wrapped, drastically
smaller cycle count, which is then added to arch_timer_read_counter()
and written to the RSC timer registers, causing the SoC to wake up
prematurely from cpuidle instead of remaining in deep sleep?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260608080440.127491-1-ankur.a.arora@oracle.com?part=3
next prev parent reply other threads:[~2026-06-08 8:22 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-08 8:04 [PATCH v12 00/15] barrier: Add smp_cond_load_{relaxed,acquire}_timeout() Ankur Arora
2026-06-08 8:04 ` [PATCH v12 01/15] asm-generic: barrier: Add smp_cond_load_relaxed_timeout() Ankur Arora
2026-06-08 8:25 ` sashiko-bot
2026-06-08 8:53 ` bot+bpf-ci
2026-06-08 8:04 ` [PATCH v12 02/15] arm64: barrier: Support smp_cond_load_relaxed_timeout() Ankur Arora
2026-06-08 8:31 ` sashiko-bot
2026-06-08 8:53 ` bot+bpf-ci
2026-06-08 8:04 ` [PATCH v12 03/15] arm64/delay: move some constants out to a separate header Ankur Arora
2026-06-08 8:22 ` sashiko-bot [this message]
2026-06-08 8:04 ` [PATCH v12 04/15] arm64: support WFET in smp_cond_load_relaxed_timeout() Ankur Arora
2026-06-08 8:27 ` sashiko-bot
2026-06-08 8:04 ` [PATCH v12 05/15] arm64: rqspinlock: Remove private copy of smp_cond_load_acquire_timewait() Ankur Arora
2026-06-08 8:19 ` sashiko-bot
2026-06-08 8:53 ` bot+bpf-ci
2026-06-08 8:04 ` [PATCH v12 06/15] asm-generic: barrier: Add smp_cond_load_acquire_timeout() Ankur Arora
2026-06-08 8:27 ` sashiko-bot
2026-06-08 8:04 ` [PATCH v12 07/15] atomic: Add atomic_cond_read_*_timeout() Ankur Arora
2026-06-08 8:23 ` sashiko-bot
2026-06-08 8:04 ` [PATCH v12 08/15] locking/atomic: scripts: build atomic_long_cond_read_*_timeout() Ankur Arora
2026-06-08 8:04 ` [PATCH v12 09/15] bpf/rqspinlock: switch check_timeout() to a clock interface Ankur Arora
2026-06-08 8:04 ` [PATCH v12 10/15] bpf/rqspinlock: Use smp_cond_load_acquire_timeout() Ankur Arora
2026-06-08 9:04 ` bot+bpf-ci
2026-06-08 8:04 ` [PATCH v12 11/15] sched: add need-resched timed wait interface Ankur Arora
2026-06-08 8:04 ` [PATCH v12 12/15] cpuidle/poll_state: Wait for need-resched via tif_need_resched_relaxed_wait() Ankur Arora
2026-06-08 8:31 ` sashiko-bot
2026-06-08 8:04 ` [PATCH v12 13/15] arm64/delay: enable testing smp_cond_load_relaxed_timeout() Ankur Arora
2026-06-08 8:32 ` sashiko-bot
2026-06-08 8:04 ` [PATCH v12 14/15] barrier: add tests for smp_cond_load_*_timeout() Ankur Arora
2026-06-08 8:04 ` [PATCH v12 15/15] barrier: add clock tests for smp_cond_load_relaxed_timeout() Ankur Arora
2026-06-08 8:34 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260608082208.8B4151F00898@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=ankur.a.arora@oracle.com \
--cc=bpf@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.