On Tue, Jul 11, 2017 at 9:41 AM, Sebastian Huber <sebastian.hu...@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 > + * <rt...@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@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel