Date: Mon, 3 Mar 2008 02:23:49 -1000 (HST) From: Jeff Roberson <jroberson@chesapeake.net> To: Roman Divacky <rdivacky@freebsd.org> Cc: emulation@freebsd.org, jeff@freebsd.org Subject: Re: [PATCH] linux get affinity syscall Message-ID: <20080303022202.S920@desktop> In-Reply-To: <20080302110130.GA30563@freebsd.org> References: <20080302110130.GA30563@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 2 Mar 2008, Roman Divacky wrote: > hi.. > > jeff commited his cpu set and I tried to map that to linuxulator > version of linux_sched_getaffinity(), the current (untested) code > looks like this: > > /* > * Get affinity of a process > */ > int > linux_sched_getaffinity(struct thread *td, > struct linux_sched_getaffinity_args *args) > { > int error; > struct cpuset_getaffinity_args cga; > > if (args->len < sizeof(cpumask_t)) > return (EINVAL); Len here is in number of bits I believe as it is for our cpusetsize. > > cga.level = CPU_LEVEL_WHICH; > cga.which = CPU_WHICH_PID; > cga.id = args->pid; > cga.cpusetsize = sizeof(cpumask_t) * NBBY; > cga.mask = (long *) args->user_mask_ptr; Our call will accept larger values and zero fill any bits we don't use. It should be safe to pass the original len. > > if ((error = cpuset_getaffinity(td, &cga)) == 0) > td->td_retval[0] = sizeof(cpumask_t); > > return (error); > } Thanks, Jeff > > > can someone comment on this? thnx > > roman >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080303022202.S920>