<div dir="ltr">Hi,<br><div><br></div><div>This patch is for sweeping the changes for the doxygen documentation.</div><div><br></div><div>Thanks,</div><div>Richi.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 27, 2020 at 1:56 AM Richi Dubey <<a href="mailto:richidubey@gmail.com">richidubey@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">---<br>
 .../include/rtems/score/schedulerstrongapa.h  | 153 ++++++++++++++----<br>
 1 file changed, 118 insertions(+), 35 deletions(-)<br>
<br>
diff --git a/cpukit/include/rtems/score/schedulerstrongapa.h b/cpukit/include/rtems/score/schedulerstrongapa.h<br>
index 0ac28cb439..9354acb052 100644<br>
--- a/cpukit/include/rtems/score/schedulerstrongapa.h<br>
+++ b/cpukit/include/rtems/score/schedulerstrongapa.h<br>
@@ -5,32 +5,47 @@<br>
  *<br>
  * @brief Strong APA Scheduler API<br>
  */<br>
-<br>
-/*<br>
- * Copyright (c) 2013, 2018 embedded brains GmbH.  All rights reserved.<br>
+ <br>
+/* SPDX-License-Identifier: BSD-2-Clause  <br>
+ *<br>
+ * Copyright (c) 2013, 2018 embedded brains GmbH<br>
  *<br>
- *  embedded brains GmbH<br>
- *  Dornierstr. 4<br>
- *  82178 Puchheim<br>
- *  Germany<br>
- *  <<a href="mailto:rtems@embedded-brains.de" target="_blank">rtems@embedded-brains.de</a>><br>
+ * Redistribution and use in source and binary forms, with or without<br>
+ * modification, are permitted provided that the following conditions<br>
+ * are met:<br>
+ * 1. Redistributions of source code must retain the above copyright<br>
+ *    notice, this list of conditions and the following disclaimer.<br>
+ * 2. Redistributions in binary form must reproduce the above copyright<br>
+ *    notice, this list of conditions and the following disclaimer in the<br>
+ *    documentation and/or other materials provided with the distribution.<br>
  *<br>
- * The license and distribution terms for this file may be<br>
- * found in the file LICENSE in this distribution or at<br>
- * <a href="http://www.rtems.org/license/LICENSE" rel="noreferrer" target="_blank">http://www.rtems.org/license/LICENSE</a>.<br>
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"<br>
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE<br>
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE<br>
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE<br>
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR<br>
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF<br>
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS<br>
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN<br>
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)<br>
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE<br>
+ * POSSIBILITY OF SUCH DAMAGE.<br>
  */<br>
<br>
 #ifndef _RTEMS_SCORE_SCHEDULERSTRONGAPA_H<br>
 #define _RTEMS_SCORE_SCHEDULERSTRONGAPA_H<br>
<br>
 #include <rtems/score/scheduler.h><br>
-#include <rtems/score/schedulerpriority.h><br>
 #include <rtems/score/schedulersmp.h><br>
+#include <rtems/score/percpu.h><br>
<br>
 #ifdef __cplusplus<br>
 extern "C" {<br>
 #endif /* __cplusplus */<br>
<br>
+#define STRONG_SCHEDULER_NODE_OF_CHAIN( node ) \<br>
+  RTEMS_CONTAINER_OF( node, Scheduler_strong_APA_Node, Ready_node )<br>
+<br>
 /**<br>
  * @defgroup RTEMSScoreSchedulerStrongAPA Strong APA Scheduler<br>
  *<br>
@@ -38,43 +53,97 @@ extern "C" {<br>
  *<br>
  * @brief Strong APA Scheduler<br>
  *<br>
- * This is an implementation of the global fixed priority scheduler (G-FP).  It<br>
- * uses one ready chain per priority to ensure constant time insert operations.<br>
- * The scheduled chain uses linear insert operations and has at most processor<br>
- * count entries.  Since the processor and priority count are constants all<br>
- * scheduler operations complete in a bounded execution time.<br>
- *<br>
- * The the_thread preempt mode will be ignored.<br>
+ * This is an implementation of the Strong APA scheduler defined by<br>
+ * Cerqueira et al. in Linux's Processor Affinity API, Refined: <br>
+ * Shifting Real-Time Tasks Towards Higher Schedulability.<br>
  *<br>
+ * The scheduled and ready nodes are accessed via the <br>
+ * Scheduler_strong_APA_Context::Ready which helps in backtracking when a <br>
+ * node which is executing on a CPU gets blocked. New node is allocated to<br>
+ * the cpu by checking all the executing nodes in the affinity set of the<br>
+ * node and the subsequent nodes executing on the processors in its <br>
+ * affinity set.<br>
  * @{<br>
  */<br>
<br>
 /**<br>
- * @brief Scheduler context specialization for Strong APA<br>
- * schedulers.<br>
- */<br>
-typedef struct {<br>
-  Scheduler_SMP_Context    Base;<br>
-  Priority_bit_map_Control Bit_map;<br>
-  Chain_Control            Ready[ RTEMS_ZERO_LENGTH_ARRAY ];<br>
-} Scheduler_strong_APA_Context;<br>
-<br>
-/**<br>
- * @brief Scheduler node specialization for Strong APA<br>
- * schedulers.<br>
+ * @brief Scheduler node specialization for Strong APA schedulers.<br>
  */<br>
 typedef struct {<br>
   /**<br>
    * @brief SMP scheduler node.<br>
    */<br>
   Scheduler_SMP_Node Base;<br>
+  <br>
+ /**<br>
+   * @brief Chain node for Scheduler_strong_APA_Context::Ready.<br>
+   */<br>
+  Chain_Node Ready_node;<br>
+  <br>
+  /**<br>
+   * @brief CPU that this node would preempt in the backtracking part of<br>
+   * _Scheduler_strong_APA_Get_highest_ready and<br>
+   * _Scheduler_strong_APA_Do_Enqueue.<br>
+   */<br>
+  Per_CPU_Control *cpu_to_preempt;<br>
<br>
   /**<br>
-   * @brief The associated ready queue of this node.<br>
+   * @brief The associated affinity set of this node.<br>
    */<br>
-  Scheduler_priority_Ready_queue Ready_queue;<br>
+  Processor_mask Affinity;<br>
 } Scheduler_strong_APA_Node;<br>
<br>
+<br>
+/**<br>
+ * @brief CPU related variables and a CPU_Control to implement BFS.<br>
+ */<br>
+typedef struct<br>
+{<br>
+   /**<br>
+   * @brief CPU in a queue.<br>
+   */  <br>
+  Per_CPU_Control *cpu;<br>
+  <br>
+  /**<br>
+   * @brief The node that would preempt this CPU.<br>
+   */  <br>
+  Scheduler_Node *preempting_node;<br>
+  <br>
+   /**<br>
+   * @brief Whether or not this cpu has been added to the queue<br>
+   * (visited in BFS).<br>
+   */  <br>
+  bool visited;<br>
+  <br>
+  /**<br>
+   * @brief The node currently executing on this cpu<br>
+   */  <br>
+   Scheduler_Node *executing;<br>
+} Scheduler_strong_APA_CPU;<br>
+<br>
+ /**<br>
+ * @brief Scheduler context and node definition for Strong APA scheduler.<br>
+ */<br>
+typedef struct {<br>
+ /**<br>
+   * @brief @see Scheduler_SMP_Context.<br>
+   */<br>
+  Scheduler_SMP_Context Base;<br>
+  <br>
+  /**<br>
+   * @brief Chain of all the ready and scheduled nodes present in<br>
+   * the Strong APA scheduler.<br>
+   */<br>
+  Chain_Control Ready;<br>
+  <br>
+  /**<br>
+   * @brief Struct with important variables for each cpu.<br>
+   */<br>
+  Scheduler_strong_APA_CPU CPU[ RTEMS_ZERO_LENGTH_ARRAY ];<br>
+} Scheduler_strong_APA_Context;<br>
+<br>
+#define SCHEDULER_STRONG_APA_MAXIMUM_PRIORITY 255<br>
+<br>
 /**<br>
  * @brief Entry points for the Strong APA Scheduler.<br>
  */<br>
@@ -100,8 +169,8 @@ typedef struct {<br>
     _Scheduler_default_Release_job, \<br>
     _Scheduler_default_Cancel_job, \<br>
     _Scheduler_default_Tick, \<br>
-    _Scheduler_SMP_Start_idle \<br>
-    SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \<br>
+    _Scheduler_SMP_Start_idle, \<br>
+    _Scheduler_strong_APA_Set_affinity \<br>
   }<br>
<br>
 /**<br>
@@ -246,6 +315,20 @@ void _Scheduler_strong_APA_Yield(<br>
   Scheduler_Node          *node<br>
 );<br>
<br>
+/**<br>
+ * @brief Sets the affinity .<br>
+ *<br>
+ * @param scheduler The scheduler control instance.<br>
+ * @param the_thread The thread to yield.<br>
+ * @param[in, out] node The node of @a the_thread.<br>
+ */<br>
+bool _Scheduler_strong_APA_Set_affinity(<br>
+  const Scheduler_Control *scheduler,<br>
+  Thread_Control          *thread,<br>
+  Scheduler_Node          *node_base,<br>
+  const Processor_mask    *affinity<br>
+);<br>
+<br>
 /** @} */<br>
<br>
 #ifdef __cplusplus<br>
-- <br>
2.17.1<br>
<br>
</blockquote></div>