[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