[rtems commit] score: Move _SMP_Handler_initialize()

Chris Johns chrisj at rtems.org
Sat Feb 22 22:02:37 UTC 2014


On 19/02/2014 7:52 pm, Sebastian Huber wrote:
> Module:    rtems
> Branch:    master
> Commit:    282bfd3b41e3725ac9f5fb08b1e391af02572f4f
> Changeset: http://git.rtems.org/rtems/commit/?id=282bfd3b41e3725ac9f5fb08b1e391af02572f4f
>
> Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
> Date:      Tue Feb 18 13:03:27 2014 +0100
>
> score: Move _SMP_Handler_initialize()
>
> ---
>
>   cpukit/score/src/percpu.c |   31 -------------------------------
>   cpukit/score/src/smp.c    |   22 ++++++++++++++++++++++
>   2 files changed, 22 insertions(+), 31 deletions(-)
>
> diff --git a/cpukit/score/src/percpu.c b/cpukit/score/src/percpu.c
> index aa95aa9..c68f378 100644
> --- a/cpukit/score/src/percpu.c
> +++ b/cpukit/score/src/percpu.c
> @@ -18,40 +18,9 @@
>   #include "config.h"
>   #endif
>
> -#include <rtems/system.h>
> -#include <rtems/score/address.h>
> -#include <rtems/score/thread.h>
>   #include <rtems/score/percpu.h>
> -#include <rtems/score/wkspace.h>
> -#include <rtems/config.h>
> -#include <string.h>
>
>   #if defined(RTEMS_SMP)
> -
> -  #include <rtems/score/smp.h>
> -
> -  void _SMP_Handler_initialize(void)
> -  {
> -    uint32_t max_cpus = rtems_configuration_get_maximum_processors();
> -    uint32_t cpu;
> -
> -    /*
> -     * Discover and initialize the secondary cores in an SMP system.
> -     */
> -    max_cpus = _CPU_SMP_Initialize( max_cpus );
> -
> -    _SMP_Processor_count = max_cpus;
> -
> -    for ( cpu = 1 ; cpu < max_cpus; ++cpu ) {
> -      const Per_CPU_Control *per_cpu = _Per_CPU_Get_by_index( cpu );
> -
> -      _Per_CPU_Wait_for_state(
> -        per_cpu,
> -        PER_CPU_STATE_READY_TO_BEGIN_MULTITASKING
> -      );
> -    }
> -  }
> -
>     void _Per_CPU_Change_state(
>       Per_CPU_Control *per_cpu,
>       Per_CPU_State new_state
> diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c
> index 86116da..bfd77dc 100644
> --- a/cpukit/score/src/smp.c
> +++ b/cpukit/score/src/smp.c
> @@ -29,6 +29,28 @@
>     #include <rtems/bspIo.h>
>   #endif
>
> +void _SMP_Handler_initialize( void )
> +{
> +  uint32_t max_cpus = rtems_configuration_get_maximum_processors();
> +  uint32_t cpu;
> +
> +  /*
> +   * Discover and initialize the secondary cores in an SMP system.
> +   */
> +  max_cpus = _CPU_SMP_Initialize( max_cpus );
> +
> +  _SMP_Processor_count = max_cpus;
> +
> +  for ( cpu = 1 ; cpu < max_cpus; ++cpu ) {
> +    const Per_CPU_Control *per_cpu = _Per_CPU_Get_by_index( cpu );
> +
> +    _Per_CPU_Wait_for_state(
> +      per_cpu,
> +      PER_CPU_STATE_READY_TO_BEGIN_MULTITASKING
> +    );
> +  }
> +}

I do not agree with this approach. All cores need to be present before 
continuing and it forces cpu 0 to be a "boot" or "primary" processor. 
This design is not symmetric.

Chris



More information about the devel mailing list