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 { \
|
do { \
|
||||||
uint32_t ncpus = _SMP_Get_processor_count(); \
|
uint32_t ncpus = _SMP_Get_processor_count(); \
|
||||||
uint32_t cpu; \
|
uint32_t cpu; \
|
||||||
_ISR_Disable( isr_cookie ); \
|
_ISR_Disable_without_giant( isr_cookie ); \
|
||||||
for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { \
|
for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { \
|
||||||
_Per_CPU_Acquire( _Per_CPU_Get_by_index( 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 ) { \
|
for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { \
|
||||||
_Per_CPU_Release( _Per_CPU_Get_by_index( cpu ) ); \
|
_Per_CPU_Release( _Per_CPU_Get_by_index( cpu ) ); \
|
||||||
} \
|
} \
|
||||||
_ISR_Enable( isr_cookie ); \
|
_ISR_Enable_without_giant( isr_cookie ); \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
#else
|
#else
|
||||||
#define _Per_CPU_Release_all( isr_cookie ) \
|
#define _Per_CPU_Release_all( isr_cookie ) \
|
||||||
|
|||||||
@@ -20,13 +20,20 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <rtems/score/userextimpl.h>
|
#include <rtems/score/userextimpl.h>
|
||||||
|
#include <rtems/score/objectimpl.h>
|
||||||
#include <rtems/score/percpu.h>
|
#include <rtems/score/percpu.h>
|
||||||
|
#include <rtems/score/sysstate.h>
|
||||||
|
|
||||||
void _User_extensions_Add_set(
|
void _User_extensions_Add_set(
|
||||||
User_extensions_Control *the_extension
|
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.
|
* If a switch handler is present, append it to the switch chain.
|
||||||
|
|||||||
Reference in New Issue
Block a user