On Wed, 20 Feb 2008, Jeff Roberson wrote:

> I have the following api working:
>
> /*
> * Parameters for the level argument to getaffinity.
> */
> #define CPU_LEVEL_SYS 1 /* All system cpus. */
> #define CPU_LEVEL_AVAIL 2 /* Available cpus for which. */
> #define CPU_LEVEL_WHICH 3 /* Actual mask for which. */
>
> /*
> * Parameters for the which argument to {get,set}affinity.
> */
> #define CPU_WHICH_TID 1 /* Specifies a thread id. */
> #define CPU_WHICH_PID 2 /* Specifies a process id. */
> #define CPU_WHICH_SET 3 /* Specifies a set id. */
>
>
> Along with a CPU_CLR, CPU_COPY, CPU_ISSET, CPU_SET, CPU_ZERO for manipulating
> the sets.
>
> int getaffinity(int level, int which, int id, int cpusetsize, long *mask);
> int setaffinity(int which, int id, int cpusetsize, long *mask);
>
> The get call has a notion of 'level' which allows us to fetch different
> masks. The system set is all processors in the system. The available set is
> the set of cpus available to the tid/pid in the 'which' argument. An
> application would fetch the avail set and then potentially reduce it.
>
> The setaffinity call doesn't have a level because the avail/sys sets are
> immutable. You can only set things which can be specified by the which
> argument.


Everything looks pretty good to me, but if you add the 'level' to
setaffinity(), you might be able to say "run on any ONE of the CPUs
in the cpuset - I don't care which one".

--
DE
_______________________________________________
freebsd-arch@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"