From 6b1d8c7865268071a8de6ba6343159049a8b0e56 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 4 Jul 2017 07:28:44 +0200 Subject: score: Add processor set to scheduler context Replace the simple processor count with the processor set owned by the scheduler instance. Update #3059. --- cpukit/rtems/src/scheduleraddprocessor.c | 2 +- cpukit/rtems/src/schedulergetprocessorset.c | 12 +++++++----- cpukit/rtems/src/schedulerremoveprocessor.c | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) (limited to 'cpukit/rtems') diff --git a/cpukit/rtems/src/scheduleraddprocessor.c b/cpukit/rtems/src/scheduleraddprocessor.c index 505b8cc9dc..56d6811afd 100644 --- a/cpukit/rtems/src/scheduleraddprocessor.c +++ b/cpukit/rtems/src/scheduleraddprocessor.c @@ -95,7 +95,7 @@ rtems_status_code rtems_scheduler_add_processor( _ISR_lock_ISR_disable( &lock_context ); _Scheduler_Acquire_critical( scheduler, &lock_context ); - ++scheduler_context->processor_count; + _Processor_mask_Set( &scheduler_context->Processors, cpu_index ); cpu->Scheduler.control = scheduler; cpu->Scheduler.context = scheduler_context; ( *scheduler->Operations.add_processor )( scheduler, idle ); diff --git a/cpukit/rtems/src/schedulergetprocessorset.c b/cpukit/rtems/src/schedulergetprocessorset.c index 3b46ad07fc..d632e5e2c7 100644 --- a/cpukit/rtems/src/schedulergetprocessorset.c +++ b/cpukit/rtems/src/schedulergetprocessorset.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * Copyright (c) 2014, 2017 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Dornierstr. 4 @@ -26,7 +26,9 @@ rtems_status_code rtems_scheduler_get_processor_set( cpu_set_t *cpuset ) { - const Scheduler_Control *scheduler; + const Scheduler_Control *scheduler; + const Processor_mask *processor_set; + Processor_mask_Copy_status status; if ( cpuset == NULL ) { return RTEMS_INVALID_ADDRESS; @@ -37,11 +39,11 @@ rtems_status_code rtems_scheduler_get_processor_set( return RTEMS_INVALID_ID; } - if ( !_CPU_set_Is_large_enough( cpusetsize ) ) { + processor_set = _Scheduler_Get_processors( scheduler ); + status = _Processor_mask_To_cpu_set_t( processor_set, cpusetsize, cpuset ); + if ( status != PROCESSOR_MASK_COPY_LOSSLESS ) { return RTEMS_INVALID_NUMBER; } - _Scheduler_Get_processor_set( scheduler, cpusetsize, cpuset ); - return RTEMS_SUCCESSFUL; } diff --git a/cpukit/rtems/src/schedulerremoveprocessor.c b/cpukit/rtems/src/schedulerremoveprocessor.c index 03a688d64e..538366bb22 100644 --- a/cpukit/rtems/src/schedulerremoveprocessor.c +++ b/cpukit/rtems/src/schedulerremoveprocessor.c @@ -98,8 +98,8 @@ rtems_status_code rtems_scheduler_remove_processor( */ _ISR_lock_ISR_disable( &lock_context ); _Scheduler_Acquire_critical( scheduler, &lock_context ); - processor_count = scheduler_context->processor_count - 1; - scheduler_context->processor_count = processor_count; + _Processor_mask_Clear( &scheduler_context->Processors, cpu_index ); + processor_count = _Processor_mask_Count( &scheduler_context->Processors ); _Scheduler_Release_critical( scheduler, &lock_context ); _ISR_lock_ISR_enable( &lock_context ); @@ -130,7 +130,7 @@ rtems_status_code rtems_scheduler_remove_processor( _Chain_Extract_unprotected( &scheduler_node->Thread.Scheduler_node.Chain ); _Assert( _Chain_Is_empty( &idle->Scheduler.Scheduler_nodes ) ); } else { - ++scheduler_context->processor_count; + _Processor_mask_Set( &scheduler_context->Processors, cpu_index ); } cpu_self = _Thread_Dispatch_disable_critical( &lock_context ); -- cgit v1.2.3