Cleaning up AP startup routines. This is a mix of changes required to make PowerNV running and to modify the code to be more robust. Previously, some races were seen if more than 90CPUs were online.
Details
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
This is conceptually unworkable, for two core reasons. First, the PIR register is unreliable when set, especially on VMs in the face of movement to another core. We've tried to remove all uses of PIR in code that does not know it is reliable (all generic code) for this reason. The real kicker, though, is that on some of our supported hardware (Apple G4 machines, for instance), PIR needs to be set by *us* and all CPUs boot with identical PIR. In the face of this, the proposed mechanism simply cannot work.
Sounds reasonable. I've removed all references to PIR and left the previous PCPU-assignment mechanism intact.
This looks great.
We could also add in a platform method or two for getting the PCPU for a processor, potentially based on an argument from firmware (I think OPAL allows this?), which would allow parallel startup on systems that support it. But maybe not worth the trouble...