[PATCH 1/6] score: Remove _Objects_Open()
Sebastian Huber
sebastian.huber at embedded-brains.de
Mon Feb 22 08:43:44 UTC 2021
Use the type safe _Objects_Open_u32() instead. Return the object
identifier to enforce a common usage pattern.
---
cpukit/include/rtems/score/objectimpl.h | 60 +++++++++----------------
cpukit/include/rtems/score/threadimpl.h | 4 +-
cpukit/rtems/src/barriercreate.c | 9 +---
cpukit/rtems/src/dpmemcreate.c | 6 +--
cpukit/rtems/src/msgqconstruct.c | 6 +--
cpukit/rtems/src/partcreate.c | 5 +--
cpukit/rtems/src/ratemoncreate.c | 6 +--
cpukit/rtems/src/regioncreate.c | 5 +--
cpukit/rtems/src/semcreate.c | 6 +--
cpukit/rtems/src/taskconstruct.c | 2 +-
cpukit/rtems/src/timercreate.c | 6 +--
cpukit/sapi/src/extensioncreate.c | 6 +--
cpukit/score/src/mpci.c | 2 +-
cpukit/score/src/threadcreateidle.c | 2 +-
cpukit/score/src/threadinitialize.c | 5 +--
15 files changed, 44 insertions(+), 86 deletions(-)
diff --git a/cpukit/include/rtems/score/objectimpl.h b/cpukit/include/rtems/score/objectimpl.h
index 1a0029b3b0..8ba8189976 100644
--- a/cpukit/include/rtems/score/objectimpl.h
+++ b/cpukit/include/rtems/score/objectimpl.h
@@ -738,50 +738,27 @@ RTEMS_INLINE_ROUTINE void _Objects_Invalidate_Id(
}
/**
- * @brief Places the_object control pointer and object name
- * in the Local Pointer and Local Name Tables, respectively.
+ * @brief Assigns the 32-bit unsigned integer name to the object and places the
+ * object in the local object table.
*
- * This method uses Objects_Name for the object name.
+ * @param information is the object information.
*
- * @param[in, out] information Points to an Object Information Table.
- * @param the_object Pointer to an object.
- * @param name The name of the object to make accessible.
- */
-RTEMS_INLINE_ROUTINE void _Objects_Open(
- Objects_Information *information,
- Objects_Control *the_object,
- Objects_Name name
-)
-{
- _Assert( information != NULL );
- _Assert( the_object != NULL );
-
- the_object->name = name;
-
- _Objects_Set_local_object(
- information,
- _Objects_Get_index( the_object->id ),
- the_object
- );
-}
-
-/**
- * @brief Places the_object control pointer and object name
- * in the Local Pointer and Local Name Tables, respectively.
+ * @param[in, out] the_object is the object to open.
*
- * This method uses uint32_t for the object name.
+ * @param name is the name of the object to open.
*
- * @param[in, out] information Points to an Object Information Table.
- * @param the_object Pointer to an object.
- * @param name The name of the object to make accessible.
+ * @return Returns the identifier of the object which is now valid.
*/
-RTEMS_INLINE_ROUTINE void _Objects_Open_u32(
+RTEMS_INLINE_ROUTINE Objects_Id _Objects_Open_u32(
const Objects_Information *information,
Objects_Control *the_object,
uint32_t name
)
{
+ _Assert( information != NULL );
_Assert( !_Objects_Has_string_name( information ) );
+ _Assert( the_object != NULL );
+
the_object->name.name_u32 = name;
_Objects_Set_local_object(
@@ -789,17 +766,19 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_u32(
_Objects_Get_index( the_object->id ),
the_object
);
+
+ return the_object->id;
}
/**
- * @brief Places the_object control pointer and object name
- * in the Local Pointer and Local Name Tables, respectively.
+ * @brief Assigns the string name to the object and places the object in the
+ * local object table.
*
- * This method uses a String for the object name.
+ * @param information is the object information.
*
- * @param[in, out] information Points to an Object Information Table.
- * @param the_object Pointer to an object.
- * @param name The name of the object to make accessible.
+ * @param[in, out] the_object is the object to open.
+ *
+ * @param name is the name of the object to open.
*/
RTEMS_INLINE_ROUTINE void _Objects_Open_string(
const Objects_Information *information,
@@ -807,7 +786,10 @@ RTEMS_INLINE_ROUTINE void _Objects_Open_string(
const char *name
)
{
+ _Assert( information != NULL );
_Assert( _Objects_Has_string_name( information ) );
+ _Assert( the_object != NULL );
+
the_object->name.name_p = name;
_Objects_Set_local_object(
diff --git a/cpukit/include/rtems/score/threadimpl.h b/cpukit/include/rtems/score/threadimpl.h
index e9d44526da..0c7df47f36 100644
--- a/cpukit/include/rtems/score/threadimpl.h
+++ b/cpukit/include/rtems/score/threadimpl.h
@@ -164,9 +164,9 @@ typedef struct {
Thread_CPU_budget_algorithm_callout budget_callout;
/**
- * @brief Name of the object for the thread.
+ * @brief 32-bit unsigned integer name of the object for the thread.
*/
- Objects_Name name;
+ uint32_t name;
/**
* @brief The thread's initial ISR level.
diff --git a/cpukit/rtems/src/barriercreate.c b/cpukit/rtems/src/barriercreate.c
index 6e6b294832..99d916d8c7 100644
--- a/cpukit/rtems/src/barriercreate.c
+++ b/cpukit/rtems/src/barriercreate.c
@@ -63,14 +63,7 @@ rtems_status_code rtems_barrier_create(
_CORE_barrier_Initialize( &the_barrier->Barrier, &the_attributes );
- _Objects_Open(
- &_Barrier_Information,
- &the_barrier->Object,
- (Objects_Name) name
- );
-
- *id = the_barrier->Object.id;
-
+ *id = _Objects_Open_u32( &_Barrier_Information, &the_barrier->Object, name );
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
diff --git a/cpukit/rtems/src/dpmemcreate.c b/cpukit/rtems/src/dpmemcreate.c
index bc14de19c8..eba3a523c4 100644
--- a/cpukit/rtems/src/dpmemcreate.c
+++ b/cpukit/rtems/src/dpmemcreate.c
@@ -59,13 +59,11 @@ rtems_status_code rtems_port_create(
the_port->external_base = external_start;
the_port->length = length - 1;
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Dual_ported_memory_Information,
&the_port->Object,
- (Objects_Name) name
+ name
);
-
- *id = the_port->Object.id;
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
diff --git a/cpukit/rtems/src/msgqconstruct.c b/cpukit/rtems/src/msgqconstruct.c
index a8a50e9aa1..6cada4c570 100644
--- a/cpukit/rtems/src/msgqconstruct.c
+++ b/cpukit/rtems/src/msgqconstruct.c
@@ -158,14 +158,12 @@ rtems_status_code _Message_queue_Create(
return _Status_Get( status );
}
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Message_queue_Information,
&the_message_queue->Object,
- (Objects_Name) config->name
+ config->name
);
- *id = the_message_queue->Object.id;
-
#if defined(RTEMS_MULTIPROCESSING)
if ( is_global )
_Message_queue_MP_Send_process_packet(
diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index 205a31620e..012a416a1a 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -138,13 +138,12 @@ rtems_status_code rtems_partition_create(
attribute_set
);
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Partition_Information,
&the_partition->Object,
- (Objects_Name) name
+ name
);
- *id = the_partition->Object.id;
#if defined(RTEMS_MULTIPROCESSING)
if ( _Attributes_Is_global( attribute_set ) )
_Partition_MP_Send_process_packet(
diff --git a/cpukit/rtems/src/ratemoncreate.c b/cpukit/rtems/src/ratemoncreate.c
index 09f7806a05..cd56a13df6 100644
--- a/cpukit/rtems/src/ratemoncreate.c
+++ b/cpukit/rtems/src/ratemoncreate.c
@@ -60,13 +60,11 @@ rtems_status_code rtems_rate_monotonic_create(
_Rate_monotonic_Reset_statistics( the_period );
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Rate_monotonic_Information,
&the_period->Object,
- (Objects_Name) name
+ name
);
-
- *id = the_period->Object.id;
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
diff --git a/cpukit/rtems/src/regioncreate.c b/cpukit/rtems/src/regioncreate.c
index d05d37aec4..112cac2cd2 100644
--- a/cpukit/rtems/src/regioncreate.c
+++ b/cpukit/rtems/src/regioncreate.c
@@ -75,13 +75,12 @@ rtems_status_code rtems_region_create(
} else {
the_region->attribute_set = attribute_set;
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Region_Information,
&the_region->Object,
- (Objects_Name) name
+ name
);
- *id = the_region->Object.id;
return_status = RTEMS_SUCCESSFUL;
}
}
diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c
index 20c2c7192d..3647bb7b13 100644
--- a/cpukit/rtems/src/semcreate.c
+++ b/cpukit/rtems/src/semcreate.c
@@ -245,14 +245,12 @@ rtems_status_code rtems_semaphore_create(
* Whether we initialized it as a mutex or counting semaphore, it is
* now ready to be "offered" for use as a Classic API Semaphore.
*/
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Semaphore_Information,
&the_semaphore->Object,
- (Objects_Name) name
+ name
);
- *id = the_semaphore->Object.id;
-
#if defined(RTEMS_MULTIPROCESSING)
if ( _Attributes_Is_global( attribute_set ) )
_Semaphore_MP_Send_process_packet(
diff --git a/cpukit/rtems/src/taskconstruct.c b/cpukit/rtems/src/taskconstruct.c
index d33a850d88..799554c417 100644
--- a/cpukit/rtems/src/taskconstruct.c
+++ b/cpukit/rtems/src/taskconstruct.c
@@ -135,7 +135,7 @@ rtems_status_code _RTEMS_tasks_Create(
THREAD_CPU_BUDGET_ALGORITHM_RESET_TIMESLICE
: THREAD_CPU_BUDGET_ALGORITHM_NONE,
thread_config.isr_level = _Modes_Get_interrupt_level( config->initial_modes );
- thread_config.name.name_u32 = config->name;
+ thread_config.name = config->name;
thread_config.is_fp = _Attributes_Is_floating_point( attributes );
thread_config.is_preemptible = _Modes_Is_preempt( config->initial_modes );
diff --git a/cpukit/rtems/src/timercreate.c b/cpukit/rtems/src/timercreate.c
index ce143f59f6..a3ece5cc4d 100644
--- a/cpukit/rtems/src/timercreate.c
+++ b/cpukit/rtems/src/timercreate.c
@@ -209,13 +209,11 @@ rtems_status_code rtems_timer_create(
the_timer->the_class = TIMER_DORMANT;
_Watchdog_Preinitialize( &the_timer->Ticker, _Per_CPU_Get_snapshot() );
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Timer_Information,
&the_timer->Object,
- (Objects_Name) name
+ name
);
-
- *id = the_timer->Object.id;
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
diff --git a/cpukit/sapi/src/extensioncreate.c b/cpukit/sapi/src/extensioncreate.c
index 73ea91a8e1..383ca66000 100644
--- a/cpukit/sapi/src/extensioncreate.c
+++ b/cpukit/sapi/src/extensioncreate.c
@@ -55,13 +55,11 @@ rtems_status_code rtems_extension_create(
_User_extensions_Add_set_with_table( &the_extension->Extension, extension_table );
- _Objects_Open(
+ *id = _Objects_Open_u32(
&_Extension_Information,
&the_extension->Object,
- (Objects_Name) name
+ name
);
-
- *id = the_extension->Object.id;
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
diff --git a/cpukit/score/src/mpci.c b/cpukit/score/src/mpci.c
index a18155351a..91d0eb0214 100644
--- a/cpukit/score/src/mpci.c
+++ b/cpukit/score/src/mpci.c
@@ -142,7 +142,7 @@ static void _MPCI_Create_server( void )
memset( &config, 0, sizeof( config ) );
config.scheduler = &_Scheduler_Table[ 0 ];
- config.name.name_u32 = _Objects_Build_name( 'M', 'P', 'C', 'I' );
+ config.name = _Objects_Build_name( 'M', 'P', 'C', 'I' );
config.priority = PRIORITY_PSEUDO_ISR;
config.budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
config.is_fp = CPU_ALL_TASKS_ARE_FP;
diff --git a/cpukit/score/src/threadcreateidle.c b/cpukit/score/src/threadcreateidle.c
index 50114b84de..04a103cf14 100644
--- a/cpukit/score/src/threadcreateidle.c
+++ b/cpukit/score/src/threadcreateidle.c
@@ -50,7 +50,7 @@ static void _Thread_Create_idle_for_CPU( Per_CPU_Control *cpu )
config.scheduler->maximum_priority
);
config.budget_algorithm = THREAD_CPU_BUDGET_ALGORITHM_NONE;
- config.name.name_u32 = _Objects_Build_name( 'I', 'D', 'L', 'E' );
+ config.name = _Objects_Build_name( 'I', 'D', 'L', 'E' );
config.is_fp = CPU_IDLE_TASK_IS_FP;
config.is_preemptible = true;
config.stack_size = _Thread_Idle_stack_size
diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
index 05c30c3d43..10eb0d7a3f 100644
--- a/cpukit/score/src/threadinitialize.c
+++ b/cpukit/score/src/threadinitialize.c
@@ -241,10 +241,7 @@ bool _Thread_Initialize(
_Thread_Action_control_initialize( &the_thread->Post_switch_actions );
- /*
- * Open the object
- */
- _Objects_Open( &information->Objects, &the_thread->Object, config->name );
+ _Objects_Open_u32( &information->Objects, &the_thread->Object, config->name );
/*
* We assume the Allocator Mutex is locked and dispatching is
--
2.26.2
More information about the devel
mailing list