RTEMS_INLINE_ROUTINE is by definition a static inline. The others I fixed.
> -----Original Message----- > From: ged...@gwmail.gwu.edu [mailto:ged...@gwmail.gwu.edu] On > Behalf Of Gedare Bloom > Sent: Monday, March 24, 2014 3:23 PM > To: Jennifer Averett > Cc: RTEMS Devel > Subject: Re: [PATCH 02/10] score: Add priority affinity smp scheduler. > > On Mon, Mar 24, 2014 at 2:39 PM, Jennifer <jennifer.aver...@oarcorp.com> > wrote: > > From: Jennifer Averett <jennifer.aver...@oarcorp.com> > > > > --- > > cpukit/score/Makefile.am | 2 + > > .../rtems/score/schedulerpriorityaffinitysmp.h | 144 > +++++++++++++++++++++ > > cpukit/score/preinstall.am | 4 + > > cpukit/score/src/schedulerpriorityaffinitysmp.c | 95 ++++++++++++++ > > 4 files changed, 245 insertions(+) > > create mode 100644 > > cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h > > create mode 100644 cpukit/score/src/schedulerpriorityaffinitysmp.c > > > > diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am index > > 67cc802..95406d9 100644 > > --- a/cpukit/score/Makefile.am > > +++ b/cpukit/score/Makefile.am > > @@ -109,6 +109,7 @@ endif > > if HAS_SMP > > include_rtems_score_HEADERS += include/rtems/score/atomic.h > > include_rtems_score_HEADERS += include/rtems/score/cpustdatomic.h > > +include_rtems_score_HEADERS += > > +include/rtems/score/schedulerpriorityaffinitysmp.h > > include_rtems_score_HEADERS += > > include/rtems/score/schedulersimplesmp.h > > endif > > > > @@ -125,6 +126,7 @@ endif > > > > if HAS_SMP > > libscore_a_SOURCES += src/profilingsmplock.c > > +libscore_a_SOURCES += src/schedulerpriorityaffinitysmp.c > > libscore_a_SOURCES += src/schedulerprioritysmp.c libscore_a_SOURCES > > += src/schedulersimplesmp.c libscore_a_SOURCES += > > src/schedulersmpstartidle.c diff --git > > a/cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h > > b/cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h > > new file mode 100644 > > index 0000000..b64f54d > > --- /dev/null > > +++ b/cpukit/score/include/rtems/score/schedulerpriorityaffinitysmp.h > > @@ -0,0 +1,144 @@ > > +/** > > + * @file > > + * > > + * @ingroup ScoreSchedulerPriorityAffinitySMP > > + * > > + * @brief Deterministic Priority Affinity SMP Scheduler API */ > > + > > +/* > > + * COPYRIGHT (c) 2014. > > + * On-Line Applications Research Corporation (OAR). > > + * > > + * 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. > > + */ > > + > > +#ifndef _RTEMS_SCORE_SCHEDULERPRIORITYAFFINITYSMP_H > > +#define _RTEMS_SCORE_SCHEDULERPRIORITYAFFINITYSMP_H > > + > > +#include <rtems/score/scheduler.h> > > +#include <rtems/score/schedulerpriority.h> #include > > +<rtems/score/schedulersmp.h> #include > > +<rtems/score/schedulerprioritysmp.h> > > +#include <rtems/score/cpuset.h> > > + > > +#ifdef __cplusplus > > +extern "C" { > > +#endif /* __cplusplus */ > > + > > +/** > > + * @defgroup ScoreSchedulerPriorityAffinitySMP Deterministic Priority > > +Affinity SMP Scheduler > > + * > > + * @ingroup ScoreScheduler > > + * > > + * This is an extension of the Deterministic Priority SMP Scheduler. > > +which > > + * is an implementation of the global fixed priority scheduler (G-FP). > > + * It adds thread to core affinity support. > > + * > > + * @note This is the first iteration of this scheduler. It currently tracks > > + * the requested affinity to exercise the Scheduler Framework but it > > + * does not honor that affinity in assigning threads to cores. This > > + * will be added in a subsequent revision. > > + * @{ > > + */ > > + > > +/** > > + * @brief Entry points for the Simple SMP Scheduler w/ Affinity. > Keep the name consistent: > delete the w/ Affinity and s/Simple/Deterministic Priority Affinity/ > > > + */ > > +#define SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS \ > > + { \ > > + _Scheduler_priority_SMP_Initialize, \ > > + _Scheduler_priority_SMP_Schedule, \ > > + _Scheduler_priority_SMP_Yield, \ > > + _Scheduler_priority_SMP_Block, \ > > + _Scheduler_priority_SMP_Enqueue_fifo, \ > > + _Scheduler_priority_affinity_SMP_Allocate, \ > > + _Scheduler_priority_Free, \ > > + _Scheduler_priority_SMP_Update, \ > > + _Scheduler_priority_SMP_Enqueue_fifo, \ > > + _Scheduler_priority_SMP_Enqueue_lifo, \ > > + _Scheduler_priority_SMP_Extract, \ > > + _Scheduler_priority_Priority_compare, \ > > + _Scheduler_default_Release_job, \ > > + _Scheduler_default_Tick, \ > > + _Scheduler_SMP_Start_idle, \ > > + _Scheduler_priority_affinity_SMP_Get_affinity, \ > > + _Scheduler_priority_affinity_SMP_Set_affinity \ > > + } > > + > > +/** > > + * @brief Allocates @a the_thread->scheduler. > > + * > > + * This routine allocates @a the_thread->scheduler. > > + * > > + * @param[in] the_thread is the thread the scheduler is allocating > > + * management memory for > > + */ > > +void * _Scheduler_priority_affinity_SMP_Allocate( Thread_Control > > +*the_thread ); > > + > > +/** > > + * @brief Get affinity for the priority affinity smp scheduler. > > + * > > + * @param[in] thread The associated thread. > > + * @param[in] cpusetsize The size of the cpuset. > > + * @param[in,out] cpuset The associated affinity set. > > + * > > + * @retval 0 Successfully got cpuset > > + * @retval -1 The cpusetsize is invalid for the system */ int > > +_Scheduler_priority_affinity_SMP_Get_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > +); > > + > > +/** > > + * @brief Set affinity for the priority affinity smp scheduler. > > + * > > + * @param[in] thread The associated thread. > > + * @param[in] cpusetsize The size of the cpuset. > > + * @param[in] cpuset Affinity new affinity set. > > + * > > + * @retval 0 Successful > > + */ > > +int _Scheduler_priority_affinity_SMP_Set_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > +); > > + > > +/** > > + * This structure handles affinity specific data of a thread. > > + * > > + * @note The attribute priority_sched_info must remain > > + * the first element in the structure so that the > > + * Scheduler_priority_XXX methods will continue to > > + * function. > > + */ > > +typedef struct { > > + > > + /** > > + * Data for the Priority Scheduler. > > + */ > > + Scheduler_priority_Per_thread priority_sched_info; > An included structure gets the first letter caps, e.g. Priority_sched_info. > > > + > > + /** > > + * Pointer to corresponding Thread Control Block. > > + */ > > + Thread_Control *thread; > > + > > + /** > > + * Structure containing affinity set data and size > > + */ > > + CPU_set_Control affinity; > ditto. > > > +} Scheduler_priority_affinity_SMP_Per_thread; > > + > > +/** @} */ > > + > > +#ifdef __cplusplus > > +} > > +#endif /* __cplusplus */ > > + > > +#endif /* _RTEMS_SCORE_SCHEDULERPRIORITYSMP_H */ > > diff --git a/cpukit/score/preinstall.am b/cpukit/score/preinstall.am > > index 68ded43..efbe37d 100644 > > --- a/cpukit/score/preinstall.am > > +++ b/cpukit/score/preinstall.am > > @@ -386,6 +386,10 @@ > $(PROJECT_INCLUDE)/rtems/score/cpustdatomic.h: > include/rtems/score/cpustdatomic. > > $(INSTALL_DATA) $< > > $(PROJECT_INCLUDE)/rtems/score/cpustdatomic.h > > PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/cpustdatomic.h > > > > +$(PROJECT_INCLUDE)/rtems/score/schedulerpriorityaffinitysmp.h: > include/rtems/score/schedulerpriorityaffinitysmp.h > $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) > > + $(INSTALL_DATA) $< > > +$(PROJECT_INCLUDE)/rtems/score/schedulerpriorityaffinitysmp.h > > +PREINSTALL_FILES += > > +$(PROJECT_INCLUDE)/rtems/score/schedulerpriorityaffinitysmp.h > > + > > $(PROJECT_INCLUDE)/rtems/score/schedulersimplesmp.h: > include/rtems/score/schedulersimplesmp.h > $(PROJECT_INCLUDE)/rtems/score/$(dirstamp) > > $(INSTALL_DATA) $< > > $(PROJECT_INCLUDE)/rtems/score/schedulersimplesmp.h > > PREINSTALL_FILES += > > $(PROJECT_INCLUDE)/rtems/score/schedulersimplesmp.h > > diff --git a/cpukit/score/src/schedulerpriorityaffinitysmp.c > > b/cpukit/score/src/schedulerpriorityaffinitysmp.c > > new file mode 100644 > > index 0000000..aa77d8d > > --- /dev/null > > +++ b/cpukit/score/src/schedulerpriorityaffinitysmp.c > > @@ -0,0 +1,95 @@ > > +/** > > + * @file > > + * > > + * @brief Deterministic Priority Affinity SMP Scheduler > > +Implementation > > + * > > + * @ingroup ScoreSchedulerPriorityAffinitySMP */ > > + > > +/* > > + * COPYRIGHT (c) 2014. > > + * On-Line Applications Research Corporation (OAR). > > + * > > + * 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. > > + */ > > + > > +#if HAVE_CONFIG_H > > + #include "config.h" > > +#endif > > + > > +#include <rtems/score/schedulerpriorityaffinitysmp.h> > > +#include <rtems/score/schedulerpriorityimpl.h> > > +#include <rtems/score/schedulersmpimpl.h> #include > > +<rtems/score/wkspace.h> #include <rtems/score/cpusetimpl.h> > > + > > +RTEMS_INLINE_ROUTINE Scheduler_priority_affinity_SMP_Per_thread * > > +_Scheduler_priority_affinity_Get_scheduler_info( Thread_Control > > +*thread ) { > > + return ( Scheduler_priority_affinity_SMP_Per_thread * ) > > +thread->scheduler_info; } > Why is this here, not in an impl.h file? if file-local, then make static > please. > > > + > > +void _Scheduler_priority_affinity_SMP_Initialize( void ) { > > + Scheduler_SMP_Control *self = _Workspace_Allocate_or_fatal_error( > > + sizeof( *self ) + PRIORITY_MAXIMUM * sizeof( Chain_Control ) > > + ); > > + > > + _Chain_Initialize_empty( &self->scheduled ); > > + _Scheduler_priority_Ready_queue_initialize( &self->ready[ 0 ] ); > > + > > + _Scheduler.information = self; > > +} > > + > > +void * _Scheduler_priority_affinity_SMP_Allocate( Thread_Control > > +*the_thread ) { > > + Scheduler_priority_affinity_SMP_Per_thread *sched_info_of_thread = > > + _Workspace_Allocate( sizeof( *sched_info_of_thread ) ); > > + > > + > 1 newline > > > + sched_info_of_thread->affinity = *_CPU_set_Default(); > > + sched_info_of_thread->affinity.set = > > + &sched_info_of_thread->affinity.preallocated; > ditto, and use a shorter variable name you can squeeze the lines better. > > + > > + > > + the_thread->scheduler_info = sched_info_of_thread; > > + > > + return sched_info_of_thread; > > +} > > + > > +int _Scheduler_priority_affinity_SMP_Get_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > +) > > +{ > > + Scheduler_priority_affinity_SMP_Per_thread *sched_info_of_thread = > > + _Scheduler_priority_affinity_Get_scheduler_info(thread); > > + > > + if ( sched_info_of_thread->affinity.setsize != cpusetsize ) { > > + return -1; > > + } > > + > > + CPU_COPY( cpuset, sched_info_of_thread->affinity.set ); > > + return 0; > > +} > > + > > +int _Scheduler_priority_affinity_SMP_Set_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > +) > > +{ > > + Scheduler_priority_affinity_SMP_Per_thread *sched_info_of_thread = > > + _Scheduler_priority_affinity_Get_scheduler_info(thread); > > + > > + if ( sched_info_of_thread->affinity.setsize != cpusetsize ) { > > + return -1; > > + } > > + > > + CPU_COPY( sched_info_of_thread->affinity.set, cpuset ); > > + > > + return 0; > > +} > > -- > > 1.8.1.4 > > > > _______________________________________________ > > rtems-devel mailing list > > rtems-devel@rtems.org > > http://www.rtems.org/mailman/listinfo/rtems-devel _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel