patacongo commented on a change in pull request #1380: URL: https://github.com/apache/incubator-nuttx/pull/1380#discussion_r452390246
########## 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: > The issue is that nxsig_timeout can occur before we get into up_block_task. I'm not sure how to protect for this yet. As I argued above, try using up_udelay(6). There is no loss in performance in this case because the CPU is never relinquished in time by the thread anyway. This corrnercase is certainly not worth a redesign. ---------------------------------------------------------------- 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: us...@infra.apache.org