summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/score
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-12-21 14:31:55 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-02-02 15:01:20 +0100
commit89c0313938aea0618a624b7230ed29cebe723d75 (patch)
tree05272eb7673abc783d329269d575eb208c0716d9 /cpukit/include/rtems/score
parentsmptests/smpopenmp01: New test (diff)
downloadrtems-89c0313938aea0618a624b7230ed29cebe723d75.tar.bz2
score: Optimize watchdog tickle
Avoid unnecessary lock acquire/release operations. Get realtime via timecounter only if necessary. Update #3264.
Diffstat (limited to 'cpukit/include/rtems/score')
-rw-r--r--cpukit/include/rtems/score/watchdogimpl.h32
1 files changed, 12 insertions, 20 deletions
diff --git a/cpukit/include/rtems/score/watchdogimpl.h b/cpukit/include/rtems/score/watchdogimpl.h
index f219a70768..f1693d9fda 100644
--- a/cpukit/include/rtems/score/watchdogimpl.h
+++ b/cpukit/include/rtems/score/watchdogimpl.h
@@ -96,6 +96,13 @@ RTEMS_INLINE_ROUTINE void _Watchdog_Header_initialize(
header->first = NULL;
}
+RTEMS_INLINE_ROUTINE Watchdog_Control *_Watchdog_Header_first(
+ const Watchdog_Header *header
+)
+{
+ return (Watchdog_Control *) header->first;
+}
+
RTEMS_INLINE_ROUTINE void _Watchdog_Header_destroy(
Watchdog_Header *header
)
@@ -187,6 +194,7 @@ RTEMS_INLINE_ROUTINE void _Watchdog_Initialize(
void _Watchdog_Do_tickle(
Watchdog_Header *header,
+ Watchdog_Control *first,
uint64_t now,
#if defined(RTEMS_SMP)
ISR_lock_Control *lock,
@@ -195,11 +203,11 @@ void _Watchdog_Do_tickle(
);
#if defined(RTEMS_SMP)
- #define _Watchdog_Tickle( header, now, lock, lock_context ) \
- _Watchdog_Do_tickle( header, now, lock, lock_context )
+ #define _Watchdog_Tickle( header, first, now, lock, lock_context ) \
+ _Watchdog_Do_tickle( header, first, now, lock, lock_context )
#else
- #define _Watchdog_Tickle( header, now, lock, lock_context ) \
- _Watchdog_Do_tickle( header, now, lock_context )
+ #define _Watchdog_Tickle( header, first, now, lock, lock_context ) \
+ _Watchdog_Do_tickle( header, first, now, lock_context )
#endif
/**
@@ -548,22 +556,6 @@ RTEMS_INLINE_ROUTINE void _Watchdog_Per_CPU_remove_realtime(
);
}
-RTEMS_INLINE_ROUTINE void _Watchdog_Per_CPU_tickle_realtime(
- Per_CPU_Control *cpu,
- uint64_t now
-)
-{
- ISR_lock_Context lock_context;
-
- _ISR_lock_ISR_disable_and_acquire( &cpu->Watchdog.Lock, &lock_context );
- _Watchdog_Tickle(
- &cpu->Watchdog.Header[ PER_CPU_WATCHDOG_REALTIME ],
- now,
- &cpu->Watchdog.Lock,
- &lock_context
- );
-}
-
/** @} */
#ifdef __cplusplus