[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250516070153.2410363-1-xavier_qy@163.com>
Date: Fri, 16 May 2025 15:01:53 +0800
From: Xavier Xia <xavier_qy@....com>
To: anna-maria@...utronix.de,
frederic@...nel.org,
tglx@...utronix.de
Cc: linux-kernel@...r.kernel.org,
Xavier Xia <xavier_qy@....com>
Subject: [PATCH v1] hrtimer: Simplify the logic of __hrtimer_get_next_event
Currently, __hrtimer_get_next_event makes two separate calls to
__hrtimer_next_event_base for HRTIMER_ACTIVE_SOFT and HRTIMER_ACTIVE_HARD
respectively to obtain expires_next. However, __hrtimer_next_event_base is
capable of traversing all timer types simultaneously by simply controlling
the active mask. There is no need to distinguish the order of traversal
between soft and hard timers, as the sole purpose is to find the earliest
expiration time.
Therefore, the code can be simplified by reducing the two calls to a single
invocation of __hrtimer_next_event_base, making the code more
straightforward and easier to understand.
Signed-off-by: Xavier Xia <xavier_qy@....com>
---
kernel/time/hrtimer.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index 517ee2590a29..7c23115d25b0 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -577,24 +577,15 @@ static ktime_t __hrtimer_next_event_base(struct hrtimer_cpu_base *cpu_base,
static ktime_t
__hrtimer_get_next_event(struct hrtimer_cpu_base *cpu_base, unsigned int active_mask)
{
- unsigned int active;
- struct hrtimer *next_timer = NULL;
ktime_t expires_next = KTIME_MAX;
- if (!cpu_base->softirq_activated && (active_mask & HRTIMER_ACTIVE_SOFT)) {
- active = cpu_base->active_bases & HRTIMER_ACTIVE_SOFT;
- cpu_base->softirq_next_timer = NULL;
- expires_next = __hrtimer_next_event_base(cpu_base, NULL,
- active, KTIME_MAX);
+ if (cpu_base->softirq_activated)
+ active_mask &= ~HRTIMER_ACTIVE_SOFT;
- next_timer = cpu_base->softirq_next_timer;
- }
-
- if (active_mask & HRTIMER_ACTIVE_HARD) {
- active = cpu_base->active_bases & HRTIMER_ACTIVE_HARD;
- cpu_base->next_timer = next_timer;
- expires_next = __hrtimer_next_event_base(cpu_base, NULL, active,
- expires_next);
+ active_mask &= cpu_base->active_bases;
+ if (active_mask) {
+ expires_next = __hrtimer_next_event_base(cpu_base, NULL, active_mask,
+ KTIME_MAX);
}
return expires_next;
--
2.34.1
Powered by blists - more mailing lists