Skip to content

Commit 5f55fed

Browse files
nordic-krchkartben
authored andcommitted
kernel: timeout: z_add_timeout to return expiration tick
Add return value to z_add_timeout. It returns system tick when timeout will expire. Signed-off-by: Krzysztof Chruściński <[email protected]>
1 parent 6d35969 commit 5f55fed

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

kernel/include/timeout_q.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@ static inline void z_init_timeout(struct _timeout *to)
3030
sys_dnode_init(&to->node);
3131
}
3232

33-
void z_add_timeout(struct _timeout *to, _timeout_func_t fn,
34-
k_timeout_t timeout);
33+
/* Adds the timeout to the queue.
34+
*
35+
* @return Absolute tick value when timeout will expire.
36+
*/
37+
k_ticks_t z_add_timeout(struct _timeout *to, _timeout_func_t fn, k_timeout_t timeout);
3538

3639
int z_abort_timeout(struct _timeout *to);
3740

@@ -53,9 +56,9 @@ static inline void z_init_thread_timeout(struct _thread_base *thread_base)
5356

5457
extern void z_thread_timeout(struct _timeout *timeout);
5558

56-
static inline void z_add_thread_timeout(struct k_thread *thread, k_timeout_t ticks)
59+
static inline k_ticks_t z_add_thread_timeout(struct k_thread *thread, k_timeout_t ticks)
5760
{
58-
z_add_timeout(&thread->base.timeout, z_thread_timeout, ticks);
61+
return z_add_timeout(&thread->base.timeout, z_thread_timeout, ticks);
5962
}
6063

6164
static inline void z_abort_thread_timeout(struct k_thread *thread)
@@ -84,10 +87,11 @@ k_ticks_t z_timeout_remaining(const struct _timeout *timeout);
8487
#define z_get_next_timeout_expiry() ((int32_t) K_TICKS_FOREVER)
8588
#define z_set_timeout_expiry(ticks, is_idle) do {} while (false)
8689

87-
static inline void z_add_thread_timeout(struct k_thread *thread, k_timeout_t ticks)
90+
static inline k_ticks_t z_add_thread_timeout(struct k_thread *thread, k_timeout_t ticks)
8891
{
8992
ARG_UNUSED(thread);
9093
ARG_UNUSED(ticks);
94+
return 0;
9195
}
9296

9397
#endif /* CONFIG_SYS_CLOCK_EXISTS */

kernel/timeout.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,12 @@ static int32_t next_timeout(int32_t ticks_elapsed)
9999
return ret;
100100
}
101101

102-
void z_add_timeout(struct _timeout *to, _timeout_func_t fn,
103-
k_timeout_t timeout)
102+
k_ticks_t z_add_timeout(struct _timeout *to, _timeout_func_t fn, k_timeout_t timeout)
104103
{
104+
k_ticks_t ticks = 0;
105+
105106
if (K_TIMEOUT_EQ(timeout, K_FOREVER)) {
106-
return;
107+
return 0;
107108
}
108109

109110
#ifdef CONFIG_KERNEL_COHERENCE
@@ -122,10 +123,12 @@ void z_add_timeout(struct _timeout *to, _timeout_func_t fn,
122123
ticks_elapsed = elapsed();
123124
has_elapsed = true;
124125
to->dticks = timeout.ticks + 1 + ticks_elapsed;
126+
ticks = curr_tick + to->dticks;
125127
} else {
126-
k_ticks_t ticks = Z_TICK_ABS(timeout.ticks) - curr_tick;
128+
k_ticks_t dticks = Z_TICK_ABS(timeout.ticks) - curr_tick;
127129

128-
to->dticks = MAX(1, ticks);
130+
to->dticks = MAX(1, dticks);
131+
ticks = timeout.ticks;
129132
}
130133

131134
for (t = first(); t != NULL; t = next(t)) {
@@ -151,6 +154,8 @@ void z_add_timeout(struct _timeout *to, _timeout_func_t fn,
151154
sys_clock_set_timeout(next_timeout(ticks_elapsed), false);
152155
}
153156
}
157+
158+
return ticks;
154159
}
155160

156161
int z_abort_timeout(struct _timeout *to)

tests/kernel/timer/timer_error_case/src/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ ZTEST_USER(timer_api_error, test_timer_user_data_set_null)
325325
k_thread_join(tid, K_FOREVER);
326326
}
327327

328-
extern void z_add_timeout(struct _timeout *to, _timeout_func_t fn,
329-
k_timeout_t timeout);
328+
extern k_ticks_t z_add_timeout(struct _timeout *to, _timeout_func_t fn, k_timeout_t timeout);
329+
330330
static void test_timer_handle(struct _timeout *t)
331331
{
332332
/**do nothing here**/

0 commit comments

Comments
 (0)