Whenever a new kernel thread is spawned, explicitly clear any CPU affinity

set on the new thread.  This prevents the thread from inadvertently
inheriting affinity from a random sibling.

Submitted by:	attilio
Tested by:	pho
MFC after:	1 week
This commit is contained in:
Ryan Stone 2012-02-04 16:49:29 +00:00
parent cf8b832511
commit 312ac3a23a

View File

@ -29,6 +29,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/cpuset.h>
#include <sys/kthread.h>
#include <sys/lock.h>
#include <sys/mutex.h>
@ -117,6 +118,9 @@ kproc_create(void (*func)(void *), void *arg,
/* call the processes' main()... */
cpu_set_fork_handler(td, func, arg);
/* Avoid inheriting affinity from a random parent. */
cpuset_setthread(td->td_tid, cpuset_root);
thread_lock(td);
TD_SET_CAN_RUN(td);
sched_prio(td, PVM);
@ -299,6 +303,9 @@ kthread_add(void (*func)(void *), void *arg, struct proc *p,
tidhash_add(newtd);
/* Avoid inheriting affinity from a random parent. */
cpuset_setthread(newtd->td_tid, cpuset_root);
/* Delay putting it on the run queue until now. */
if (!(flags & RFSTOPPED)) {
thread_lock(newtd);