On Mon, Jan 28, 2013 at 02:34:32AM +0000, Mindaugas Rasiukevicius wrote:
> David Young <[email protected]> wrote:
> > I was using kcpuset(9) a little bit today and I was surprised that
> > there was not a routine or a variable representing all of the attached
> > CPUs.  I see that there is such a MI variable declared in <sys/cpu.h>,
> > kcpuset_attached.  Should it be part of the API?
> 
> There are kcpuset_attached and kcpuset_running, which are MI.  All ports
> ought to switch to them replacing MD cpu_attached/cpu_running.  They can
> be wrapped into a routine, but globals seem harmless in this case too.

It seems that if they are not wrapped in routines, they should be
declared differently, e.g.,

extern const kcpuset_t * const kcpuset_attached;

> > 
> > Also, kcpuset iterator would have been useful.  Perhaps there should be
> > one?
> > 
> 
> There was no use case, when I added it.  Can you describe your use case?
> Usually we iterate all CPUs with CPU_INFO_FOREACH() anyway (which should
> also be replaced with a MI interface, but that requires non-trivial
> invasion into all ports).

Well, iterating all CPUs would be one use case.  Another case would be
to, say, iterate the CPUs where a message-signalled interrupt (MSI)
handler should be established.

I was trying to decide the other night whether iterating a kcpuset_t w/
a for-loop was unwieldy under my _first/_next proposal:

bool more;
cpuid_t cpuid;

for (more = kcpuset_first(kcpu, &cpuid);
     more;
     more = kcpuset_next(kcpu, &cpuid)) {
        // do sumthin
}

Not great, but ok?

Dave

-- 
David Young
[email protected]    Urbana, IL    (217) 721-9981

Reply via email to