forked from Imagelibrary/rtems
score: Add _SMP_Need_inter_processor_interrupts()
Test for the proper system condition instead of using the rtems_configuration_is_smp_enabled() workaround. Update #3876.
This commit is contained in:
@@ -324,6 +324,21 @@ RTEMS_INLINE_ROUTINE const Processor_mask *_SMP_Get_online_processors( void )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Indicate if inter-processor interrupts are needed.
|
||||||
|
*
|
||||||
|
* @return True if inter-processor interrupts are needed for the correct system
|
||||||
|
* operation, otherwise false.
|
||||||
|
*/
|
||||||
|
RTEMS_INLINE_ROUTINE const bool _SMP_Need_inter_processor_interrupts( void )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Use the configured processor maximum instead of the actual to allow
|
||||||
|
* testing on uni-processor systems.
|
||||||
|
*/
|
||||||
|
return _SMP_Processor_configured_maximum > 1;
|
||||||
|
}
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <rtems/rtems/modesimpl.h>
|
#include <rtems/rtems/modesimpl.h>
|
||||||
#include <rtems/rtems/signalimpl.h>
|
#include <rtems/rtems/signalimpl.h>
|
||||||
#include <rtems/score/schedulerimpl.h>
|
#include <rtems/score/schedulerimpl.h>
|
||||||
|
#include <rtems/score/smpimpl.h>
|
||||||
#include <rtems/score/threadimpl.h>
|
#include <rtems/score/threadimpl.h>
|
||||||
#include <rtems/config.h>
|
#include <rtems/config.h>
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@ rtems_status_code rtems_task_mode(
|
|||||||
( mask & RTEMS_INTERRUPT_MASK ) != 0
|
( mask & RTEMS_INTERRUPT_MASK ) != 0
|
||||||
&& _Modes_Get_interrupt_level( mode_set ) != 0
|
&& _Modes_Get_interrupt_level( mode_set ) != 0
|
||||||
#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
|
#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
|
||||||
&& rtems_configuration_is_smp_enabled()
|
&& _SMP_Need_inter_processor_interrupts()
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
return RTEMS_NOT_IMPLEMENTED;
|
return RTEMS_NOT_IMPLEMENTED;
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ void _Thread_Do_dispatch( Per_CPU_Control *cpu_self, ISR_Level level )
|
|||||||
if (
|
if (
|
||||||
!_ISR_Is_enabled( level )
|
!_ISR_Is_enabled( level )
|
||||||
#if defined(RTEMS_SMP) && CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
|
#if defined(RTEMS_SMP) && CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
|
||||||
&& rtems_configuration_is_smp_enabled()
|
&& _SMP_Need_inter_processor_interrupts()
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
_Internal_error( INTERNAL_ERROR_BAD_THREAD_DISPATCH_ENVIRONMENT );
|
_Internal_error( INTERNAL_ERROR_BAD_THREAD_DISPATCH_ENVIRONMENT );
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ bool _Thread_Initialize(
|
|||||||
if (
|
if (
|
||||||
config->isr_level != 0
|
config->isr_level != 0
|
||||||
#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
|
#if CPU_ENABLE_ROBUST_THREAD_DISPATCH == FALSE
|
||||||
&& rtems_configuration_is_smp_enabled()
|
&& _SMP_Need_inter_processor_interrupts()
|
||||||
#endif
|
#endif
|
||||||
) {
|
) {
|
||||||
goto failed;
|
goto failed;
|
||||||
|
|||||||
Reference in New Issue
Block a user