[PATCH 1/7] rtems: Add rtems_scheduler_ident_by_processor()
Gedare Bloom
gedare at rtems.org
Tue Jul 11 14:58:24 UTC 2017
On Tue, Jul 11, 2017 at 9:41 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> Update #3069.
> ---
> cpukit/rtems/Makefile.am | 1 +
> cpukit/rtems/include/rtems/rtems/tasks.h | 17 ++++++++++
> cpukit/rtems/src/scheduleridentbyprocessor.c | 49 ++++++++++++++++++++++++++++
> testsuites/smptests/smpfatal04/init.c | 6 ++++
> testsuites/sptests/spscheduler01/init.c | 12 +++++++
> 5 files changed, 85 insertions(+)
> create mode 100644 cpukit/rtems/src/scheduleridentbyprocessor.c
>
> diff --git a/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am
> index ada1f83510..e9ad2deb5d 100644
> --- a/cpukit/rtems/Makefile.am
> +++ b/cpukit/rtems/Makefile.am
> @@ -108,6 +108,7 @@ librtems_a_SOURCES += src/taskwakewhen.c
> librtems_a_SOURCES += src/scheduleraddprocessor.c
> librtems_a_SOURCES += src/schedulergetprocessorset.c
> librtems_a_SOURCES += src/schedulerident.c
> +librtems_a_SOURCES += src/scheduleridentbyprocessor.c
> librtems_a_SOURCES += src/schedulerremoveprocessor.c
>
> ## RATEMON_C_FILES
> diff --git a/cpukit/rtems/include/rtems/rtems/tasks.h b/cpukit/rtems/include/rtems/rtems/tasks.h
> index 88e43556ce..e68c78989d 100644
> --- a/cpukit/rtems/include/rtems/rtems/tasks.h
> +++ b/cpukit/rtems/include/rtems/rtems/tasks.h
> @@ -560,6 +560,23 @@ rtems_status_code rtems_scheduler_ident(
> );
>
> /**
> + * @brief Identifies a scheduler by a processor index.
> + *
> + * @param[in] cpu_index The processor index.
> + * @param[out] id The scheduler identifier associated with the processor index.
> + *
> + * @retval RTEMS_SUCCESSFUL Successful operation.
> + * @retval RTEMS_INVALID_ADDRESS The @a id parameter is @c NULL.
> + * @retval RTEMS_INVALID_NAME Invalid processor index.
> + * @retval RTEMS_INCORRECT_STATE The processor index is valid, however, this
> + * processor is not owned by a scheduler.
> + */
> +rtems_status_code rtems_scheduler_ident_by_processor(
> + uint32_t cpu_index,
> + rtems_id *id
> +);
> +
This requires an update in the associated user manual page.
> +/**
> * @brief Gets the set of processors owned by the specified scheduler instance.
> *
> * @param[in] scheduler_id Identifier of the scheduler instance.
> diff --git a/cpukit/rtems/src/scheduleridentbyprocessor.c b/cpukit/rtems/src/scheduleridentbyprocessor.c
> new file mode 100644
> index 0000000000..2bc64d77d3
> --- /dev/null
> +++ b/cpukit/rtems/src/scheduleridentbyprocessor.c
> @@ -0,0 +1,49 @@
> +/*
> + * Copyright (c) 2017 embedded brains GmbH. All rights reserved.
> + *
> + * embedded brains GmbH
> + * Dornierstr. 4
> + * 82178 Puchheim
> + * Germany
> + * <rtems at 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/rtems/tasks.h>
> +#include <rtems/score/assert.h>
> +#include <rtems/score/schedulerimpl.h>
> +
> +rtems_status_code rtems_scheduler_ident_by_processor(
> + uint32_t cpu_index,
> + rtems_id *id
> +)
> +{
> + const Scheduler_Control *scheduler;
> +
> + if ( id == NULL ) {
> + return RTEMS_INVALID_ADDRESS;
> + }
> +
> + if ( cpu_index >= _SMP_Get_processor_count() ) {
> + return RTEMS_INVALID_NAME;
> + }
> +
> + scheduler = _Scheduler_Get_by_CPU( _Per_CPU_Get_by_index( cpu_index ) );
> +#if defined(RTEMS_SMP)
> + if ( scheduler == NULL ) {
> + return RTEMS_INCORRECT_STATE;
> + }
> +#else
> + _Assert( scheduler != NULL );
> +#endif
> +
> + *id = _Scheduler_Build_id( _Scheduler_Get_index( scheduler ) );
> + return RTEMS_SUCCESSFUL;
> +}
> diff --git a/testsuites/smptests/smpfatal04/init.c b/testsuites/smptests/smpfatal04/init.c
> index 0215914ce8..73ef701c70 100644
> --- a/testsuites/smptests/smpfatal04/init.c
> +++ b/testsuites/smptests/smpfatal04/init.c
> @@ -45,6 +45,12 @@ static void fatal_extension(
> && !always_set_to_false
> && code == SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER
> ) {
> + rtems_status_code sc;
> + rtems_id id;
> +
> + sc = rtems_scheduler_ident_by_processor(0, &id);
> + assert(sc == RTEMS_INCORRECT_STATE);
> +
> TEST_END();
> }
> }
> diff --git a/testsuites/sptests/spscheduler01/init.c b/testsuites/sptests/spscheduler01/init.c
> index 9bdfacc8db..2415ace803 100644
> --- a/testsuites/sptests/spscheduler01/init.c
> +++ b/testsuites/sptests/spscheduler01/init.c
> @@ -355,6 +355,18 @@ static void test_scheduler_ident(void)
> rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>
> rtems_test_assert(scheduler_id == expected_id);
> +
> + sc = rtems_scheduler_ident_by_processor(1, NULL);
> + rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
> +
> + sc = rtems_scheduler_ident_by_processor(1, &scheduler_id);
> + rtems_test_assert(sc == RTEMS_INVALID_NAME);
> +
> + scheduler_id = 0;
> + sc = rtems_scheduler_ident_by_processor(0, &scheduler_id);
> + rtems_test_assert(sc == RTEMS_SUCCESSFUL);
> +
> + rtems_test_assert(scheduler_id == expected_id);
> }
>
> static void test_scheduler_get_processors(void)
> --
> 2.12.3
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list