summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/nfsclient/src/rpcio.c
diff options
context:
space:
mode:
authorDaniel Cederman <cederman@gaisler.com>2014-11-14 08:58:00 +0100
committerDaniel Hellstrom <daniel@gaisler.com>2014-12-02 13:41:20 +0100
commite4d8513707f567102ebc488865d10e513cde0177 (patch)
treef7b76a80c30cebd15f5428092b634be749d26bbb /cpukit/libfs/src/nfsclient/src/rpcio.c
parentnet: Add network task affinity config (diff)
downloadrtems-e4d8513707f567102ebc488865d10e513cde0177.tar.bz2
nfs: Add RPCd task affinity config option
Similar to the task priority option, the new CPU affinity option is first controlled by the RPCI specific rpciodCpuset option. If that is not set, it uses the global network task config. If that is also not set, it falls back to not setting the affinity at all, using all CPUs.
Diffstat (limited to 'cpukit/libfs/src/nfsclient/src/rpcio.c')
-rw-r--r--cpukit/libfs/src/nfsclient/src/rpcio.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/cpukit/libfs/src/nfsclient/src/rpcio.c b/cpukit/libfs/src/nfsclient/src/rpcio.c
index 7324e02fd9..07bd9a3a08 100644
--- a/cpukit/libfs/src/nfsclient/src/rpcio.c
+++ b/cpukit/libfs/src/nfsclient/src/rpcio.c
@@ -84,6 +84,7 @@
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
+#include <sys/cpuset.h>
#include "rpcio.h"
@@ -407,6 +408,10 @@ static rtems_interval ticksPerSec; /* cached system clock rate (WHO IS ASSUMED
*/
rtems_task_priority rpciodPriority = 0;
+#ifdef RTEMS_SMP
+const cpu_set_t *rpciodCpuset = 0;
+size_t rpciodCpusetSize = 0;
+#endif
#if (DEBUG) & DEBUG_MALLOC
/* malloc wrappers for debugging */
@@ -983,6 +988,15 @@ struct sockwakeup wkup;
&rpciod);
assert( status == RTEMS_SUCCESSFUL );
+#ifdef RTEMS_SMP
+ if ( rpciodCpuset == 0 ) {
+ rpciodCpuset = rtems_bsdnet_config.network_task_cpuset;
+ rpciodCpusetSize = rtems_bsdnet_config.network_task_cpuset_size;
+ }
+ if ( rpciodCpuset != 0 )
+ rtems_task_set_affinity( rpciod, rpciodCpusetSize, rpciodCpuset );
+#endif
+
wkup.sw_pfn = rxWakeupCB;
wkup.sw_arg = &rpciod;
assert( 0==setsockopt(ourSock, SOL_SOCKET, SO_RCVWAKEUP, &wkup, sizeof(wkup)) );