mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-21 03:27:56 +08:00
@@ -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
|
||||
|
||||
@@ -559,6 +559,23 @@ rtems_status_code rtems_scheduler_ident(
|
||||
rtems_id *id
|
||||
);
|
||||
|
||||
/**
|
||||
* @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
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Gets the set of processors owned by the specified scheduler instance.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (c) 2017 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <rtems@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;
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user