Date: Wed, 27 Oct 2010 11:19:22 +0000 From: David Xu <davidxu@freebsd.org> To: Garrett Cooper <gcooper@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: <4CC80ABA.3080404@freebsd.org> In-Reply-To: <AANLkTimddEnxCLNWd%2BtWVANXCzu8ZkNHQumXCU8a_8yT@mail.gmail.com> References: <201010270232.o9R2Wsu3084553@svn.freebsd.org> <AANLkTi=2dTVmB8Goj%2BNXq4F6SmZBNS3bxn8gLjmQ%2BdfV@mail.gmail.com> <4CC803A8.3040602@freebsd.org> <AANLkTimddEnxCLNWd%2BtWVANXCzu8ZkNHQumXCU8a_8yT@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Garrett Cooper wrote: > 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: >>>> If input parameter cpusetsize is zero, give userland size of cpuset mask >>>> kernel is using. >>>> >>>> Modified: >>>> head/sys/kern/kern_cpuset.c >>>> >>>> Modified: head/sys/kern/kern_cpuset.c >>>> >>>> ============================================================================== >>>> --- head/sys/kern/kern_cpuset.c Wed Oct 27 02:07:25 2010 (r214408) >>>> +++ head/sys/kern/kern_cpuset.c Wed Oct 27 02:32:54 2010 (r214409) >>>> @@ -889,6 +889,10 @@ cpuset_getaffinity(struct thread *td, st >>>> int error; >>>> size_t size; >>>> >>>> + if (uap->cpusetsize == 0) { >>>> + td->td_retval[0] = sizeof(cpuset_t); >>>> + return (0); >>>> + } >>>> if (uap->cpusetsize < sizeof(cpuset_t) || >>>> uap->cpusetsize > CPU_MAXSIZE / NBBY) >>>> return (ERANGE); >>> Isn't this requirement partly broken now? >>> >>> [ERANGE] The cpusetsize was either preposterously large or >>> smaller than the kernel set size. >>> >>> Why should cpuset(2) be broken in favor of people not passing valid >>> 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 > The problem is that the size of cpuset is not fixed, it is tunable by the recompiling kernel with different parameter, so if you have a program which you want to adapt it to use any size of cpuset, it should be able to get the size the kernel is using, if you don't have source code of the program, you can not compile it with new parameter, then there is trouble.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CC80ABA.3080404>