antmerlino commented on a change in pull request #1380:
URL: https://github.com/apache/incubator-nuttx/pull/1380#discussion_r452284698



##########
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:
       ```
   358               /* Start the watchdog */
   359
   360               wd_start(rtcb->waitdog, waitticks,
   361                        nxsig_timeout, 1, wdparm.pvarg);
   362
   363               /* Now wait for either the signal or the watchdog, but
   364                * first, make sure this is not the idle task,
   365                * descheduling that isn't going to end well.
   366                */
   367
   368               DEBUGASSERT(NULL != rtcb->flink);
   369               up_block_task(rtcb, TSTATE_WAIT_SIG);
   ```
   
   So my changes fix the issue at the tickless driver level, however now there 
is another race condition in sig_timedwait.c.
   
   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.
   @patacongo @davids5 @xiaoxiang781216 Any ideas?




----------------------------------------------------------------
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]


Reply via email to