This patch enables the ability to launch the VMM on AMD on a
single core. It uses an old hack to deal with a lack of our
own CR3, which will be removed once we have the CR3 part
added, and as a result, it only works on single core. It also
cannot be stopped, as that logic is really specific to the
way that the VMM was launched which will change once all of
this code is moved to C++, so that functionality will come
later as well.
This patch:
- Moves some of the internals of the loader around to better
support whta the loader needs to handle multiple archs.
- Fix and issue with Linux to use work queues instead of the
smp logic which ensures things like a vmalloc can be done
inside the per cpu logic.
This patch attempts to add in additional scaffolding so that
where all of the logic is located is easier to identify. To
ensure that everything works as needed, this code also adds
in the per-cpu logic that will be needed to launch on each
cpu. Some improvements were made to work without the need for
symbol lookups on Linux as well.
This patch adds to initial scaffolding needed to use the vmmctl
to talk to a the Linux loader. This will provide the starting
point to implement the Linux loader. Once the VMM is able to
start/stop from the loader on Windows and Linux, we will finish
the vmmctl logic, including tests, Perforce, etc...