Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 24 Jul 2013 13:36:53 -0500
From: Rob Landley <rob@...dley.net>
To: musl@...ts.openwall.com
Cc: musl@...ts.openwall.com
Subject: Re: Proposed roadmap to 1.0

On 07/17/2013 11:02:05 AM, Rich Felker wrote:
> > - Affinity/cpuset interfaces.
> 
> Last time I started working on this, I got sick of it before I got
> very far. There are just so many tedious macros/inline-functions to
> implement. I was also frustrated with having to put so much code in a
> public header. For this, I'd really like some help on both:
> 
> - ideas for making it less hideous, and
> - actually writing it out.

For toybox I ignored the glibc interfaces and just used the raw  
syscall, manipulating the arguments myself with bit shifts. Let's see...

Wow the man 3 CPU_SET macros are crazy. Very first one, CPU_ZERO() does  
not specify the size of the array. So how does it determine it? It's  
gotta be getting it from cpu_set_t which is defined in  
/usr/include/*/bits/sched.h:

   /* Data structure to describe CPU mask.  */
   typedef struct
   {
     __cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
   } cpu_set_t;

So what's _NCPUBITS?

   /* Size definition for CPU sets.  */
   # define __CPU_SETSIZE  1024
   # define __NCPUBITS     (8 * sizeof (__cpu_mask))

   /* Type for array elements in 'cpu_set_t'.  */
   typedef unsigned long int __cpu_mask;

So... it's hardwired to 1024 cpus.

I don't think there _is_ a way to make this non-ugly. What actually  
uses this?

Rob

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.