forked from Imagelibrary/rtems
score: Fix for RTEMS_DEBUG
The rtems_extension_create() no longer uses the Giant lock. Ensure that we call _User_extensions_Add_set() only in the right context. Update #2555.
This commit is contained in:
@@ -521,7 +521,7 @@ extern Per_CPU_Control_envelope _Per_CPU_Information[] CPU_STRUCTURE_ALIGNMENT;
|
||||
do { \
|
||||
uint32_t ncpus = _SMP_Get_processor_count(); \
|
||||
uint32_t cpu; \
|
||||
_ISR_Disable( isr_cookie ); \
|
||||
_ISR_Disable_without_giant( isr_cookie ); \
|
||||
for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { \
|
||||
_Per_CPU_Acquire( _Per_CPU_Get_by_index( cpu ) ); \
|
||||
} \
|
||||
@@ -539,7 +539,7 @@ extern Per_CPU_Control_envelope _Per_CPU_Information[] CPU_STRUCTURE_ALIGNMENT;
|
||||
for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { \
|
||||
_Per_CPU_Release( _Per_CPU_Get_by_index( cpu ) ); \
|
||||
} \
|
||||
_ISR_Enable( isr_cookie ); \
|
||||
_ISR_Enable_without_giant( isr_cookie ); \
|
||||
} while ( 0 )
|
||||
#else
|
||||
#define _Per_CPU_Release_all( isr_cookie ) \
|
||||
|
||||
@@ -20,13 +20,20 @@
|
||||
#endif
|
||||
|
||||
#include <rtems/score/userextimpl.h>
|
||||
#include <rtems/score/objectimpl.h>
|
||||
#include <rtems/score/percpu.h>
|
||||
#include <rtems/score/sysstate.h>
|
||||
|
||||
void _User_extensions_Add_set(
|
||||
User_extensions_Control *the_extension
|
||||
)
|
||||
{
|
||||
_Chain_Append( &_User_extensions_List, &the_extension->Node );
|
||||
_Assert(
|
||||
_Objects_Allocator_is_owner()
|
||||
|| _System_state_Is_before_multitasking( _System_state_Get() )
|
||||
);
|
||||
|
||||
_Chain_Append_unprotected( &_User_extensions_List, &the_extension->Node );
|
||||
|
||||
/*
|
||||
* If a switch handler is present, append it to the switch chain.
|
||||
|
||||
Reference in New Issue
Block a user