Date: Tue, 26 Oct 2010 20:10:41 -0700 From: Garrett Cooper <gcooper@FreeBSD.org> To: David Xu <davidxu@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r214409 - head/sys/kern Message-ID: <AANLkTimddEnxCLNWd%2BtWVANXCzu8ZkNHQumXCU8a_8yT@mail.gmail.com> In-Reply-To: <4CC803A8.3040602@freebsd.org> References: <201010270232.o9R2Wsu3084553@svn.freebsd.org> <AANLkTi=2dTVmB8Goj%2BNXq4F6SmZBNS3bxn8gLjmQ%2BdfV@mail.gmail.com> <4CC803A8.3040602@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 27, 2010 at 3:49 AM, David Xu <davidxu@freebsd.org> wrote: > Garrett Cooper wrote: >> >> On Tue, Oct 26, 2010 at 7:32 PM, David Xu <davidxu@freebsd.org> wrote: >>> >>> Author: davidxu >>> Date: Wed Oct 27 02:32:54 2010 >>> New Revision: 214409 >>> URL: http://svn.freebsd.org/changeset/base/214409 >>> >>> Log: >>> =A0If input parameter cpusetsize is zero, give userland size of cpuset = mask >>> =A0kernel is using. >>> >>> Modified: >>> =A0head/sys/kern/kern_cpuset.c >>> >>> Modified: head/sys/kern/kern_cpuset.c >>> >>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D >>> --- head/sys/kern/kern_cpuset.c Wed Oct 27 02:07:25 2010 =A0 =A0 =A0 = =A0(r214408) >>> +++ head/sys/kern/kern_cpuset.c Wed Oct 27 02:32:54 2010 =A0 =A0 =A0 = =A0(r214409) >>> @@ -889,6 +889,10 @@ cpuset_getaffinity(struct thread *td, st >>> =A0 =A0 =A0 int error; >>> =A0 =A0 =A0 size_t size; >>> >>> + =A0 =A0 =A0 if (uap->cpusetsize =3D=3D 0) { >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 td->td_retval[0] =3D sizeof(cpuset_t); >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return (0); >>> + =A0 =A0 =A0 } >>> =A0 =A0 =A0 if (uap->cpusetsize < sizeof(cpuset_t) || >>> =A0 =A0 =A0 =A0 =A0 uap->cpusetsize > CPU_MAXSIZE / NBBY) >>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 return (ERANGE); >> >> =A0 =A0Isn't this requirement partly broken now? >> >> =A0 =A0 [ERANGE] =A0 =A0 =A0 =A0 =A0 The cpusetsize was either preposter= ously large or >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0smaller than the kernel s= et size. >> >> =A0 =A0Why should cpuset(2) be broken in favor of people not passing val= id >> values? > > I really hate to see such a problem that userland can not figure out > what kernel is using, I try hardly to guess, but still can not find > what it is using. yes, I think the doc may need to be fixed or > another syscall is needed. Well... Jeff's code in cpuset(1) does some trivial sizeof(mask) 's, but it just passes in cpuset_t for mask. I've seen different calling conventions at the kernel level when I tried to get my brain in sync with that for a bug I was looking at a few weeks ago (and sadly, failed to some degree). These syscalls are a bit confusing though, and apart from cpuset(1) there aren't any really good examples in the sourcebase on how to use them (at least not the last time I checked)... Thanks, -Garrett
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTimddEnxCLNWd%2BtWVANXCzu8ZkNHQumXCU8a_8yT>