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:
Sebastian Huber
2016-03-22 07:58:41 +01:00
parent c61431f934
commit 865f110b58
2 changed files with 10 additions and 3 deletions

View File

@@ -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 ) \

View File

@@ -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.