Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Jun 2016 23:43:13 -0700
From:      Nathan Whitehorn <nwhitehorn@freebsd.org>
To:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>
Subject:   Review request: sparse CPU ID maps
Message-ID:  <57761101.3030101@freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?57761101.3030101>