Skip site navigation (1)Skip section navigation (2)
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>