Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: cpu_set_t: what's the equivalent for NetBSD?
In article <20090115161528.GP845%danbala.tuwien.ac.at@localhost>,
Thomas Klausner <wiz%NetBSD.org@localhost> wrote:
>Hi!
>
>Can someone please tell me how the following code should be rewritten
>for NetBSD?
>
>I tried replacing cpu_set_t with cpuset_t, but then the size wasn't
>known for cmask, and CPU_ZERO and CPU_SET don't exist.
>
>The code is from sdlmame (wip/sdlmame).
>
>//============================================================
>// osd_thread_cpu_affinity
>//============================================================
>
>int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
>{
>#if !defined(NO_THREAD_COOPERATIVE) && !defined(NO_AFFINITY_NP)
> cpu_set_t cmask;
> pthread_t lthread;
> int bitnum;
>
> CPU_ZERO(&cmask);
> for (bitnum=0; bitnum<32; bitnum++)
> if (mask & (1<<bitnum))
> CPU_SET(bitnum, &cmask);
>
> if (thread == NULL)
> lthread = pthread_self();
> else
> lthread = thread->thread;
>
> if (pthread_setaffinity_np(lthread, sizeof(cmask), &cmask) <0)
> {
> /* Not available during link in all targets */
> fprintf(stderr, "error %d setting cpu affinity to mask %08x",
> errno, mask);
> return FALSE;
> }
> else
> return TRUE;
>#else
> return TRUE;
>#endif
>}
>
>Thank you,
> Thomas
cpuset_t *cmask = cpuset_create();
cpuset_zero(cmask);
for (bitnum=0; bitnum<32; bitnum++)
if (mask & (1<<bitnum))
cpuset_set(bitnum, cmask);
...
cpuset_destroy(cmask);
christos
Home |
Main Index |
Thread Index |
Old Index