Module: xenomai-forge Branch: master Commit: bc58b58f23279c6a72669b139275f5ef6be79c2d URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=bc58b58f23279c6a72669b139275f5ef6be79c2d
Author: Gilles Chanteperdrix <[email protected]> Date: Sun Dec 11 17:33:55 2011 +0100 cobalt: remove thread_attr.c --- kernel/cobalt/Makefile | 1 - kernel/cobalt/thread.c | 21 +- kernel/cobalt/thread_attr.c | 1088 ------------------------------------------- 3 files changed, 16 insertions(+), 1094 deletions(-) diff --git a/kernel/cobalt/Makefile b/kernel/cobalt/Makefile index f4bc809..d54803c 100644 --- a/kernel/cobalt/Makefile +++ b/kernel/cobalt/Makefile @@ -1,7 +1,6 @@ obj-$(CONFIG_XENOMAI) += nucleus/ rtdm/ xeno_cobalt.o xeno_cobalt-y := \ - thread_attr.o \ thread.o \ mutex_attr.o \ mutex.o \ diff --git a/kernel/cobalt/thread.c b/kernel/cobalt/thread.c index 5559ca7..00086ac 100644 --- a/kernel/cobalt/thread.c +++ b/kernel/cobalt/thread.c @@ -36,7 +36,19 @@ xnticks_t cobalt_time_slice; -static pthread_attr_t default_attr; +static const pthread_attr_t default_thread_attr = { + magic:COBALT_THREAD_ATTR_MAGIC, + detachstate:PTHREAD_CREATE_JOINABLE, + stacksize:PTHREAD_STACK_MIN, + inheritsched:PTHREAD_EXPLICIT_SCHED, + policy:SCHED_OTHER, + schedparam_ex:{ + sched_priority:0}, + + name:NULL, + fp:1, + affinity:XNPOD_ALL_CPUS, +}; static unsigned cobalt_get_magic(void) { @@ -393,7 +405,7 @@ static inline int pthread_create(pthread_t *tid, const pthread_attr_t * attr) if (!thread) return -EAGAIN; - thread->attr = attr ? *attr : default_attr; + thread->attr = attr ? *attr : default_thread_attr; cur = cobalt_current_thread(); @@ -968,7 +980,7 @@ int cobalt_thread_create(unsigned long tid, int policy, * critical fields are set in a compatible fashion wrt to the * calling context. */ - pthread_attr_init(&attr); + attr = default_thread_attr; attr.policy = policy; attr.detachstate = PTHREAD_CREATE_DETACHED; attr.schedparam_ex = param; @@ -1008,7 +1020,7 @@ pthread_t cobalt_thread_shadow(struct task_struct *p, pid_t h_tid; int err; - pthread_attr_init(&attr); + attr = default_thread_attr; attr.detachstate = PTHREAD_CREATE_DETACHED; attr.name = p->comm; @@ -1369,7 +1381,6 @@ void cobalt_threadq_cleanup(cobalt_kqueues_t *q) void cobalt_thread_pkg_init(u_long rrperiod) { initq(&cobalt_global_kqueues.threadq); - pthread_attr_init(&default_attr); cobalt_time_slice = rrperiod; xnpod_add_hook(XNHOOK_THREAD_DELETE, thread_delete_hook); } diff --git a/kernel/cobalt/thread_attr.c b/kernel/cobalt/thread_attr.c deleted file mode 100644 index 85f88eb..0000000 --- a/kernel/cobalt/thread_attr.c +++ /dev/null @@ -1,1088 +0,0 @@ -/* - * Written by Gilles Chanteperdrix <[email protected]>. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -/** - * @ingroup posix_thread - * @defgroup posix_threadattr Thread creation attributes. - * - * Thread creation attributes. - * - * The services described in this section allow to set the attributes of a - * @b pthread_attr_t object, passed to the pthread_create() service in order - * to set the attributes of a created thread. - * - * A @b pthread_attr_t object has to be initialized with pthread_attr_init() - * first, which sets attributes to their default values, i.e. in kernel-space: - * - @a detachstate to PTHREAD_CREATE_JOINABLE, - * - @a stacksize to PTHREAD_STACK_MIN, - * - @a inheritsched to PTHREAD_EXPLICIT_SCHED, - * - @a schedpolicy to SCHED_OTHER, - * - @a name to NULL (only available in kernel-space), - * - scheduling priority to the minimum, - * - floating-point hardware enabled (only available in kernel-space), - * - processor affinity set to all available processors (only available as a - * thread attribute in kernel-space). - * - * In user-space, the attributes and their defaults values are those documented - * by the underlying threading library (LinuxThreads or NPTL). - * - *@{*/ - -#include "internal.h" - -static const pthread_attr_t default_thread_attr = { - magic:COBALT_THREAD_ATTR_MAGIC, - detachstate:PTHREAD_CREATE_JOINABLE, - stacksize:PTHREAD_STACK_MIN, - inheritsched:PTHREAD_EXPLICIT_SCHED, - policy:SCHED_OTHER, - schedparam_ex:{ - sched_priority:0}, - - name:NULL, - fp:1, - affinity:XNPOD_ALL_CPUS, -}; - -/** - * Initialize a thread attributes object. - * - * This service initializes the thread creation attributes structure pointed to - * by @a attr. Attributes are set to their default values (see @ref - * posix_threadattr). - * - * If this service is called specifying a thread attributes object that was - * already initialized, the attributes object is reinitialized. - * - * @param attr address of the thread attributes object to initialize. - * - * @return 0. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_init.html"> - * Specification.</a> - * - */ -int pthread_attr_init(pthread_attr_t * attr) -{ - *attr = default_thread_attr; - - return 0; -} - -/** - * Destroy a thread attributes object. - * - * This service invalidates the attribute object pointed to by @a attr. The - * object becomes invalid for all services (they all return EINVAL) except - * pthread_attr_init(). - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_destroy.html"> - * Specification.</a> - * - */ -int pthread_attr_destroy(pthread_attr_t * attr) -{ - char *name; - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - name = attr->name; - cobalt_mark_deleted(attr); - xnlock_put_irqrestore(&nklock, s); - - if (name) - xnfree(name); - - return 0; -} - -/** - * Get detachstate attribute. - * - * This service returns, at the address @a detachstate, the value of the - * @a detachstate attribute in the thread attribute object @a attr. - * - * Valid values of this attribute are PTHREAD_CREATE_JOINABLE and - * PTHREAD_CREATE_DETACHED. A detached thread is a thread which control block is - * automatically reclaimed when it terminates. The control block of a joinable - * thread, on the other hand, is only reclaimed when joined with the service - * pthread_join(). - * - * A thread that was created joinable may be detached after creation by using - * the pthread_detach() service. - * - * @param attr attribute object - * - * @param detachstate address where the value of the detachstate attribute will - * be stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid; - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getdetachstate.html"> - * Specification.</a> - * - */ -int pthread_attr_getdetachstate(const pthread_attr_t * attr, int *detachstate) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *detachstate = attr->detachstate; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set detachstate attribute. - * - * This service sets to @a detachstate the value of the @a detachstate attribute - * in the attribute object @a attr. - * - * Valid values of this attribute are PTHREAD_CREATE_JOINABLE and - * PTHREAD_CREATE_DETACHED. A detached thread is a thread which control block is - * automatically reclaimed when it terminates. The control block of a joinable - * thread, on the other hand, is only reclaimed when joined with the service - * pthread_join(). - * - * A thread that was created joinable may be detached after creation by using - * the pthread_detach() service. - * - * @param attr attribute object; - * - * @param detachstate value of the detachstate attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, the attribute object @a attr is invalid - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setdetachstate.html"> - * Specification.</a> - * - */ -int pthread_attr_setdetachstate(pthread_attr_t * attr, int detachstate) -{ - spl_t s; - - if (detachstate != PTHREAD_CREATE_JOINABLE - && detachstate != PTHREAD_CREATE_DETACHED) - return EINVAL; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->detachstate = detachstate; - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get stacksize attribute. - * - * This service stores, at the address @a stacksize, the value of the @a - * stacksize attribute in the attribute object @a attr. - * - * The @a stacksize attribute is used as the stack size of the threads created - * using the attribute object @a attr. - * - * @param attr attribute object; - * - * @param stacksize address where the value of the @a stacksize attribute will - * be stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getstacksize.html"> - * Specification.</a> - * - */ -int pthread_attr_getstacksize(const pthread_attr_t * attr, size_t * stacksize) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *stacksize = attr->stacksize; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set stacksize attribute. - * - * This service set to @a stacksize, the value of the @a stacksize attribute in - * the attribute object @a attr. - * - * The @a stacksize attribute is used as the stack size of the threads created - * using the attribute object @a attr. - * - * The minimum value for this attribute is PTHREAD_STACK_MIN. - * - * @param attr attribute object; - * - * @param stacksize value of the @a stacksize attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr or @a stacksize is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setstacksize.html"> - * Specification.</a> - * - */ -int pthread_attr_setstacksize(pthread_attr_t * attr, size_t stacksize) -{ - spl_t s; - - if (stacksize < PTHREAD_STACK_MIN) - return EINVAL; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->stacksize = stacksize; - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get inheritsched attribute. - * - * This service returns at the address @a inheritsched the value of the @a - * inheritsched attribute in the attribute object @a attr. - * - * Threads created with this attribute set to PTHREAD_INHERIT_SCHED will use - * the same scheduling policy and priority as the thread calling - * pthread_create(). Threads created with this attribute set to - * PTHREAD_EXPLICIT_SCHED will use the value of the @a schedpolicy attribute as - * scheduling policy, and the value of the @a schedparam attribute as scheduling - * priority. - * - * @param attr attribute object; - * - * @param inheritsched address where the value of the @a inheritsched attribute - * will be stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getinheritsched.html"> - * Specification.</a> - * - */ -int pthread_attr_getinheritsched(const pthread_attr_t * attr, int *inheritsched) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *inheritsched = attr->inheritsched; - - return 0; -} - -/** - * Set inheritsched attribute. - * - * This service set to @a inheritsched the value of the @a inheritsched - * attribute in the attribute object @a attr. - * - * Threads created with this attribute set to PTHREAD_INHERIT_SCHED will use the - * same scheduling policy and priority as the thread calling - * pthread_create(). Threads created with this attribute set to - * PTHREAD_EXPLICIT_SCHED will use the value of the @a schedpolicy attribute as - * scheduling policy, and the value of the @a schedparam attribute as scheduling - * priority. - * - * @param attr attribute object; - * - * @param inheritsched value of the @a inheritsched attribute, - * PTHREAD_INHERIT_SCHED or PTHREAD_EXPLICIT_SCHED. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr or @a inheritsched is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setinheritsched.html"> - * Specification.</a> - * - */ -int pthread_attr_setinheritsched(pthread_attr_t * attr, int inheritsched) -{ - spl_t s; - - switch (inheritsched) { - default: - return EINVAL; - - case PTHREAD_INHERIT_SCHED: - case PTHREAD_EXPLICIT_SCHED: - break; - } - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->inheritsched = inheritsched; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get schedpolicy attribute. - * - * This service stores, at the address @a policy, the value of the @a policy - * attribute in the attribute object @a attr. - * - * Threads created with the attribute object @a attr use the value of this - * attribute as scheduling policy if the @a inheritsched attribute is set to - * PTHREAD_EXPLICIT_SCHED. The value of this attribute is one of SCHED_FIFO, - * SCHED_COBALT, SCHED_RR, SCHED_SPORADIC or SCHED_OTHER. - * - * @param attr attribute object; - * - * @param policy address where the value of the @a policy attribute in the - * attribute object @a attr will be stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getschedpolicy.html"> - * Specification.</a> - * - */ -int pthread_attr_getschedpolicy(const pthread_attr_t * attr, int *policy) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *policy = attr->policy; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set schedpolicy attribute. - * - * This service set to @a policy the value of the @a policy attribute in the - * attribute object @a attr. - * - * Threads created with the attribute object @a attr use the value of this - * attribute as scheduling policy if the @a inheritsched attribute is set to - * PTHREAD_EXPLICIT_SCHED. The value of this attribute is one of SCHED_FIFO, - * SCHED_COBALT, SCHED_RR, SCHED_SPORADIC or SCHED_OTHER. - * - * @param attr attribute object; - * - * @param policy value of the @a policy attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr or @a policy is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setschedpolicy.html"> - * Specification.</a> - * - */ -int pthread_attr_setschedpolicy(pthread_attr_t * attr, int policy) -{ - spl_t s; - - switch (policy) { - default: - - return EINVAL; - - case SCHED_OTHER: - case SCHED_FIFO: - case SCHED_COBALT: - case SCHED_RR: - case SCHED_SPORADIC: - - break; - } - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->policy = policy; - if (policy == SCHED_OTHER) { - if (attr->schedparam_ex.sched_priority != 0) - attr->schedparam_ex.sched_priority = 0; - } else if (attr->schedparam_ex.sched_priority == 0) - attr->schedparam_ex.sched_priority = COBALT_MIN_PRIORITY; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get schedparam attribute. - * - * This service stores, at the address @a par, the limited form of the - * @a schedparam attribute in the attribute object @a attr. - * - * The limited form only defines the @a sched_priority member, that is - * sufficent to hold the scheduling parameter for SCHED_FIFO, - * SCHED_COBALT, SCHED_RR and SCHED_OTHER class members. Threads - * created with @a attr will use the value of this attribute as a - * scheduling priority if the attribute @a inheritsched is set to - * PTHREAD_EXPLICIT_SCHED. Valid priorities range from 1 to 99 for - * SCHED_FIFO and SCHED_RR, 1 to XNSCHED_RT_MAX_PRIO for SCHED_COBALT. - * - * pthread_attr_getschedparam_ex() should be used to retrieve the - * parameters for extended scheduling classes, such as SCHED_SPORADIC. - * - * @param attr attribute object; - * - * @param par address where the value of the @a schedparam attribute will be - * stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getschedparam.html"> - * Specification.</a> - * - */ -int pthread_attr_getschedparam(const pthread_attr_t * attr, - struct sched_param *par) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - par->sched_priority = attr->schedparam_ex.sched_priority; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get schedparam_ex extended attribute. - * - * This service is an extended version of - * pthread_attr_getschedparam(), that also supports Xenomai-specific - * or additional POSIX scheduling policies, which are not available - * with the host Linux environment. - * - * Typically, SCHED_SPORADIC parameters can be retrieved from this - * call. - * - * @param attr attribute object; - * - * @param par address where the value of the extended @a schedparam_ex - * attribute will be stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getschedparam.html"> - * Specification.</a> - * - */ -int pthread_attr_getschedparam_ex(const pthread_attr_t * attr, - struct sched_param_ex *par) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *par = attr->schedparam_ex; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set schedparam attribute. - * - * This service set to @a par, the limited form of the @a schedparam - * attribute in the attribute object @a attr. - * - * The limited form only defines the @a sched_priority member, that is - * sufficent to hold the scheduling parameter for SCHED_FIFO, - * SCHED_COBALT, SCHED_RR and SCHED_OTHER class members. Threads - * created with @a attr will use the value of this attribute as a - * scheduling priority if the attribute @a inheritsched is set to - * PTHREAD_EXPLICIT_SCHED. Valid priorities range from 1 to 99 for - * SCHED_FIFO and SCHED_RR, 1 to XNSCHED_RT_MAX_PRIO for SCHED_COBALT. - * - * @param attr attribute object; - * - * @param par value of the @a schedparam attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr or @a par is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setschedparam.html"> - * Specification.</a> - * - */ -int pthread_attr_setschedparam(pthread_attr_t * attr, - const struct sched_param *par) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - if ((attr->policy != SCHED_OTHER && - (par->sched_priority < COBALT_MIN_PRIORITY - || par->sched_priority > COBALT_MAX_PRIORITY)) - || (attr->policy == SCHED_OTHER && par->sched_priority != 0)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->schedparam_ex.sched_priority = par->sched_priority; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set extended schedparam_ex attribute. - * - * This service is an extended version of - * pthread_attr_setschedparam(), that also supports Xenomai-specific - * or additional POSIX scheduling policies, which are not available - * with the host Linux environment. - * - * Typically, SCHED_SPORADIC parameters can be set using this call. - * - * @param attr attribute object; - * - * @param par value of the @a schedparam attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr or @a par is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setschedparam.html"> - * Specification.</a> - * - */ -int pthread_attr_setschedparam_ex(pthread_attr_t * attr, - const struct sched_param_ex *par) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - if ((attr->policy != SCHED_OTHER && - (par->sched_priority < COBALT_MIN_PRIORITY - || par->sched_priority > COBALT_MAX_PRIORITY)) - || (attr->policy == SCHED_OTHER && par->sched_priority != 0)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->schedparam_ex = *par; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get contention scope attribute. - * - * This service stores, at the address @a scope, the value of the @a scope - * attribute in the attribute object @a attr. - * - * The @a scope attribute represents the scheduling contention scope of threads - * created with the attribute object @a attr. This implementation only supports - * the value PTHREAD_SCOPE_SYSTEM. - * - * @param attr attribute object; - * - * @param scope address where the value of the @a scope attribute will be stored - * on sucess. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_getscope.html"> - * Specification.</a> - * - */ -int pthread_attr_getscope(const pthread_attr_t * attr, int *scope) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *scope = PTHREAD_SCOPE_SYSTEM; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set contention scope attribute. - * - * This service set to @a scope the value of the @a scope attribute in the - * attribute object @a attr. - * - * The @a scope attribute represents the scheduling contention scope of threads - * created with the attribute object @a attr. This implementation only supports - * the value PTHREAD_SCOPE_SYSTEM. - * - * @param attr attribute object; - * - * @param scope value of the @a scope attribute. - * - * @return 0 on success; - * @return an error number if: - * - ENOTSUP, @a scope is an unsupported value of the scope attribute. - * - EINVAL, @a attr is invalid. - * - * @see - * <a href="http://www.opengroup.org/onlinepubs/000095399/functions/pthread_attr_setscope.html"> - * Specification.</a> - * - */ -int pthread_attr_setscope(pthread_attr_t * attr, int scope) -{ - spl_t s; - - if (scope != PTHREAD_SCOPE_SYSTEM) - return ENOTSUP; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get name attribute. - * - * This service stores, at the address @a name, the value of the @a name - * attribute in the attribute object @a attr. - * - * The @a name attribute is the name under which a thread created with the - * attribute object @a attr will appear under /proc/xenomai/sched. - * - * The name returned by this function is only valid until the name is changed - * with pthread_attr_setname_np() or the @a attr object is destroyed with - * pthread_attr_destroy(). - * - * If @a name is @a NULL, a unique default name will be used. - * - * This service is a non-portable extension of the POSIX interface. - * - * @param attr attribute object; - * - * @param name address where the value of the @a name attribute will be stored - * on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @par Valid contexts: - * - kernel module initialization or cleanup routine; - * - Xenomai kernel-space thread. - */ -int pthread_attr_getname_np(const pthread_attr_t * attr, const char **name) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *name = attr->name; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set name attribute. - * - * This service set to @a name, the value of the @a name attribute in the - * attribute object @a attr. - * - * The @a name attribute is the name under which a thread created with the - * attribute object @a attr will appear under /proc/xenomai/sched. - * - * If @a name is @a NULL, a unique default name will be used. - * - * This service is a non-portable extension of the POSIX interface. - * - * @param attr attribute object; - * - * @param name value of the @a name attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid; - * - ENOMEM, insufficient memory exists in the system heap to duplicate the name - * string, increase CONFIG_XENO_OPT_SYS_HEAPSZ. - * - * @par Valid contexts: - * - kernel module initialization or cleanup routine; - * - Xenomai kernel-space thread. - */ -int pthread_attr_setname_np(pthread_attr_t * attr, const char *name) -{ - char *old_name, *new_name; - spl_t s; - - if (name) { - new_name = xnmalloc(strlen(name) + 1); - if (!new_name) - return ENOMEM; - - strcpy(new_name, name); - } else - new_name = NULL; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - if (name) - xnfree(new_name); - return EINVAL; - } - - old_name = attr->name; - attr->name = new_name; - xnlock_put_irqrestore(&nklock, s); - - if (old_name) - xnfree(old_name); - - return 0; -} - -/** - * Get the floating point attribute. - * - * This service returns, at the address @a fp, the value of the @a fp attribute - * in the attribute object @a attr. - * - * The @a fp attribute is a boolean attribute indicating whether a thread - * created with the attribute @a attr may use floating-point hardware. - * - * This service is a non-portable extension of the POSIX interface. - * - * @param attr attribute object; - * - * @param fp address where the value of the @a fp attribute will be stored on - * success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @par Valid contexts: - * - kernel module initialization or cleanup routine; - * - Xenomai kernel-space thread. - */ -int pthread_attr_getfp_np(const pthread_attr_t * attr, int *fp) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *fp = attr->fp; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set the floating point attribute. - * - * This service set to @a fp, the value of the @a fp attribute in the attribute - * object @a attr. - * - * The @a fp attribute is a boolean attribute indicating whether a thread - * created with the attribute @a attr may use floating-point hardware. - * - * This service is a non-portable extension of the POSIX interface. - * - * @param attr attribute object; - * - * @param fp value of the @a fp attribute. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @par Valid contexts: - * - kernel module initialization or cleanup routine; - * - Xenomai kernel-space thread. - */ -int pthread_attr_setfp_np(pthread_attr_t * attr, int fp) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->fp = fp; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Get the processor affinity attribute. - * - * This service stores, at the address @a mask, the value of the @a affinity - * attribute in the attribute object @a attr. - * - * The @a affinity attributes is a bitmask where bits set indicate processor - * where a thread created with the attribute @a attr may run. The least - * significant bit corresponds to the first logical processor. - * - * This service is a non-portable extension of the POSIX interface. - * - * @param attr attribute object; - * - * @param mask address where the value of the @a affinity attribute will be - * stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @par Valid contexts: - * - kernel module initialization or cleanup routine; - * - Xenomai kernel-space thread. - */ -int -pthread_attr_getaffinity_np(const pthread_attr_t * attr, xnarch_cpumask_t *mask) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - *mask = attr->affinity; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/** - * Set the processor affinity attribute. - * - * This service sets to @a mask, the value of the @a affinity attribute in the - * attribute object @a attr. - * - * The @a affinity attributes is a bitmask where bits set indicate processor - * where a thread created with the attribute @a attr may run. The least - * significant bit corresponds to the first logical processor. - * - * This service is a non-portable extension of the POSIX interface. - * - * @param attr attribute object; - * - * @param mask address where the value of the @a affinity attribute will be - * stored on success. - * - * @return 0 on success; - * @return an error number if: - * - EINVAL, @a attr is invalid. - * - * @par Valid contexts: - * - kernel module initialization or cleanup routine; - * - Xenomai kernel-space thread. - */ -int pthread_attr_setaffinity_np(pthread_attr_t * attr, xnarch_cpumask_t mask) -{ - spl_t s; - - xnlock_get_irqsave(&nklock, s); - - if (!cobalt_obj_active(attr, COBALT_THREAD_ATTR_MAGIC, pthread_attr_t)) { - xnlock_put_irqrestore(&nklock, s); - return EINVAL; - } - - attr->affinity = mask; - - xnlock_put_irqrestore(&nklock, s); - - return 0; -} - -/*@}*/ - -EXPORT_SYMBOL_GPL(pthread_attr_init); -EXPORT_SYMBOL_GPL(pthread_attr_destroy); -EXPORT_SYMBOL_GPL(pthread_attr_getdetachstate); -EXPORT_SYMBOL_GPL(pthread_attr_setdetachstate); -EXPORT_SYMBOL_GPL(pthread_attr_getstacksize); -EXPORT_SYMBOL_GPL(pthread_attr_setstacksize); -EXPORT_SYMBOL_GPL(pthread_attr_getinheritsched); -EXPORT_SYMBOL_GPL(pthread_attr_setinheritsched); -EXPORT_SYMBOL_GPL(pthread_attr_getschedpolicy); -EXPORT_SYMBOL_GPL(pthread_attr_setschedpolicy); -EXPORT_SYMBOL_GPL(pthread_attr_getschedparam); -EXPORT_SYMBOL_GPL(pthread_attr_getschedparam_ex); -EXPORT_SYMBOL_GPL(pthread_attr_setschedparam); -EXPORT_SYMBOL_GPL(pthread_attr_setschedparam_ex); -EXPORT_SYMBOL_GPL(pthread_attr_getscope); -EXPORT_SYMBOL_GPL(pthread_attr_setscope); -EXPORT_SYMBOL_GPL(pthread_attr_getname_np); -EXPORT_SYMBOL_GPL(pthread_attr_setname_np); -EXPORT_SYMBOL_GPL(pthread_attr_getfp_np); -EXPORT_SYMBOL_GPL(pthread_attr_setfp_np); -EXPORT_SYMBOL_GPL(pthread_attr_getaffinity_np); -EXPORT_SYMBOL_GPL(pthread_attr_setaffinity_np); _______________________________________________ Xenomai-git mailing list [email protected] https://mail.gna.org/listinfo/xenomai-git
