Sorry for the late response to this one: Fixing the typo and cut and paste problems.
The default scheduler is the default for the SMP system now. By default affinity is not supported. Jennifer > -----Original Message----- > From: ged...@gwmail.gwu.edu [mailto:ged...@gwmail.gwu.edu] On > Behalf Of Gedare Bloom > Sent: Monday, March 24, 2014 3:10 PM > To: Jennifer Averett > Cc: RTEMS Devel > Subject: Re: [PATCH 01/10] score: Add get/set affinity to Scheduler > Framework. > > 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 + > > cpukit/score/include/rtems/score/scheduler.h | 58 > ++++++++++++++++++++++ > > cpukit/score/include/rtems/score/schedulerimpl.h | 32 ++++++++++++ > > .../score/include/rtems/score/schedulerpriority.h | 11 +++- > > .../include/rtems/score/schedulerprioritysmp.h | 6 ++- > > .../score/include/rtems/score/schedulersimplesmp.h | 4 +- > > cpukit/score/src/schedulerdefaultgetaffinity.c | 41 +++++++++++++++ > > cpukit/score/src/schedulerdefaultsetaffinity.c | 32 ++++++++++++ > > 8 files changed, 182 insertions(+), 4 deletions(-) create mode > > 100644 cpukit/score/src/schedulerdefaultgetaffinity.c > > create mode 100644 cpukit/score/src/schedulerdefaultsetaffinity.c > > > > diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am index > > aeee4b6..67cc802 100644 > > --- a/cpukit/score/Makefile.am > > +++ b/cpukit/score/Makefile.am > > @@ -131,6 +131,8 @@ libscore_a_SOURCES += src/schedulersmpstartidle.c > > libscore_a_SOURCES += src/smp.c libscore_a_SOURCES += src/cpuset.c > > libscore_a_SOURCES += src/cpusetprintsupport.c > > +libscore_a_SOURCES += src/schedulerdefaultgetaffinity.c > > +libscore_a_SOURCES += src/schedulerdefaultsetaffinity.c > > endif > > > > ## CORE_APIMUTEX_C_FILES > > diff --git a/cpukit/score/include/rtems/score/scheduler.h > > b/cpukit/score/include/rtems/score/scheduler.h > > index ced3c00..a0e36f3 100644 > > --- a/cpukit/score/include/rtems/score/scheduler.h > > +++ b/cpukit/score/include/rtems/score/scheduler.h > > @@ -22,6 +22,9 @@ > > #include <rtems/score/percpu.h> > > #include <rtems/score/chain.h> > > #include <rtems/score/priority.h> > > +#if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && > defined(RTEMS_SMP) > > + #include <sys/cpuset.h> > > +#endif > > > > #ifdef __cplusplus > > extern "C" { > > @@ -98,6 +101,24 @@ typedef struct { > > * @see _Scheduler_Start_idle(). > > */ > > void ( *start_idle )( Thread_Control *thread, Per_CPU_Control > > *processor ); > > + > > +#if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && > defined(RTEMS_SMP) > > + /** > > + * @brief Obtain the processor affinity for a thread. > > + * > > + * @see _Scheduler_Get_affinity(). > > + */ > > + int ( *get_affinity )( Thread_Control *thread, size_t cpusetsize, > > +cpu_set_t *cpuset ); > > + > > + > 1 newline please > > > + /** > > + * @brief Set the processor affinity for a thread. > > + * > > + * @see _Scheduler_Set_affinity(). > > + */ > > + int ( *set_affinity )( Thread_Control *thread, size_t cpusetsize, > > +cpu_set_t *cpuset ); #endif > > + > > } Scheduler_Operations; > > > > /** > > @@ -184,6 +205,43 @@ void _Scheduler_default_Start_idle( > > Per_CPU_Control *processor > > ); > > > > +#if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && > defined(RTEMS_SMP) > > + > > + /** > > + * @brief Get affinity for the default scheduler. > > + * > > + * @param[in] thread The associated thread. > > + * @param[in] cpusetsize The size of the cpuset. > > + * @param[out] cpuset Affinity set containing all CPUs. > > + * > > + * @retval 0 Successfully got cpuset > > + * @retval -1 The cpusetsize is invalid for the system > > + */ > > + int _Scheduler_default_Get_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > + ); > > + > > + /** > > + * @brief Set affinity for the default 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 > > + * > > + * This method always returns successful and does not save > > + * the cpuset. > > + */ > > + int _Scheduler_default_Set_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > + ); > > +#endif > > + > > /**@}*/ > > > > #ifdef __cplusplus > > diff --git a/cpukit/score/include/rtems/score/schedulerimpl.h > > b/cpukit/score/include/rtems/score/schedulerimpl.h > > index 7fbaf54..021b50f 100644 > > --- a/cpukit/score/include/rtems/score/schedulerimpl.h > > +++ b/cpukit/score/include/rtems/score/schedulerimpl.h > > @@ -240,6 +240,38 @@ RTEMS_INLINE_ROUTINE void > _Scheduler_Start_idle( > > ( *_Scheduler.Operations.start_idle )( thread, processor ); } > > > > +#if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && > defined(RTEMS_SMP) > > + /** > > + * @brief Obtain the processor affinity for a thread. > > + * > > + * @param[in,out] thread The idle thread for the processor. > idle? > > > + * @parma[out] cpuset The processor affinity for this thread > > + */ > > + RTEMS_INLINE_ROUTINE int _Scheduler_Get_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > + ) > > + { > > + return (*_Scheduler.Operations.get_affinity)( thread, cpusetsize, > > + cpuset ); } > > + > > + /** > > + * @brief Set the processor affinity for a thread. > > + * > > + * @param[in,out] thread The idle thread for the processor. > idle? > > > + * @parma[in] cpuset The processor affinity for this thread > > + */ > > + RTEMS_INLINE_ROUTINE int _Scheduler_Set_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > + ) > > + { > > + return (*_Scheduler.Operations.set_affinity)( thread, cpusetsize, > > +cpuset ); > > + } > > +#endif > > + > > RTEMS_INLINE_ROUTINE void _Scheduler_Update_heir( > > Thread_Control *heir, > > bool force_dispatch > > diff --git a/cpukit/score/include/rtems/score/schedulerpriority.h > > b/cpukit/score/include/rtems/score/schedulerpriority.h > > index 605ab39..a9a46e9 100644 > > --- a/cpukit/score/include/rtems/score/schedulerpriority.h > > +++ b/cpukit/score/include/rtems/score/schedulerpriority.h > > @@ -34,6 +34,14 @@ extern "C" { > > */ > > /**@{*/ > > > > +#if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && > defined(RTEMS_SMP) > > + #define SCHEDULER_PRIORITY_ADDITIONAL_SMP_ENTRY_POINTS \ > > + _Scheduler_default_Get_affinity, /* get affinity entry point */ \ > > + _Scheduler_default_Set_affinity /* set affinity entry point */ > > +#else > > + #define SCHEDULER_PRIORITY_ADDITIONAL_SMP_ENTRY_POINTS > > +#endif > > + > > /** > > * Entry points for the Deterministic Priority Based Scheduler. > > */ > > @@ -53,7 +61,8 @@ extern "C" { > > _Scheduler_priority_Priority_compare, /* compares two priorities */ \ > > _Scheduler_default_Release_job, /* new period of task */ \ > > _Scheduler_default_Tick, /* tick entry point */ \ > > - _Scheduler_default_Start_idle /* start idle entry point */ \ > > + _Scheduler_default_Start_idle, /* start idle entry point */ \ > > + SCHEDULER_PRIORITY_ADDITIONAL_SMP_ENTRY_POINTS \ > > } > > > > /** > Do we support configuring an SMP system with this scheduler? > > > diff --git a/cpukit/score/include/rtems/score/schedulerprioritysmp.h > > b/cpukit/score/include/rtems/score/schedulerprioritysmp.h > > index b0e5fad..bee4232 100644 > > --- a/cpukit/score/include/rtems/score/schedulerprioritysmp.h > > +++ b/cpukit/score/include/rtems/score/schedulerprioritysmp.h > > @@ -48,7 +48,7 @@ extern "C" { > > */ > > > > /** > > - * @brief Entry points for the Simple SMP Scheduler. > > + * @brief Entry points for the Priority SMP Scheduler. > > */ > > #define SCHEDULER_PRIORITY_SMP_ENTRY_POINTS \ > > { \ > > @@ -66,7 +66,9 @@ extern "C" { > > _Scheduler_priority_Priority_compare, \ > > _Scheduler_default_Release_job, \ > > _Scheduler_default_Tick, \ > > - _Scheduler_SMP_Start_idle \ > > + _Scheduler_SMP_Start_idle, \ > > + _Scheduler_default_Get_affinity, \ > > + _Scheduler_default_Set_affinity \ > > } > > > > void _Scheduler_priority_SMP_Initialize( void ); diff --git > > a/cpukit/score/include/rtems/score/schedulersimplesmp.h > > b/cpukit/score/include/rtems/score/schedulersimplesmp.h > > index 1a69358..e8cd54b 100644 > > --- a/cpukit/score/include/rtems/score/schedulersimplesmp.h > > +++ b/cpukit/score/include/rtems/score/schedulersimplesmp.h > > @@ -68,7 +68,9 @@ extern "C" { > > _Scheduler_priority_Priority_compare, \ > > _Scheduler_default_Release_job, \ > > _Scheduler_default_Tick, \ > > - _Scheduler_SMP_Start_idle \ > > + _Scheduler_SMP_Start_idle, \ > > + _Scheduler_default_Get_affinity, \ > > + _Scheduler_default_Set_affinity \ > > } > > > > void _Scheduler_simple_smp_Initialize( void ); diff --git > > a/cpukit/score/src/schedulerdefaultgetaffinity.c > > b/cpukit/score/src/schedulerdefaultgetaffinity.c > > new file mode 100644 > > index 0000000..fde9b01 > > --- /dev/null > > +++ b/cpukit/score/src/schedulerdefaultgetaffinity.c > > @@ -0,0 +1,41 @@ > > +/** > > + * @file > > + * > > + * @brief Scheduler Default Get Affinity Operation > > + * > > + * @ingroup ScoreScheduler > > + */ > > + > > +/* > > + * 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/schedulerimpl.h> #include > > +<rtems/score/cpusetimpl.h> > > + > > +int _Scheduler_default_Get_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *cpuset > > +) > > +{ > > + const CPU_set_Control *ctl; > > + > > + ctl = _CPU_set_Default(); > > + if ( cpusetsize == ctl->setsize ) { > shouldn't this be != > > > + return -1; > > + } > > + > > + CPU_COPY( cpuset, ctl->set ); > > + > > + return 0; > > +} > > diff --git a/cpukit/score/src/schedulerdefaultsetaffinity.c > > b/cpukit/score/src/schedulerdefaultsetaffinity.c > > new file mode 100644 > > index 0000000..9c1eef0 > > --- /dev/null > > +++ b/cpukit/score/src/schedulerdefaultsetaffinity.c > > @@ -0,0 +1,32 @@ > > +/** > > + * @file > > + * > > + * @brief Scheduler Default Set Affinity Operation > > + * > > + * @ingroup ScoreScheduler > > + */ > > + > > +/* > > + * 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/schedulerimpl.h> #include > > +<rtems/score/cpusetimpl.h> > > + > > +int _Scheduler_default_Set_affinity( > > + Thread_Control *thread, > > + size_t cpusetsize, > > + cpu_set_t *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