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>