patacongo commented on a change in pull request #1380:
URL: https://github.com/apache/incubator-nuttx/pull/1380#discussion_r452442951
##########
File path: arch/arm/src/stm32f7/stm32_tickless.c
##########
@@ -988,22 +988,31 @@ int up_timer_start(FAR const struct timespec *ts)
}
#endif
+#ifdef CONFIG_SCHED_TICKLESS_ALARM
int up_alarm_start(FAR const struct timespec *ts)
{
uint64_t tm = ((uint64_t)ts->tv_sec * NSEC_PER_SEC + ts->tv_nsec) /
NSEC_PER_TICK;
- uint64_t counter = ((uint64_t)g_tickless.overflow << 32) |
- STM32_TIM_GETCOUNTER(g_tickless.tch);
-
- g_tickless.last_alrm = tm;
+ irqstate_t flags;
- int32_t diff = tm / NSEC_PER_TICK + counter;
+ flags = enter_critical_section();
STM32_TIM_SETCOMPARE(g_tickless.tch, CONFIG_STM32F7_TICKLESS_CHANNEL, tm);
stm32_tickless_ackint(g_tickless.channel);
stm32_tickless_enableint(CONFIG_STM32F7_TICKLESS_CHANNEL);
+ g_tickless.pending = true;
+
+ uint64_t counter = ((uint64_t)g_tickless.overflow << 32) |
+ STM32_TIM_GETCOUNTER(g_tickless.tch);
+
+ if (counter > tm)
+ {
+ stm32_interval_handler();
Review comment:
>
>
> @patacongo Can you explain something to me.
>
> In sig_timedwait.c line 258 we enter a critical section, disabling
interrupts.
>
> We do not call leave_critical_section(), re-enabling interrupts before we
start the watchdog and call up_block_task.
>
> How does this work? Does IRQ context switch somewhere when the task
switches to re-enable interrupts?
The critical section (and interrupt state) is a per thread property.
Disabling interrupts only has effect while the task is running. When it
suspends and another task runs, then that task's interrupt state is placed into
effect. So (usually) interrupts are re-enabled while the task sleeps.
I works in the context switch because the context switch saves and restores
the current state of the ARM interrupt control registers.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]