From d3802bb5d708d01d03774b6758ed1e87484b8fac Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 20 Apr 2015 09:50:01 +0200 Subject: score: Delete object control block ISR lock The Objects_Control::Lock was a software layer violation. It worked only for the threads since they are somewhat special. Update #2273. --- cpukit/score/Makefile.am | 1 - cpukit/score/include/rtems/score/object.h | 3 - cpukit/score/include/rtems/score/objectimpl.h | 95 --------------------------- cpukit/score/include/rtems/score/thread.h | 1 + cpukit/score/src/objectacquire.c | 80 ---------------------- cpukit/score/src/objectclose.c | 2 - 6 files changed, 1 insertion(+), 181 deletions(-) delete mode 100644 cpukit/score/src/objectacquire.c diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am index b12124c469..0a6beb4522 100644 --- a/cpukit/score/Makefile.am +++ b/cpukit/score/Makefile.am @@ -203,7 +203,6 @@ libscore_a_SOURCES += src/objectallocate.c src/objectclose.c \ src/objectgetinfo.c src/objectgetinfoid.c src/objectapimaximumclass.c \ src/objectnamespaceremove.c \ src/objectactivecount.c -libscore_a_SOURCES += src/objectacquire.c ## SCHEDULER_C_FILES libscore_a_SOURCES += src/log2table.c diff --git a/cpukit/score/include/rtems/score/object.h b/cpukit/score/include/rtems/score/object.h index 36449431d4..70e5fe630c 100644 --- a/cpukit/score/include/rtems/score/object.h +++ b/cpukit/score/include/rtems/score/object.h @@ -23,7 +23,6 @@ #include #include #include -#include #ifdef __cplusplus extern "C" { @@ -237,8 +236,6 @@ typedef struct { Objects_Id id; /** This is the object's name. */ Objects_Name name; - /** This is the object's ISR lock. */ - ISR_LOCK_MEMBER( Lock ) } Objects_Control; #if defined( RTEMS_MULTIPROCESSING ) diff --git a/cpukit/score/include/rtems/score/objectimpl.h b/cpukit/score/include/rtems/score/objectimpl.h index cf14c2db5c..4080a249cf 100644 --- a/cpukit/score/include/rtems/score/objectimpl.h +++ b/cpukit/score/include/rtems/score/objectimpl.h @@ -590,98 +590,6 @@ Objects_Control *_Objects_Get_no_protection( Objects_Locations *location ); -/** - * @brief Acquires an object by its identifier. - * - * This function is similar to _Objects_Get_isr_disable(). It disables - * interrupts and acquires the object specific ISR lock for local objects. - * Thread dispatching is not disabled for local objects. For remote objects - * thread dispatching is disabled. - * - * @param[in] information The object information. - * @param[in] id The object identifier. - * @param[in] location The location of the object. - * @param[in] lock_context The lock context for local objects. - * - * @retval object The object corresponding to the identifier. - * @retval NULL No object exists in this domain for this identifier. - * - * @see _Objects_ISR_disable_and_acquire(), _Objects_Release(), - * _Objects_Release_and_ISR_enable(), and - * _Objects_Release_and_thread_dispatch_disable(). - */ -Objects_Control *_Objects_Acquire( - const Objects_Information *information, - Objects_Id id, - Objects_Locations *location, - ISR_lock_Context *lock_context -); - -/** - * @brief Acquires a local object and disables interrupts. - * - * @param[in] the_object The local object to acquire. - * @param[in] lock_context The lock context. - */ -RTEMS_INLINE_ROUTINE void _Objects_ISR_disable_and_acquire( - Objects_Control *the_object, - ISR_lock_Context *lock_context -) -{ - _ISR_lock_ISR_disable_and_acquire( &the_object->Lock, lock_context ); -} - -/** - * @brief Releases a local object. - * - * @param[in] the_object The local object acquired by _Objects_Acquire(). - * @param[in] lock_context The lock context initialized by _Objects_Acquire(). - */ -RTEMS_INLINE_ROUTINE void _Objects_Release( - Objects_Control *the_object, - ISR_lock_Context *lock_context -) -{ - _ISR_lock_Release( &the_object->Lock, lock_context ); -} - -/** - * @brief Releases a local object and restores the interrupt level. - * - * @param[in] the_object The local object acquired by _Objects_Acquire(). - * @param[in] lock_context The lock context initialized by _Objects_Acquire(). - */ -RTEMS_INLINE_ROUTINE void _Objects_Release_and_ISR_enable( - Objects_Control *the_object, - ISR_lock_Context *lock_context -) -{ - _ISR_lock_Release_and_ISR_enable( &the_object->Lock, lock_context ); -} - -/** - * @brief Releases a local object, disables thread dispatching and restores the - * interrupt level. - * - * @param[in] the_object The local object acquired by _Objects_Acquire(). - * @param[in] lock_context The lock context initialized by _Objects_Acquire(). - * - * @return The current processor. - */ -RTEMS_INLINE_ROUTINE Per_CPU_Control * -_Objects_Release_and_thread_dispatch_disable( - Objects_Control *the_object, - ISR_lock_Context *lock_context -) -{ - Per_CPU_Control *cpu_self; - - cpu_self = _Thread_Dispatch_disable_critical(); - _Objects_Release_and_ISR_enable( the_object, lock_context ); - - return cpu_self; -} - /** * Like @ref _Objects_Get, but is used to find "next" open object. * @@ -995,7 +903,6 @@ RTEMS_INLINE_ROUTINE void _Objects_Open( _Assert( the_object != NULL ); the_object->name = name; - _ISR_lock_Initialize( &the_object->Lock, "Object" ); _Objects_Set_local_object( information, @@ -1020,7 +927,6 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_u32( { /* ASSERT: information->is_string == false */ the_object->name.name_u32 = name; - _ISR_lock_Initialize( &the_object->Lock, "Object" ); _Objects_Set_local_object( information, @@ -1047,7 +953,6 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_string( /* ASSERT: information->is_string */ the_object->name.name_p = name; #endif - _ISR_lock_Initialize( &the_object->Lock, "Object" ); _Objects_Set_local_object( information, diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h index ef238a339d..bc521bbc4b 100644 --- a/cpukit/score/include/rtems/score/thread.h +++ b/cpukit/score/include/rtems/score/thread.h @@ -26,6 +26,7 @@ #if defined(RTEMS_MULTIPROCESSING) #include #endif +#include #include #include #include diff --git a/cpukit/score/src/objectacquire.c b/cpukit/score/src/objectacquire.c deleted file mode 100644 index 57d38f47bd..0000000000 --- a/cpukit/score/src/objectacquire.c +++ /dev/null @@ -1,80 +0,0 @@ -/** - * @file - * - * @brief Object Acquire - * - * @ingroup ScoreObject - */ - -/* - * Copyright (c) 2015 embedded brains GmbH. All rights reserved. - * - * embedded brains GmbH - * Dornierstr. 4 - * 82178 Puchheim - * Germany - * - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.org/license/LICENSE. - */ - -#if HAVE_CONFIG_H - #include "config.h" -#endif - -#include - -Objects_Control *_Objects_Acquire( - const Objects_Information *information, - Objects_Id id, - Objects_Locations *location, - ISR_lock_Context *lock_context -) -{ - Objects_Control *the_object; - uint32_t index; - - index = id - information->minimum_id + 1; - - if ( information->maximum >= index ) { - /* - * On uni-processor configurations we disable interrupts before we use the - * local table. This prevents use of freed memory in case the object - * information is extended in between. On SMP configurations bad things - * can happen, see https://devel.rtems.org/ticket/2280. - */ -#if !defined(RTEMS_SMP) - ISR_Level level; - - _ISR_Disable( level ); -#endif - if ( ( the_object = information->local_table[ index ] ) != NULL ) { - *location = OBJECTS_LOCAL; -#if defined(RTEMS_SMP) - _ISR_lock_ISR_disable_and_acquire( &the_object->Lock, lock_context ); -#else - lock_context->isr_level = level; -#endif - - return the_object; - } -#if !defined(RTEMS_SMP) - _ISR_Enable( level ); -#endif - *location = OBJECTS_ERROR; - - return NULL; - } - - *location = OBJECTS_ERROR; - -#if defined(RTEMS_MULTIPROCESSING) - _Objects_MP_Is_remote( information, id, location, &the_object ); - - return the_object; -#else - return NULL; -#endif -} diff --git a/cpukit/score/src/objectclose.c b/cpukit/score/src/objectclose.c index 25c7aa1a36..52eb10c60b 100644 --- a/cpukit/score/src/objectclose.c +++ b/cpukit/score/src/objectclose.c @@ -28,6 +28,4 @@ void _Objects_Close( _Objects_Invalidate_Id( information, the_object ); _Objects_Namespace_remove( information, the_object ); - - _ISR_lock_Destroy( &the_object->Lock ); } -- cgit v1.2.3