mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-11-09 08:37:58 +08:00
score: Add _SMP_Online_processors
This commit is contained in:
1 parent
c284a16000
commit
b3a4c48ebd
3 files changed
+25
-1
No files matched your search
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <rtems/score/smp.h>
|
||||
#include <rtems/score/percpu.h>
|
||||
#include <rtems/score/processormask.h>
|
||||
#include <rtems/fatal.h>
|
||||
#include <rtems/rtems/cache.h>
|
||||
|
||||
@@ -90,6 +91,16 @@ static inline void _SMP_Fatal( SMP_Fatal_code code )
|
||||
|
||||
#if defined( RTEMS_SMP )
|
||||
|
||||
/**
|
||||
* @brief Set of online processors.
|
||||
*
|
||||
* A processor is online if was started during system initialization. In this
|
||||
* case its corresponding bit in the mask is set.
|
||||
*
|
||||
* @see _SMP_Handler_initialize().
|
||||
*/
|
||||
extern Processor_mask _SMP_Online_processors;
|
||||
|
||||
/**
|
||||
* @brief Performs high-level initialization of a secondary processor and runs
|
||||
* the application threads.
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
#error "deferred FP switch not implemented for SMP"
|
||||
#endif
|
||||
|
||||
Processor_mask _SMP_Online_processors;
|
||||
|
||||
uint32_t _SMP_Processor_count;
|
||||
|
||||
static void _SMP_Start_processors( uint32_t cpu_count )
|
||||
@@ -36,7 +38,6 @@ static void _SMP_Start_processors( uint32_t cpu_count )
|
||||
uint32_t cpu_index_self = _SMP_Get_current_processor();
|
||||
uint32_t cpu_index;
|
||||
|
||||
|
||||
for ( cpu_index = 0 ; cpu_index < cpu_count; ++cpu_index ) {
|
||||
const Scheduler_Assignment *assignment =
|
||||
_Scheduler_Get_assignment( cpu_index );
|
||||
@@ -69,6 +70,8 @@ static void _SMP_Start_processors( uint32_t cpu_count )
|
||||
|
||||
++context->processor_count;
|
||||
cpu->scheduler_context = context;
|
||||
|
||||
_Processor_mask_Set( _SMP_Online_processors, cpu_index );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,6 +161,10 @@ static void test_send_message_flood(
|
||||
}
|
||||
|
||||
for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) {
|
||||
rtems_test_assert(
|
||||
_Processor_mask_Is_set(_SMP_Online_processors, cpu_index)
|
||||
);
|
||||
|
||||
printf(
|
||||
"inter-processor interrupts for processor %"
|
||||
PRIu32 "%s: %" PRIu32 "\n",
|
||||
@@ -169,6 +173,12 @@ static void test_send_message_flood(
|
||||
ctx->counters[cpu_index].value
|
||||
);
|
||||
}
|
||||
|
||||
for (; cpu_index < CPU_COUNT; ++cpu_index) {
|
||||
rtems_test_assert(
|
||||
!_Processor_mask_Is_set(_SMP_Online_processors, cpu_index)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static void test(void)
|
||||
|
||||
Reference in new issue
Block a user