diff options
author | Daniel Cederman <cederman@gaisler.com> | 2014-07-11 16:37:56 +0200 |
---|---|---|
committer | Daniel Hellstrom <daniel@gaisler.com> | 2014-08-22 13:10:59 +0200 |
commit | ddbc3f8d83678313ca61d2936e6efd50b3e044b0 (patch) | |
tree | 305f3c4a7df80244bac626682d43718e7284e714 /cpukit/score/include/rtems/score/smpimpl.h | |
parent | bsp/sparc: Flush only instruction cache (diff) | |
download | rtems-ddbc3f8d83678313ca61d2936e6efd50b3e044b0.tar.bz2 |
score: Add SMP support to the cache manager
Adds functions that allows the user to specify which cores that should
perform the cache operation. SMP messages are sent to all the specified
cores and the caller waits until all cores have acknowledged that they
have flushed their cache. If CPU_CACHE_NO_INSTRUCTION_CACHE_SNOOPING is
defined the instruction cache invalidation function will perform the
operation on all cores using the previous method.
Diffstat (limited to 'cpukit/score/include/rtems/score/smpimpl.h')
-rw-r--r-- | cpukit/score/include/rtems/score/smpimpl.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/smpimpl.h b/cpukit/score/include/rtems/score/smpimpl.h index cbc64280de..dca8a6bec8 100644 --- a/cpukit/score/include/rtems/score/smpimpl.h +++ b/cpukit/score/include/rtems/score/smpimpl.h @@ -21,6 +21,7 @@ #include <rtems/score/smp.h> #include <rtems/score/percpu.h> #include <rtems/fatal.h> +#include <rtems/rtems/cache.h> #ifdef __cplusplus extern "C" { @@ -51,6 +52,13 @@ extern "C" { #define SMP_MESSAGE_TEST 0x2UL /** + * @brief SMP message to request a cache manager invocation. + * + * @see _SMP_Send_message(). + */ +#define SMP_MESSAGE_CACHE_MANAGER 0x4UL + +/** * @brief SMP fatal codes. */ typedef enum { @@ -127,6 +135,12 @@ static inline void _SMP_Set_test_message_handler( } /** + * @brief Handles cache invalidation/flush requests from a remote processor. + * + */ +void _SMP_Cache_manager_message_handler( void ); + +/** * @brief Interrupt handler for inter-processor interrupts. */ static inline void _SMP_Inter_processor_interrupt_handler( void ) @@ -148,6 +162,11 @@ static inline void _SMP_Inter_processor_interrupt_handler( void ) if ( ( message & SMP_MESSAGE_TEST ) != 0 ) { ( *_SMP_Test_message_handler )( cpu_self ); } + + if ( ( message & SMP_MESSAGE_CACHE_MANAGER ) != 0 ) { + _SMP_Cache_manager_message_handler(); + } + } } |