diff --git a/lib/libthr/thread/thr_attr.c b/lib/libthr/thread/thr_attr.c --- a/lib/libthr/thread/thr_attr.c +++ b/lib/libthr/thread/thr_attr.c @@ -599,9 +599,9 @@ size_t len; len = sizeof(kern_cpuset_size); - if (sysctlbyname("kern.sched.cpusetsize", &kern_cpuset_size, + if (sysctlbyname("kern.sched.cpusetsizemin", &kern_cpuset_size, &len, NULL, 0)) - PANIC("failed to get sysctl kern.sched.cpusetsize"); + PANIC("failed to get sysctl kern.sched.cpusetsizemin"); } return (kern_cpuset_size); diff --git a/sys/kern/kern_cpuset.c b/sys/kern/kern_cpuset.c --- a/sys/kern/kern_cpuset.c +++ b/sys/kern/kern_cpuset.c @@ -141,11 +141,27 @@ SYSCTL_INT(_kern_sched, OID_AUTO, cpusetsize, CTLFLAG_RD | CTLFLAG_CAPRD, SYSCTL_NULL_INT_PTR, sizeof(cpuset_t), "sizeof(cpuset_t)"); +static int sysctl_kern_sched_cpusetsizemin(SYSCTL_HANDLER_ARGS); + +/* Return the minimum size of cpuset_t allowed by the kernel */ +SYSCTL_PROC(_kern_sched, OID_AUTO, cpusetsizemin, CTLFLAG_RD | CTLFLAG_CAPRD | + CTLTYPE_INT | CTLFLAG_MPSAFE, NULL, 0, sysctl_kern_sched_cpusetsizemin, "I", + "The minimum size of cpuset_t allowed by the kernel"); + cpuset_t *cpuset_root; cpuset_t cpuset_domain[MAXMEMDOM]; static int domainset_valid(const struct domainset *, const struct domainset *); +static int +sysctl_kern_sched_cpusetsizemin(SYSCTL_HANDLER_ARGS) +{ + int cpusetsize; + + cpusetsize = howmany(mp_maxid, NBBY); + return (SYSCTL_OUT(req, &cpusetsize, sizeof(cpusetsize))); +} + /* * Find the first non-anonymous set starting from 'set'. */