[PATCH] linux get affinity syscall

Jeff Roberson jroberson at chesapeake.net
Wed Mar 5 01:50:51 UTC 2008


On Mon, 3 Mar 2008, Jeff Roberson wrote:

>
> On Mon, 3 Mar 2008, Roman Divacky wrote:
>
>> On Mon, Mar 03, 2008 at 02:23:49AM -1000, Jeff Roberson wrote:
>>> 
>>> 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);

This should not be necessary anymore.

>>> 
>>> Len here is in number of bits I believe as it is for our cpusetsize.
>> 
>> no.. its specified in  bytes
>
> You are right.  So it is with fdsets.  Please hold on and I'll change cpuset 
> to be bytes as well.
>
>> 
>>>>
>>>>       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;
>>>

I checked in a change to make our cpusetsize compatible.  You should only 
have to supply CPU_LEVEL_WHICH and CPU_WHICH_PID now.  The rest of the 
arguments are compatible.

Thanks!
Jeff

>>> Our call will accept larger values and zero fill any bits we don't use.
>>> It should be safe to pass the original len.
>> 
>> ok.. will do it like that
>> 
>> thnx for the comments, can anyone test the stuff? (I have access
>> to UP only ATM)
>> 
>> roman
>> 
>


More information about the freebsd-emulation mailing list