[PATCH] Change license to BSD-2

Gedare Bloom gedare at rtems.org
Wed Aug 26 20:43:21 UTC 2020


On Wed, Aug 26, 2020 at 2:36 PM Richi Dubey <richidubey at gmail.com> wrote:
>
> 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.
>
> What should I do now?
>
> Please let me know.
>
We don't want to push a commit that causes RTEMS to break/not compile.
So this patch should avoid making changes to any of the code. Just
clean up the licenses and doxygen.

> On Thu, Aug 27, 2020 at 2:02 AM Gedare Bloom <gedare at rtems.org> wrote:
>>
>> 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