[PATCH] Change license to BSD-2
Richi Dubey
richidubey at gmail.com
Wed Aug 26 20:25:39 UTC 2020
---
.../include/rtems/score/schedulerstrongapa.h | 153 ++++++++++++++----
1 file changed, 118 insertions(+), 35 deletions(-)
diff --git a/cpukit/include/rtems/score/schedulerstrongapa.h b/cpukit/include/rtems/score/schedulerstrongapa.h
index 0ac28cb439..9354acb052 100644
--- a/cpukit/include/rtems/score/schedulerstrongapa.h
+++ b/cpukit/include/rtems/score/schedulerstrongapa.h
@@ -5,32 +5,47 @@
*
* @brief Strong APA Scheduler API
*/
-
-/*
- * Copyright (c) 2013, 2018 embedded brains GmbH. All rights reserved.
+
+/* SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2013, 2018 embedded brains GmbH
*
- * embedded brains GmbH
- * Dornierstr. 4
- * 82178 Puchheim
- * Germany
- * <rtems at embedded-brains.de>
+ * 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.
*
- * 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.
+ * 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.
*/
#ifndef _RTEMS_SCORE_SCHEDULERSTRONGAPA_H
#define _RTEMS_SCORE_SCHEDULERSTRONGAPA_H
#include <rtems/score/scheduler.h>
-#include <rtems/score/schedulerpriority.h>
#include <rtems/score/schedulersmp.h>
+#include <rtems/score/percpu.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
+#define STRONG_SCHEDULER_NODE_OF_CHAIN( node ) \
+ RTEMS_CONTAINER_OF( node, Scheduler_strong_APA_Node, Ready_node )
+
/**
* @defgroup RTEMSScoreSchedulerStrongAPA Strong APA Scheduler
*
@@ -38,43 +53,97 @@ extern "C" {
*
* @brief Strong APA Scheduler
*
- * This is an implementation of the global fixed priority scheduler (G-FP). It
- * uses one ready chain per priority to ensure constant time insert operations.
- * The scheduled chain uses linear insert operations and has at most processor
- * count entries. Since the processor and priority count are constants all
- * scheduler operations complete in a bounded execution time.
- *
- * The the_thread preempt mode will be ignored.
+ * This is an implementation of the Strong APA scheduler defined by
+ * Cerqueira et al. in Linux's Processor Affinity API, Refined:
+ * Shifting Real-Time Tasks Towards Higher Schedulability.
*
+ * The scheduled and ready nodes are accessed via the
+ * Scheduler_strong_APA_Context::Ready which helps in backtracking when a
+ * node which is executing on a CPU gets blocked. New node is allocated to
+ * the cpu by checking all the executing nodes in the affinity set of the
+ * node and the subsequent nodes executing on the processors in its
+ * affinity set.
* @{
*/
/**
- * @brief Scheduler context specialization for Strong APA
- * schedulers.
- */
-typedef struct {
- Scheduler_SMP_Context Base;
- Priority_bit_map_Control Bit_map;
- Chain_Control Ready[ RTEMS_ZERO_LENGTH_ARRAY ];
-} Scheduler_strong_APA_Context;
-
-/**
- * @brief Scheduler node specialization for Strong APA
- * schedulers.
+ * @brief Scheduler node specialization for Strong APA schedulers.
*/
typedef struct {
/**
* @brief SMP scheduler node.
*/
Scheduler_SMP_Node Base;
+
+ /**
+ * @brief Chain node for Scheduler_strong_APA_Context::Ready.
+ */
+ Chain_Node Ready_node;
+
+ /**
+ * @brief CPU that this node would preempt in the backtracking part of
+ * _Scheduler_strong_APA_Get_highest_ready and
+ * _Scheduler_strong_APA_Do_Enqueue.
+ */
+ Per_CPU_Control *cpu_to_preempt;
/**
- * @brief The associated ready queue of this node.
+ * @brief The associated affinity set of this node.
*/
- Scheduler_priority_Ready_queue Ready_queue;
+ Processor_mask Affinity;
} Scheduler_strong_APA_Node;
+
+/**
+ * @brief CPU related variables and a CPU_Control to implement BFS.
+ */
+typedef struct
+{
+ /**
+ * @brief CPU in a queue.
+ */
+ Per_CPU_Control *cpu;
+
+ /**
+ * @brief The node that would preempt this CPU.
+ */
+ Scheduler_Node *preempting_node;
+
+ /**
+ * @brief Whether or not this cpu has been added to the queue
+ * (visited in BFS).
+ */
+ bool visited;
+
+ /**
+ * @brief The node currently executing on this cpu
+ */
+ Scheduler_Node *executing;
+} Scheduler_strong_APA_CPU;
+
+ /**
+ * @brief Scheduler context and node definition for Strong APA scheduler.
+ */
+typedef struct {
+ /**
+ * @brief @see Scheduler_SMP_Context.
+ */
+ Scheduler_SMP_Context Base;
+
+ /**
+ * @brief Chain of all the ready and scheduled nodes present in
+ * the Strong APA scheduler.
+ */
+ Chain_Control Ready;
+
+ /**
+ * @brief Struct with important variables for each cpu.
+ */
+ Scheduler_strong_APA_CPU CPU[ RTEMS_ZERO_LENGTH_ARRAY ];
+} Scheduler_strong_APA_Context;
+
+#define SCHEDULER_STRONG_APA_MAXIMUM_PRIORITY 255
+
/**
* @brief Entry points for the Strong APA Scheduler.
*/
@@ -100,8 +169,8 @@ typedef struct {
_Scheduler_default_Release_job, \
_Scheduler_default_Cancel_job, \
_Scheduler_default_Tick, \
- _Scheduler_SMP_Start_idle \
- SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \
+ _Scheduler_SMP_Start_idle, \
+ _Scheduler_strong_APA_Set_affinity \
}
/**
@@ -246,6 +315,20 @@ void _Scheduler_strong_APA_Yield(
Scheduler_Node *node
);
+/**
+ * @brief Sets the affinity .
+ *
+ * @param scheduler The scheduler control instance.
+ * @param the_thread The thread to yield.
+ * @param[in, out] node The node of @a the_thread.
+ */
+bool _Scheduler_strong_APA_Set_affinity(
+ const Scheduler_Control *scheduler,
+ Thread_Control *thread,
+ Scheduler_Node *node_base,
+ const Processor_mask *affinity
+);
+
/** @} */
#ifdef __cplusplus
--
2.17.1
More information about the devel
mailing list