Index: xenomai/ksrc/nucleus/pod.c =================================================================== --- xenomai/ksrc/nucleus/pod.c (Revision 3081) +++ xenomai/ksrc/nucleus/pod.c (Arbeitskopie) @@ -801,8 +801,7 @@ int xnpod_start_thread(xnthread_t *threa if (!xnthread_test_state(thread, XNDORMANT)) return -EBUSY; - if (xnarch_cpus_equal(affinity, XNPOD_ALL_CPUS)) - affinity = nkaffinity; + xnarch_cpus_and(affinity, affinity, nkaffinity); xnlock_get_irqsave(&nklock, s); Index: xenomai/ksrc/nucleus/shadow.c =================================================================== --- xenomai/ksrc/nucleus/shadow.c (Revision 3081) +++ xenomai/ksrc/nucleus/shadow.c (Arbeitskopie) @@ -1297,7 +1297,7 @@ int xnshadow_map(xnthread_t *thread, xnc { xnarch_cpumask_t affinity; unsigned muxid, magic; - int prio, err, cpu; + int prio, err; if (!xnthread_test_state(thread, XNSHADOW)) return -EINVAL; @@ -1347,13 +1347,9 @@ int xnshadow_map(xnthread_t *thread, xnc xnthread_set_state(thread, XNMAPPED); xnpod_suspend_thread(thread, XNRELAX, XN_INFINITE, XN_RELATIVE, NULL); - /* Restrict affinity to a single CPU of nkaffinity or - the current set. */ - if (xnarch_cpus_equal(current->cpus_allowed, XNPOD_ALL_CPUS)) - cpu = xnarch_first_cpu(nkaffinity); - else - cpu = xnarch_first_cpu(current->cpus_allowed); - affinity = xnarch_cpumask_of_cpu(cpu); + /* Restrict affinity to a single CPU of nkaffinity & current set. */ + xnarch_cpus_and(affinity, current->cpus_allowed, nkaffinity); + affinity = xnarch_cpumask_of_cpu(xnarch_first_cpu(affinity)); set_cpus_allowed(current, affinity); if (u_completion) {