posix: Add pthread_attr_t methods to get/set affinity.

This patch adds the following methods:

  + pthread_attr_get_affinity_np
  + pthread_attr_set_affinity_np
This commit is contained in:
Jennifer Averett
2014-02-06 12:59:08 -06:00
parent baa426a074
commit 6e6adafaaa
3 changed files with 108 additions and 0 deletions

View File

@@ -142,6 +142,12 @@ libposix_a_SOURCES += src/pthreadatfork.c src/pthreadattrdestroy.c \
## RTEMS specific support methods
libposix_a_SOURCES += src/pthreadattrcompare.c
if HAS_SMP
## PTHREAD_AFFINITY_C_FILES
libposix_a_SOURCES += src/pthreadattrsetaffinitynp.c \
src/pthreadattrgetaffinitynp.c
endif
## PSIGNAL_C_FILES
libposix_a_SOURCES += src/psignal.c src/alarm.c src/kill.c src/killinfo.c \
src/kill_r.c src/pause.c src/psignalclearprocesssignals.c \

View File

@@ -0,0 +1,48 @@
/**
* @file
*
* @brief Pthread Attribute Get Affinity
* @ingroup POSIXAPI
*/
/*
* 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
#if HAVE_DECL_PTHREAD_ATTR_GETAFFINITY_NP
#define _GNU_SOURCE
#include <pthread.h>
#include <errno.h>
#include <rtems/posix/pthreadimpl.h>
#include <rtems/posix/priorityimpl.h>
#include <rtems/score/threadimpl.h>
int pthread_attr_getaffinity_np(
const pthread_attr_t *attr,
size_t cpusetsize,
cpu_set_t *cpuset
)
{
if ( !cpuset )
return EFAULT;
if ( !attr )
return EFAULT;
if ( cpusetsize != attr->affinitysetsize)
return EINVAL;
CPU_COPY( cpuset, attr->affinityset );
return 0;
}
#endif

View File

@@ -0,0 +1,54 @@
#if HAVE_CONFIG_H
#include "config.h"
#endif
/**
* @file
*
* @brief Pthread Attribute Set Affinity
* @ingroup POSIXAPI
*/
/*
* 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_DECL_PTHREAD_ATTR_SETAFFINITY_NP
#define _GNU_SOURCE
#include <pthread.h>
#include <errno.h>
#include <rtems/posix/pthreadimpl.h>
#include <rtems/posix/priorityimpl.h>
#include <rtems/score/threadimpl.h>
#include <rtems/score/cpusetimpl.h>
int pthread_attr_setaffinity_np(
pthread_attr_t *attr,
size_t cpusetsize,
const cpu_set_t *cpuset
)
{
int error;
if ( !cpuset )
return EFAULT;
if ( !attr )
return EFAULT;
error = _CPU_set_Is_valid( cpuset, cpusetsize );
if ( error != 0 )
return EINVAL;
CPU_COPY( attr->affinityset, cpuset );
return 0;
}
#endif