2002-07-01 Joel Sherrill <joel@OARcorp.com>

* Mega patch merge to change the format of the object IDs to
	loosen the dependency between the SCORE and the various APIs.
	There was considerable work to simplify the object name management
        and it appears that the name_table field is no longer needed.
	This patch also includes the addition of the internal mutex
	which is currently only used to protect some types of allocation
	and deallocation.  This significantly can reduce context
	switch latency under certain circumstances.  In particular,
	some heap/region operations were O(n) and had dispatching
	disabled.  This should help enormously.  With this merge,
	the patch is not as clean as it should be.  In particular,
	the documentation has not been modified to reflect the new object
	ID layout, the IDs in the test screens are not updated, and
	_Objects_Get_information needs to be a real routine not inlined.
	As part of this patch a lot of MP code for thread/proxy blocking
	was made conditional and cleaned up.
	* include/confdefs.h, src/exinit.c, src/extension.c, src/itronapi.c,
	src/posixapi.c, src/rtemsapi.c:  Modified as part of above.
This commit is contained in:
Joel Sherrill
2002-07-01 22:31:29 +00:00
parent ef9505a92f
commit 0577ec1d78
14 changed files with 94 additions and 20 deletions

View File

@@ -1,3 +1,24 @@
2002-07-01 Joel Sherrill <joel@OARcorp.com>
* Mega patch merge to change the format of the object IDs to
loosen the dependency between the SCORE and the various APIs.
There was considerable work to simplify the object name management
and it appears that the name_table field is no longer needed.
This patch also includes the addition of the internal mutex
which is currently only used to protect some types of allocation
and deallocation. This significantly can reduce context
switch latency under certain circumstances. In particular,
some heap/region operations were O(n) and had dispatching
disabled. This should help enormously. With this merge,
the patch is not as clean as it should be. In particular,
the documentation has not been modified to reflect the new object
ID layout, the IDs in the test screens are not updated, and
_Objects_Get_information needs to be a real routine not inlined.
As part of this patch a lot of MP code for thread/proxy blocking
was made conditional and cleaned up.
* include/confdefs.h, src/exinit.c, src/extension.c, src/itronapi.c,
src/posixapi.c, src/rtemsapi.c: Modified as part of above.
2001-05-09 Joel Sherrill <joel@OARcorp.com>
* src/exinit.c: Slightly rework initialization so there

View File

@@ -22,7 +22,8 @@
* the above. This procedure has evolved from just enough to
* support the RTEMS Test Suites into something that can be
* used remarkably reliably by most applications.
* COPYRIGHT (c) 1989-1999.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be

View File

@@ -29,9 +29,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/apiext.h>
#if 0
#include <rtems/score/apimutex.h>
#endif
#include <rtems/score/copyrt.h>
#include <rtems/score/heap.h>
#include <rtems/score/interr.h>
@@ -58,6 +56,7 @@
#include <rtems/itron/itronapi.h>
#endif
Objects_Information *_Internal_Objects[ OBJECTS_INTERNAL_CLASSES_LAST + 1 ];
/*PAGE
*
@@ -125,7 +124,6 @@ rtems_interrupt_level rtems_initialize_executive_early(
multiprocessing_table = NULL;
_System_state_Handler_initialization( FALSE );
#endif
/*
@@ -182,6 +180,8 @@ rtems_interrupt_level rtems_initialize_executive_early(
multiprocessing_table->maximum_global_objects
);
_Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects;
_Priority_Handler_initialization();
_Watchdog_Handler_initialization();
@@ -203,6 +203,8 @@ rtems_interrupt_level rtems_initialize_executive_early(
/* MANAGERS */
_RTEMS_API_Initialize( configuration_table );
_Extension_Manager_initialization( configuration_table->maximum_extensions );
_IO_Manager_initialization(
@@ -212,8 +214,6 @@ rtems_interrupt_level rtems_initialize_executive_early(
configuration_table->maximum_devices
);
_RTEMS_API_Initialize( configuration_table );
#ifdef RTEMS_POSIX_API
_POSIX_API_Initialize( configuration_table );
#endif

View File

@@ -36,12 +36,16 @@ void _Extension_Manager_initialization(
{
_Objects_Initialize_information(
&_Extension_Information,
OBJECTS_CLASSIC_API, /* object API */
OBJECTS_RTEMS_EXTENSIONS,
FALSE,
maximum_extensions,
sizeof( Extension_Control ),
FALSE,
RTEMS_MAXIMUM_NAME_LENGTH,
FALSE
FALSE, /* TRUE if the name is a string */
RTEMS_MAXIMUM_NAME_LENGTH /* maximum length of an object name */
#if defined(RTEMS_MULTIPROCESSING)
,
FALSE, /* TRUE if this is a global object class */
NULL /* Proxy extraction support callout */
#endif
);
}

View File

@@ -60,6 +60,7 @@ itron_api_configuration_table _ITRON_Default_configuration = {
NULL /* User_initialization_tasks_table */
};
Objects_Information *_ITRON_Objects[ OBJECTS_ITRON_CLASSES_LAST + 1 ];
void _ITRON_API_Initialize(
rtems_configuration_table *configuration_table
@@ -75,6 +76,8 @@ void _ITRON_API_Initialize(
if ( !api_configuration )
api_configuration = &_ITRON_Default_configuration;
_Objects_Information_table[OBJECTS_ITRON_API] = _ITRON_Objects;
_ITRON_Task_Manager_initialization(
api_configuration->maximum_tasks,
api_configuration->number_of_initialization_tasks,

View File

@@ -61,6 +61,8 @@ posix_api_configuration_table _POSIX_Default_configuration = {
NULL /* User_initialization_threads_table */
};
Objects_Information *_POSIX_Objects[ OBJECTS_POSIX_CLASSES_LAST + 1 ];
void _POSIX_API_Initialize(
rtems_configuration_table *configuration_table
@@ -76,6 +78,8 @@ void _POSIX_API_Initialize(
if ( !api_configuration )
api_configuration = &_POSIX_Default_configuration;
_Objects_Information_table[OBJECTS_POSIX_API] = _POSIX_Objects;
_POSIX_signals_Manager_Initialization(
api_configuration->maximum_queued_signals
);

View File

@@ -40,6 +40,8 @@
#include <rtems/rtems/signal.h>
#include <rtems/rtems/timer.h>
Objects_Information *_RTEMS_Objects[ OBJECTS_RTEMS_CLASSES_LAST + 1 ];
/*PAGE
*
* _RTEMS_API_Initialize
@@ -55,6 +57,8 @@ void _RTEMS_API_Initialize(
api_configuration = configuration_table->RTEMS_api_configuration;
_Objects_Information_table[OBJECTS_CLASSIC_API] = _RTEMS_Objects;
_Attributes_Handler_initialization();
_Interrupt_Manager_initialization();

View File

@@ -1,3 +1,24 @@
2002-07-01 Joel Sherrill <joel@OARcorp.com>
* Mega patch merge to change the format of the object IDs to
loosen the dependency between the SCORE and the various APIs.
There was considerable work to simplify the object name management
and it appears that the name_table field is no longer needed.
This patch also includes the addition of the internal mutex
which is currently only used to protect some types of allocation
and deallocation. This significantly can reduce context
switch latency under certain circumstances. In particular,
some heap/region operations were O(n) and had dispatching
disabled. This should help enormously. With this merge,
the patch is not as clean as it should be. In particular,
the documentation has not been modified to reflect the new object
ID layout, the IDs in the test screens are not updated, and
_Objects_Get_information needs to be a real routine not inlined.
As part of this patch a lot of MP code for thread/proxy blocking
was made conditional and cleaned up.
* include/confdefs.h, src/exinit.c, src/extension.c, src/itronapi.c,
src/posixapi.c, src/rtemsapi.c: Modified as part of above.
2001-05-09 Joel Sherrill <joel@OARcorp.com>
* src/exinit.c: Slightly rework initialization so there

View File

@@ -22,7 +22,8 @@
* the above. This procedure has evolved from just enough to
* support the RTEMS Test Suites into something that can be
* used remarkably reliably by most applications.
* COPYRIGHT (c) 1989-1999.
*
* COPYRIGHT (c) 1989-2002.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be

View File

@@ -29,9 +29,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/apiext.h>
#if 0
#include <rtems/score/apimutex.h>
#endif
#include <rtems/score/copyrt.h>
#include <rtems/score/heap.h>
#include <rtems/score/interr.h>
@@ -58,6 +56,7 @@
#include <rtems/itron/itronapi.h>
#endif
Objects_Information *_Internal_Objects[ OBJECTS_INTERNAL_CLASSES_LAST + 1 ];
/*PAGE
*
@@ -125,7 +124,6 @@ rtems_interrupt_level rtems_initialize_executive_early(
multiprocessing_table = NULL;
_System_state_Handler_initialization( FALSE );
#endif
/*
@@ -182,6 +180,8 @@ rtems_interrupt_level rtems_initialize_executive_early(
multiprocessing_table->maximum_global_objects
);
_Objects_Information_table[OBJECTS_INTERNAL_API] = _Internal_Objects;
_Priority_Handler_initialization();
_Watchdog_Handler_initialization();
@@ -203,6 +203,8 @@ rtems_interrupt_level rtems_initialize_executive_early(
/* MANAGERS */
_RTEMS_API_Initialize( configuration_table );
_Extension_Manager_initialization( configuration_table->maximum_extensions );
_IO_Manager_initialization(
@@ -212,8 +214,6 @@ rtems_interrupt_level rtems_initialize_executive_early(
configuration_table->maximum_devices
);
_RTEMS_API_Initialize( configuration_table );
#ifdef RTEMS_POSIX_API
_POSIX_API_Initialize( configuration_table );
#endif

View File

@@ -36,12 +36,16 @@ void _Extension_Manager_initialization(
{
_Objects_Initialize_information(
&_Extension_Information,
OBJECTS_CLASSIC_API, /* object API */
OBJECTS_RTEMS_EXTENSIONS,
FALSE,
maximum_extensions,
sizeof( Extension_Control ),
FALSE,
RTEMS_MAXIMUM_NAME_LENGTH,
FALSE
FALSE, /* TRUE if the name is a string */
RTEMS_MAXIMUM_NAME_LENGTH /* maximum length of an object name */
#if defined(RTEMS_MULTIPROCESSING)
,
FALSE, /* TRUE if this is a global object class */
NULL /* Proxy extraction support callout */
#endif
);
}

View File

@@ -60,6 +60,7 @@ itron_api_configuration_table _ITRON_Default_configuration = {
NULL /* User_initialization_tasks_table */
};
Objects_Information *_ITRON_Objects[ OBJECTS_ITRON_CLASSES_LAST + 1 ];
void _ITRON_API_Initialize(
rtems_configuration_table *configuration_table
@@ -75,6 +76,8 @@ void _ITRON_API_Initialize(
if ( !api_configuration )
api_configuration = &_ITRON_Default_configuration;
_Objects_Information_table[OBJECTS_ITRON_API] = _ITRON_Objects;
_ITRON_Task_Manager_initialization(
api_configuration->maximum_tasks,
api_configuration->number_of_initialization_tasks,

View File

@@ -61,6 +61,8 @@ posix_api_configuration_table _POSIX_Default_configuration = {
NULL /* User_initialization_threads_table */
};
Objects_Information *_POSIX_Objects[ OBJECTS_POSIX_CLASSES_LAST + 1 ];
void _POSIX_API_Initialize(
rtems_configuration_table *configuration_table
@@ -76,6 +78,8 @@ void _POSIX_API_Initialize(
if ( !api_configuration )
api_configuration = &_POSIX_Default_configuration;
_Objects_Information_table[OBJECTS_POSIX_API] = _POSIX_Objects;
_POSIX_signals_Manager_Initialization(
api_configuration->maximum_queued_signals
);

View File

@@ -40,6 +40,8 @@
#include <rtems/rtems/signal.h>
#include <rtems/rtems/timer.h>
Objects_Information *_RTEMS_Objects[ OBJECTS_RTEMS_CLASSES_LAST + 1 ];
/*PAGE
*
* _RTEMS_API_Initialize
@@ -55,6 +57,8 @@ void _RTEMS_API_Initialize(
api_configuration = configuration_table->RTEMS_api_configuration;
_Objects_Information_table[OBJECTS_CLASSIC_API] = _RTEMS_Objects;
_Attributes_Handler_initialization();
_Interrupt_Manager_initialization();