[PATCH] Change license to BSD-2

Gedare Bloom gedare at rtems.org
Wed Aug 26 20:32:16 UTC 2020


Hi Richi,

This includes enough new material that you can add your copyright line
also. Does rtems still compile if just this patch is applied?

On Wed, Aug 26, 2020 at 2:26 PM Richi Dubey <richidubey at gmail.com> wrote:
>
> ---
>  .../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
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list