diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2011-05-31 15:11:43 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2011-05-31 15:11:43 +0000 |
commit | a69e106b2fac0817484b6b395a4bfcabef513310 (patch) | |
tree | 02ea093d9809e917fd683ac9ee2c87d27aa454e6 /sys/i386/pci | |
parent | 3e43795a7a21a21ba53f04ea258e3e79a7a34e9d (diff) | |
download | FreeBSD-src-a69e106b2fac0817484b6b395a4bfcabef513310.zip FreeBSD-src-a69e106b2fac0817484b6b395a4bfcabef513310.tar.gz |
On multi-core, multi-threaded PPC systems, it is important that the threads
be brought up in the order they are enumerated in the device tree (in
particular, that thread 0 on each core be brought up first). The SLIST
through which we loop to start the CPUs has all of its entries added with
SLIST_INSERT_HEAD(), which means it is in reverse order of enumeration
and so AP startup would always fail in such situations (causing a machine
check or RTAS failure). Fix this by changing the SLIST into an STAILQ,
and inserting new CPUs at the end.
Reviewed by: jhb
Diffstat (limited to 'sys/i386/pci')
-rw-r--r-- | sys/i386/pci/pci_cfgreg.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/i386/pci/pci_cfgreg.c b/sys/i386/pci/pci_cfgreg.c index ae56990..ac641a8 100644 --- a/sys/i386/pci/pci_cfgreg.c +++ b/sys/i386/pci/pci_cfgreg.c @@ -553,7 +553,7 @@ pcie_cfgregopen(uint64_t base, uint8_t minbus, uint8_t maxbus) (uintmax_t)base); #ifdef SMP - SLIST_FOREACH(pc, &cpuhead, pc_allcpu) + STAILQ_FOREACH(pc, &cpuhead, pc_allcpu) #endif { |