[PATCH 10/16] score: _Watchdog_Is_far_future_monotonic_timespec

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Oct 23 13:53:41 UTC 2017


Update #3117.
Update #3182.
---
 cpukit/sapi/include/confdefs.h                  | 3 +++
 cpukit/score/include/rtems/score/watchdog.h     | 9 +++++++++
 cpukit/score/include/rtems/score/watchdogimpl.h | 7 +++++++
 testsuites/sptests/spwatchdog/init.c            | 1 +
 4 files changed, 20 insertions(+)

diff --git a/cpukit/sapi/include/confdefs.h b/cpukit/sapi/include/confdefs.h
index 13e97c9487..aed740b594 100755
--- a/cpukit/sapi/include/confdefs.h
+++ b/cpukit/sapi/include/confdefs.h
@@ -3110,6 +3110,9 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
 
   const uint32_t _Watchdog_Ticks_per_second = _CONFIGURE_TICKS_PER_SECOND;
 
+  const uint64_t _Watchdog_Monotonic_max_seconds =
+    UINT64_MAX / _CONFIGURE_TICKS_PER_SECOND;
+
   /**
    * This is the Classic API Configuration Table.
    */
diff --git a/cpukit/score/include/rtems/score/watchdog.h b/cpukit/score/include/rtems/score/watchdog.h
index bbe2a93b26..8c3710334b 100644
--- a/cpukit/score/include/rtems/score/watchdog.h
+++ b/cpukit/score/include/rtems/score/watchdog.h
@@ -166,6 +166,15 @@ extern volatile Watchdog_Interval _Watchdog_Ticks_since_boot;
  */
 extern const uint32_t _Watchdog_Ticks_per_second;
 
+/**
+ * @brief The maximum number of seconds representable in the monotonic watchdog
+ * format.
+ *
+ * This constant is defined by the application configuration via
+ * <rtems/confdefs.h>.
+ */
+extern const uint64_t _Watchdog_Monotonic_max_seconds;
+
 /**@}*/
 
 #ifdef __cplusplus
diff --git a/cpukit/score/include/rtems/score/watchdogimpl.h b/cpukit/score/include/rtems/score/watchdogimpl.h
index 9fc1f05837..31b44f1d0b 100644
--- a/cpukit/score/include/rtems/score/watchdogimpl.h
+++ b/cpukit/score/include/rtems/score/watchdogimpl.h
@@ -319,6 +319,13 @@ RTEMS_INLINE_ROUTINE bool _Watchdog_Is_valid_interval_timespec(
   return _Watchdog_Is_valid_timespec( ts ) && ts->tv_sec >= 0;
 }
 
+RTEMS_INLINE_ROUTINE bool _Watchdog_Is_far_future_monotonic_timespec(
+  const struct timespec *ts
+)
+{
+  return ts->tv_sec >= _Watchdog_Monotonic_max_seconds;
+}
+
 RTEMS_INLINE_ROUTINE bool _Watchdog_Is_far_future_realtime_timespec(
   const struct timespec *ts
 )
diff --git a/testsuites/sptests/spwatchdog/init.c b/testsuites/sptests/spwatchdog/init.c
index 3ce7917166..603e46df77 100644
--- a/testsuites/sptests/spwatchdog/init.c
+++ b/testsuites/sptests/spwatchdog/init.c
@@ -58,6 +58,7 @@ static void test_watchdog_static_init( void )
 static void test_watchdog_config( void )
 {
   rtems_test_assert( _Watchdog_Ticks_per_second == 100 );
+  rtems_test_assert( _Watchdog_Monotonic_max_seconds == 184467440737095516 );
 }
 
 static bool test_watchdog_is_inactive( test_watchdog *watchdog )
-- 
2.12.3




More information about the devel mailing list