U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Patrice Chotard <patrice.chotard@foss.st.com>
To: <u-boot@lists.denx.de>
Cc: Stefan Roese <stefan.roese@mailbox.org>,
	Tom Rini <trini@konsulko.com>,
	Marek Vasut <marek.vasut@mailbox.org>,
	Patrice Chotard <patrice.chotard@foss.st.com>,
	Rasmus Villemoes <rv@rasmusvillemoes.dk>
Subject: [PATCH v3 2/2] cyclic: reduce get_timer_us() calls inside hlist_for_each_entry_safe()
Date: Mon, 6 Jul 2026 18:06:09 +0200	[thread overview]
Message-ID: <20260706-optimize_cyclic_run-v3-2-06ecbd74ef7c@foss.st.com> (raw)
In-Reply-To: <20260706-optimize_cyclic_run-v3-0-06ecbd74ef7c@foss.st.com>

On STM32MP157C-DK2, when using the "ums" command, in sleep_thread(),
ctrlc() is called every ~640ms which doesn't allows high reactivity when
user press CTRL+C in U-Boot console.

In sleep_thread() loop, ctrlc() is called every 200000 iterations.
But schedule is called on each loop iteration.

Optimize cyclic_run() in order to not call get_timer_us() on each entry.

This allow to save computation time :
  _ before : ctrlc() is called every ~640ms
  _ after  : ctrlc() is called every ~230ms

Signed-off-by: Rasmus Villemoes <rv@rasmusvillemoes.dk>
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
Cc: Marek Vasut <marek.vasut@mailbox.org>
---
 common/cyclic.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/common/cyclic.c b/common/cyclic.c
index b37cd6d8ff0..573e715587d 100644
--- a/common/cyclic.c
+++ b/common/cyclic.c
@@ -67,26 +67,28 @@ static void cyclic_run(void)
 {
 	struct cyclic_info *cyclic;
 	struct hlist_node *tmp;
-	u64 now, cpu_time;
+	u64 now, after, cpu_time;
 
 	/* Prevent recursion */
 	if (gd->flags & GD_FLG_CYCLIC_RUNNING)
 		return;
 
 	gd->flags |= GD_FLG_CYCLIC_RUNNING;
+	now = get_timer_us(0);
 	hlist_for_each_entry_safe(cyclic, tmp, cyclic_get_list(), list) {
 		/*
 		 * Check if this cyclic function needs to get called, e.g.
 		 * do not call the cyclic func too often
 		 */
-		now = get_timer_us(0);
 		if (time_after_eq64(now, cyclic->next_call)) {
 			/* Call cyclic function and account it's cpu-time */
 			cyclic->next_call = now + cyclic->delay_us;
 			cyclic->func(cyclic);
+			after = get_timer_us(0);
 			cyclic->run_cnt++;
-			cpu_time = get_timer_us(0) - now;
+			cpu_time = after - now;
 			cyclic->cpu_time_us += cpu_time;
+			now = after;
 
 			/* Check if cpu-time exceeds max allowed time */
 			if ((cpu_time > CONFIG_CYCLIC_MAX_CPU_TIME_US) &&

-- 
2.43.0


  parent reply	other threads:[~2026-07-06 16:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <06AYLlZJayftY3ITyG07ouD_oc-X0pMFXqzrLEm_rtDW1xG8060KvmGZPZ_IQJ1g5Bz2KXoMLI4N3lrK61fDjg==@protonmail.internalid>
2026-07-06 16:06 ` [PATCH v3 0/2] cyclic: update and optimization Patrice Chotard
2026-07-06 16:06   ` [PATCH v3 1/2] cyclic: replace uint64_t by u64 suggested by b4 Patrice Chotard
2026-07-06 16:06   ` Patrice Chotard [this message]
2026-07-06 17:28   ` [PATCH v3 0/2] cyclic: update and optimization Rasmus Villemoes
2026-07-16 23:25   ` Tom Rini

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=20260706-optimize_cyclic_run-v3-2-06ecbd74ef7c@foss.st.com \
    --to=patrice.chotard@foss.st.com \
    --cc=marek.vasut@mailbox.org \
    --cc=rv@rasmusvillemoes.dk \
    --cc=stefan.roese@mailbox.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox