<div dir="ltr">No, Because the scheduler.h isn't included in the patch which is needed for defining the changed Strong APA Context. But, RTEMS won't compile without adding the changes in cpukit/src/rtems/score/schedulerstrongapa.c too since the context and all the variables have changed. <div><br></div><div>What should I do now?</div><div><br></div><div>Please let me know.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 27, 2020 at 2:02 AM Gedare Bloom <<a href="mailto:gedare@rtems.org">gedare@rtems.org</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">Hi Richi,<br>
<br>
This includes enough new material that you can add your copyright line<br>
also. Does rtems still compile if just this patch is applied?<br>
<br>
On Wed, Aug 26, 2020 at 2:26 PM Richi Dubey <<a href="mailto:richidubey@gmail.com" target="_blank">richidubey@gmail.com</a>> wrote:<br>
><br>
> ---<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>
> _______________________________________________<br>
> devel mailing list<br>
> <a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
> <a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div>