From cfe457f9a61525b02c88503d7af76887b0976643 Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Thu, 6 Mar 2014 08:37:21 -0600 Subject: score: score: Add get/set affinity to Scheduler Framework. --- cpukit/score/include/rtems/score/scheduler.h | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'cpukit/score/include/rtems/score/scheduler.h') diff --git a/cpukit/score/include/rtems/score/scheduler.h b/cpukit/score/include/rtems/score/scheduler.h index 01d0c3a25b..7aeb560691 100644 --- a/cpukit/score/include/rtems/score/scheduler.h +++ b/cpukit/score/include/rtems/score/scheduler.h @@ -22,6 +22,9 @@ #include #include #include +#if defined(__RTEMS_HAVE_SYS_CPUSET_H__) && defined(RTEMS_SMP) + #include +#endif #ifdef __cplusplus extern "C" { @@ -98,6 +101,27 @@ 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(). + */ + bool ( *get_affinity )( Thread_Control *thread, size_t cpusetsize, cpu_set_t *cpuset ); + + /** + * @brief Set the processor affinity for a thread. + * + * @see _Scheduler_Set_affinity(). + */ + bool ( *set_affinity )( + Thread_Control *thread, + size_t cpusetsize, + const cpu_set_t *cpuset + ); +#endif + } Scheduler_Operations; /** @@ -190,6 +214,43 @@ void _Scheduler_default_Start_idle( */ extern const bool _Scheduler_FIXME_thread_priority_queues_are_broken; +#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 + */ + bool _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. + */ + bool _Scheduler_default_Set_affinity( + Thread_Control *thread, + size_t cpusetsize, + const cpu_set_t *cpuset + ); +#endif + /**@}*/ #ifdef __cplusplus -- cgit v1.2.3