[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