[rtems commit] bsps/clock: Fix fast idle for SMP

Sebastian Huber sebh at rtems.org
Mon Mar 11 13:40:41 UTC 2024


Module:    rtems
Branch:    master
Commit:    85b55a7624bb8c16eb0745eb4dc8cc90bfec8d59
Changeset: http://git.rtems.org/rtems/commit/?id=85b55a7624bb8c16eb0745eb4dc8cc90bfec8d59

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jan 16 10:47:35 2024 +0100

bsps/clock: Fix fast idle for SMP

---

 bsps/shared/dev/clock/clockimpl.h | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/bsps/shared/dev/clock/clockimpl.h b/bsps/shared/dev/clock/clockimpl.h
index e922c0b320..c58a6eb079 100644
--- a/bsps/shared/dev/clock/clockimpl.h
+++ b/bsps/shared/dev/clock/clockimpl.h
@@ -139,6 +139,21 @@ volatile uint32_t    Clock_driver_ticks;
 #error "Clock_driver_support_shutdown_hardware() is no longer supported"
 #endif
 
+#if CLOCK_DRIVER_USE_FAST_IDLE
+static bool _Clock_Has_watchdogs(const Per_CPU_Control *cpu)
+{
+  size_t i;
+
+  for (i = 0; i < RTEMS_ARRAY_SIZE(cpu->Watchdog.Header); ++i) {
+    if (_Watchdog_Header_first(&cpu->Watchdog.Header[i]) != NULL) {
+      return true;
+    }
+  }
+
+  return false;
+}
+#endif
+
 /**
  *  @brief Clock_isr
  *
@@ -182,6 +197,7 @@ rtems_isr Clock_isr(
           cpu_self->thread_dispatch_disable_level == cpu_self->isr_nest_level
             && cpu_self->heir == cpu_self->executing
             && cpu_self->executing->is_idle
+            && _Clock_Has_watchdogs(cpu_self)
         ) {
           ISR_lock_Context lock_context;
 



More information about the vc mailing list