tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kcpuset(9) interface



hi,

> yamt%mwd.biglobe.ne.jp@localhost (YAMAMOTO Takashi) wrote:
>> > Here is a reworked dynamic CPU set implementation for kernel (shared
>> > cpuset.c in src/common will be moved to libc) - a kcpuset(9) interface:
>> > 
>> > http://www.netbsd.org/~rmind/kcpuset_ng.diff
>> > 
>> > It supports early use while the system is cold through a fix up
>> > mechanism, see kcpuset_sysinit().  That would enable us to use kcpuset
>> > (9) in MD code, such as pmap(9).  The intention of interface is to:  1)
>> > replace hard-coded parts (e.g. limited to uint32_t or MAXCPUS constant)
>> > with a more dynamic mechanism  2) replace and unify duplicated CPU
>> > bitset code (e.g. in MIPS, PowerPC, sparc64, which have own copies).
>> 
>> thanks for working on this.
>> and sorry for commenting only on a minor point.
> 
> Your comments are always welcome. :)
> 
>> why did you change kcpuset_t to a pointer from a structure?
>> i always feel awkward to compare an opaque type with NULL.
> 
> The reason is that kcpuset_t now points directly to the bit field rather
> than opaque struct kcpuset_impl.  Do you prefer wrapping, e.g. like this:
> 
> struct kcpuset { uint32_t bitfield[0]; };
> 
> Except this is not C99..

is it necessary to expose the fact that it's an array to the API users?
if it isn't, a dummy structure tag should just work.

btw, on second thought, i think it might be worth to allow kcpuset_t be
just a scalar type and avoid dynamic allocations for ports which can't
have large MAXCPUS.  in that case, we should somehow abstract NULL
comparisons.

YAMAMOTO Takashi

> 
> -- 
> Mindaugas


Home | Main Index | Thread Index | Old Index