[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