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



##########
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.
   > @patacongo @davids5 @xiaoxiang781216 Any ideas?
   
   nxsig_timedwait is protected by the critical section, so before 
up_block_task get called, the interrupt service doesn't have the chance to run.
   
   > 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.
   
   No, if @antmerlino's report is correct, we need fix this bug:
   1.Either fix the race condition or
   2.Enlarge timeout to a safe value at wd level
   How do you check every place to ensure all timeout isn't too small to hit 
the race condition?




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


Reply via email to