summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-04-20 09:50:01 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-04-21 08:25:32 +0200
commitd3802bb5d708d01d03774b6758ed1e87484b8fac (patch)
tree40ff15dcafece4b9e5a72eb9706831d44ab2c5dc
parentscore: Add _Thread_Get_interrupt_disable() (diff)
downloadrtems-d3802bb5d708d01d03774b6758ed1e87484b8fac.tar.bz2
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.
-rw-r--r--cpukit/score/Makefile.am1
-rw-r--r--cpukit/score/include/rtems/score/object.h3
-rw-r--r--cpukit/score/include/rtems/score/objectimpl.h95
-rw-r--r--cpukit/score/include/rtems/score/thread.h1
-rw-r--r--cpukit/score/src/objectacquire.c80
-rw-r--r--cpukit/score/src/objectclose.c2
6 files changed, 1 insertions, 181 deletions
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 <rtems/score/basedefs.h>
#include <rtems/score/cpu.h>
#include <rtems/score/chain.h>
-#include <rtems/score/isrlock.h>
#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
@@ -591,98 +591,6 @@ Objects_Control *_Objects_Get_no_protection(
);
/**
- * @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.
*
* @param[in] information points to an object class information block.
@@ -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 <rtems/score/mppkt.h>
#endif
+#include <rtems/score/isrlock.h>
#include <rtems/score/object.h>
#include <rtems/score/percpu.h>
#include <rtems/score/priority.h>
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
- * <rtems@embedded-brains.de>
- *
- * 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 <rtems/score/objectimpl.h>
-
-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 );
}