c-user: Document scheduler add/remove processor

This commit is contained in:
Sebastian Huber 2016-11-10 11:34:32 +01:00
parent 6297ad31d0
commit bcdca5db9d
2 changed files with 125 additions and 33 deletions

View File

@ -4040,6 +4040,10 @@ CONFIGURATION:
- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``. - ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
It is possible to add/remove processors to/from scheduler instances at
run-time, see :ref:`rtems_scheduler_add_processor` and
:ref:`rtems_scheduler_remove_processor`.
ERRORS: ERRORS:
In case one of the scheduler indices In case one of the scheduler indices
in``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` is invalid a link-time error will in``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` is invalid a link-time error will
@ -4091,32 +4095,36 @@ EXAMPLE:
#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 8 #define CONFIGURE_SMP_MAXIMUM_PROCESSORS 8
#define CONFIGURE_MAXIMUM_PRIORITY 255 #define CONFIGURE_MAXIMUM_PRIORITY 255
/* Make the scheduler algorithm available */ /* Make the scheduler algorithm available */
#define CONFIGURE_SCHEDULER_PRIORITY_SMP #define CONFIGURE_SCHEDULER_PRIORITY_SMP
#include <rtems/scheduler.h> #include <rtems/scheduler.h>
/* Create contexts for the two scheduler instances */ /* Create contexts for the two scheduler instances */
RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1); RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1); RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
/* Define the scheduler table */ /* Define the scheduler table */
#define CONFIGURE_SCHEDULER_CONTROLS \\ #define CONFIGURE_SCHEDULER_CONTROLS \\
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \ RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
io, \ io, \
rtems_build_name('I', 'O', ' ', ' ') \ rtems_build_name('I', 'O', ' ', ' ') \
), \ ), \
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \ RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
work, \ work, \
rtems_build_name('W', 'O', 'R', 'K') \ rtems_build_name('W', 'O', 'R', 'K') \
) )
/* Define the processor to scheduler assignments */
/* Define the initial processor to scheduler assignments */
#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \ #define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \ RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL) RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
.. COMMENT: === SMP Specific Configuration Parameters === .. COMMENT: === SMP Specific Configuration Parameters ===

View File

@ -44,6 +44,10 @@ The application level services currently provided are:
- rtems_scheduler_get_processor_set_ - Get processor set of a scheduler - rtems_scheduler_get_processor_set_ - Get processor set of a scheduler
- rtems_scheduler_add_processor_ - Add processor to a scheduler
- rtems_scheduler_remove_processor_ - Remove processor from a scheduler
- rtems_task_get_scheduler_ - Get scheduler of a task - rtems_task_get_scheduler_ - Get scheduler of a task
- rtems_task_set_scheduler_ - Set scheduler of a task - rtems_task_set_scheduler_ - Set scheduler of a task
@ -740,18 +744,16 @@ DIRECTIVE STATUS CODES:
:class: rtems-table :class: rtems-table
* - ``RTEMS_SUCCESSFUL`` * - ``RTEMS_SUCCESSFUL``
- successful operation - Successful operation.
* - ``RTEMS_INVALID_ADDRESS`` * - ``RTEMS_INVALID_ADDRESS``
- ``id`` is NULL - The ``id`` parameter is ``NULL``.
* - ``RTEMS_INVALID_NAME`` * - ``RTEMS_INVALID_NAME``
- invalid scheduler name - Invalid scheduler name.
* - ``RTEMS_UNSATISFIED``
- a scheduler with this name exists, but the processor set of this scheduler
is empty
DESCRIPTION: DESCRIPTION:
Identifies a scheduler by its name. The scheduler name is determined by Identifies a scheduler by its name. The scheduler name is determined by
the scheduler configuration. See :ref:`Configuring a System`. the scheduler configuration. See :ref:`Configuring Clustered Schedulers`
and :ref:`Configuring a Scheduler Name`.
NOTES: NOTES:
None. None.
@ -779,19 +781,19 @@ DIRECTIVE STATUS CODES:
:class: rtems-table :class: rtems-table
* - ``RTEMS_SUCCESSFUL`` * - ``RTEMS_SUCCESSFUL``
- successful operation - Successful operation.
* - ``RTEMS_INVALID_ADDRESS``
- ``cpuset`` is NULL
* - ``RTEMS_INVALID_ID`` * - ``RTEMS_INVALID_ID``
- invalid scheduler id - Invalid scheduler instance identifier.
* - ``RTEMS_INVALID_ADDRESS``
- The ``cpuset`` parameter is ``NULL``.
* - ``RTEMS_INVALID_NUMBER`` * - ``RTEMS_INVALID_NUMBER``
- the affinity set buffer is too small for set of processors owned by - The processor set buffer is too small for the set of processors owned
the scheduler by the scheduler instance.
DESCRIPTION: DESCRIPTION:
Returns the processor set owned by the scheduler in ``cpuset``. A set bit Returns the processor set owned by the scheduler instance in ``cpuset``. A
in the processor set means that this processor is owned by the scheduler set bit in the processor set means that this processor is owned by the
and a cleared bit means the opposite. scheduler instance and a cleared bit means the opposite.
NOTES: NOTES:
None. None.
@ -800,6 +802,88 @@ NOTES:
\clearpage \clearpage
.. _rtems_scheduler_add_processor:
SCHEDULER_ADD_PROCESSOR - Add processor to a scheduler
------------------------------------------------------
CALLING SEQUENCE:
.. code-block:: c
rtems_status_code rtems_scheduler_add_processor(
rtems_id scheduler_id,
uint32_t cpu_index
);
DIRECTIVE STATUS CODES:
.. list-table::
:class: rtems-table
* - ``RTEMS_SUCCESSFUL``
- Successful operation.
* - ``RTEMS_INVALID_ID``
- Invalid scheduler instance identifier.
* - ``RTEMS_NOT_CONFIGURED``
- The processor is not configured to be used by the application.
* - ``RTEMS_INCORRECT_STATE``
- The processor is configured to be used by the application, however, it
is not online.
* - ``RTEMS_RESOURCE_IN_USE``
- The processor is already assigned to a scheduler instance.
DESCRIPTION:
Adds a processor to the set of processors owned by the specified scheduler
instance.
NOTES:
Must be called from task context. This operation obtains and releases the
objects allocator lock.
.. raw:: latex
\clearpage
.. _rtems_scheduler_remove_processor:
SCHEDULER_REMOVE_PROCESSOR - Remove processor from a scheduler
--------------------------------------------------------------
CALLING SEQUENCE:
.. code-block:: c
rtems_status_code rtems_scheduler_remove_processor(
rtems_id scheduler_id,
uint32_t cpu_index
);
DIRECTIVE STATUS CODES:
.. list-table::
:class: rtems-table
* - ``RTEMS_SUCCESSFUL``
- Successful operation.
* - ``RTEMS_INVALID_ID``
- Invalid scheduler instance identifier.
* - ``RTEMS_INVALID_NUMBER``
- The processor is not owned by the specified scheduler instance.
* - ``RTEMS_RESOURCE_IN_USE``
- The set of processors owned by the specified scheduler instance would
be empty after the processor removal and there exists a non-idle task
that uses this scheduler instance as its home scheduler instance.
DESCRIPTION:
Removes a processor from set of processors owned by the specified scheduler
instance.
NOTES:
Must be called from task context. This operation obtains and releases the
objects allocator lock. Removing a processor from a scheduler is a complex
operation that involves all tasks of the system.
.. raw:: latex
\clearpage
.. _rtems_task_get_scheduler: .. _rtems_task_get_scheduler:
TASK_GET_SCHEDULER - Get scheduler of a task TASK_GET_SCHEDULER - Get scheduler of a task