rtems: Add rtems_scheduler_get_maximum_priority()

Update #3636.
This commit is contained in:
Sebastian Huber
2018-12-06 09:57:01 +01:00
parent 0a1f5df98e
commit 7ee64376ef
4 changed files with 94 additions and 1 deletions

View File

@@ -755,6 +755,7 @@ librtemscpu_a_SOURCES += rtems/src/rtemsobjectidgetnode.c
librtemscpu_a_SOURCES += rtems/src/rtemsobjectsetname.c
librtemscpu_a_SOURCES += rtems/src/rtemstimer.c
librtemscpu_a_SOURCES += rtems/src/scheduleraddprocessor.c
librtemscpu_a_SOURCES += rtems/src/schedulergetmaxprio.c
librtemscpu_a_SOURCES += rtems/src/schedulergetprocessorset.c
librtemscpu_a_SOURCES += rtems/src/scheduleridentbyprocessor.c
librtemscpu_a_SOURCES += rtems/src/scheduleridentbyprocessorset.c

View File

@@ -654,6 +654,21 @@ rtems_status_code rtems_scheduler_remove_processor(
uint32_t cpu_index
);
/**
* @brief Gets the maximum task priority of the specified scheduler instance.
*
* @param[in] scheduler_id Identifier of the scheduler instance.
* @param[out] priority Pointer to a task priority value.
*
* @retval RTEMS_SUCCESSFUL Successful operation.
* @retval RTEMS_INVALID_ADDRESS The @a priority parameter is @c NULL.
* @retval RTEMS_INVALID_ID Invalid scheduler instance identifier.
*/
rtems_status_code rtems_scheduler_get_maximum_priority(
rtems_id scheduler_id,
rtems_task_priority *priority
);
/**@}*/
#ifdef __cplusplus

View File

@@ -0,0 +1,53 @@
/*
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (C) 2018 embedded brains GmbH
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <rtems/rtems/tasks.h>
#include <rtems/score/schedulerimpl.h>
rtems_status_code rtems_scheduler_get_maximum_priority(
rtems_id scheduler_id,
rtems_task_priority *priority
)
{
uint32_t index;
if ( priority == NULL ) {
return RTEMS_INVALID_ADDRESS;
}
index = _Scheduler_Get_index_by_id( scheduler_id );
if ( index >= _Scheduler_Count ) {
return RTEMS_INVALID_ID;
}
*priority = _Scheduler_Table[ index ].maximum_priority;
return RTEMS_SUCCESSFUL;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved.
* Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -474,6 +474,29 @@ static void test_scheduler_ident(void)
rtems_test_assert(scheduler_id == expected_id);
}
static void test_scheduler_get_max_prio(void)
{
rtems_status_code sc;
rtems_task_priority priority;
rtems_id scheduler_id;
priority = 0;
sc = rtems_scheduler_get_maximum_priority(invalid_id, &priority);
rtems_test_assert(sc == RTEMS_INVALID_ID);
rtems_test_assert(priority == 0);
sc = rtems_task_get_scheduler(RTEMS_SELF, &scheduler_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_scheduler_get_maximum_priority(scheduler_id, NULL);
rtems_test_assert(sc == RTEMS_INVALID_ADDRESS);
priority = 0;
sc = rtems_scheduler_get_maximum_priority(scheduler_id, &priority);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(priority == 255);
}
static void test_scheduler_get_processors(void)
{
rtems_status_code sc;
@@ -601,6 +624,7 @@ static void Init(rtems_task_argument arg)
test_task_get_set_affinity();
test_task_get_set_scheduler();
test_scheduler_ident();
test_scheduler_get_max_prio();
test_scheduler_get_processors();
test_scheduler_add_remove_processors();
test_task_get_priority();