summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-22 07:58:41 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-03-22 08:05:28 +0100
commit865f110b58d944db72a71296fe3f15a4b8de097a (patch)
treec391b5473df06c6bae58bd0257edf27a28aa4be5
parentscore: Always declare _Objects_Get_by_name() (diff)
downloadrtems-865f110b58d944db72a71296fe3f15a4b8de097a.tar.bz2
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.
Diffstat (limited to '')
-rw-r--r--cpukit/score/include/rtems/score/percpu.h4
-rw-r--r--cpukit/score/src/userextaddset.c9
2 files changed, 10 insertions, 3 deletions
diff --git a/cpukit/score/include/rtems/score/percpu.h b/cpukit/score/include/rtems/score/percpu.h
index 95c93ddf3a..6b60858595 100644
--- a/cpukit/score/include/rtems/score/percpu.h
+++ b/cpukit/score/include/rtems/score/percpu.h
@@ -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 ) \
diff --git a/cpukit/score/src/userextaddset.c b/cpukit/score/src/userextaddset.c
index a55dd8cedc..f34ad0072f 100644
--- a/cpukit/score/src/userextaddset.c
+++ b/cpukit/score/src/userextaddset.c
@@ -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.