Review request: sparse CPU ID maps
Nathan Whitehorn
nwhitehorn at freebsd.org
Fri Jul 1 06:43:15 UTC 2016
I have been working on fixing PR 210106
(https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=210106) and have run
into the fact that several pieces of the kernel, notably parts of
subr_taskqueue.c, require that CPU IDs be dense in the range [0,
mp_ncpus), which the kernel does not guarantee, for example in the case
of CPUs with hyperthreading in which the threading is disabled. This is
leading to hangs in late boot in -CURRENT.
I've prepared the following patch, which fixes PR 210106, but I would
like a few more eyeballs on it before committing it. It fixes most of
the bogus uses of mp_ncpus in the kernel, but not all: doing grep -R '<
mp_ncpus' /sys | wc -l gives 52 remaining instances of loops in [0,
mp_ncpus) or [1, mp_ncpus), most or all of which should instead be
CPU_FOREACH(), but none of which I feel comfortable changing (36 are in
ARM code for hardware I don't have access to).
The patch lives here:
http://people.freebsd.org/~nwhitehorn/sparse_cpu_ids.diff
-Nathan
More information about the freebsd-hackers
mailing list