Garrett Cooper wrote:
On Wed, Oct 27, 2010 at 3:49 AM, David Xu <davi...@freebsd.org> wrote:
Garrett Cooper wrote:
On Tue, Oct 26, 2010 at 7:32 PM, David Xu <davi...@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.





_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to