This patch:
- Adds a complete extension written in Rust, with all of the build
system logic to support Rust development as well.
- Fixes an issues on Intel systems where the MSR bitmaps were not
set up properly.
- Fixes a number of issues with UEFI.
- Fixes a number of issues with Windows, including a BSOD issue
with narrow contracts.
This patch fixes an issue that could arise if the following conditions
are met:
- set HYPERVISOR_TARGET_ARCH to Intel in CMake
- build the loader for Linux on an AMD machine
- On AMD, `make driver_quick`, then `make start` -> computer hangs
This occurs because the loader is built using the architecture of the
build machine while the hypervisor is built using the target arch set
during cmake configuration which can be different. The cpu checks are
done inside the Linux driver which will succeed and load the hypervisor
which is using Intel specific instructions causing the machine to hang
when it tries to start on AMD.
We now use the cmake HYPERVISOR_TARGET_ARCH variable in Makefile which
will keep the hypervisor and the Linux driver in sync.
CMake will warn if the BSL dependency isn't at the expected
version locally. This is useful when using a local copy with
-DFETCHCONTENT_SOURCE_DIR_BSL=<path_to_bsl> that needs to
be updated.
This patch:
- Completes all of the unit tests for the VMM
- Completes all of the unit tests for the syscall library
- Compleses all of the unit tests for the runtime library
- Completes all of the unit tests for the lib library
- Fixes a number of bugs identified during testing.
This patch:
- Fixes some bugs with Windows. It is working again
- Fixes a long-time issue with Linux on some Intel CPUs that
would cause any attempt to load the driver to crash due to
the GDT being marked as read only, and the Linux APIs
for this will triple fault your system if these APIs are
not used very quickly (a bug that probably should be
reported to Linux).
- Fixes issues with how the fail logic worked. You can not
fail inside the fail handler. New integration tests were
added to ensure that this case works as expected. In
general, the hypervisor has less assembly, and should be
more robust as a result.
- Fixes how TLB flushing is done, and adds TLB flushing APIs.
A future PR will use this code to implement free_page and
free_huge.
- Continued work on removing the heap logic that is no longer
supported.
This patch:
- Adds the missing registers CR8, DR0, DR1, DR2, DR3 and XCR0
to the microkernel. These registers are now managed by the
microkernel for all extensions.
- Fixes an issue with alloc_page and alloc_huge where allocations
were not reflected to all of the direct maps.
- Fixes an issue with fail() not sending the correct arguments.
Further testing and debugging is needed for this.
This patch clears the VMCS on init for Intel, which is needed because
the memory that is given to the the VMCS might have come from an old
VMCS that was still cached in hardware.
This patch provides
- A change to the way advance IP worked. It now also runs the
the VS.
- Added two new ABIs to support changing the active VM. This
allows exit handlers to determine which VM they want to
work with, without having to run the VM to make this change
occur
- Adds some sanity checks to some of the registers to ensure
they are configured properly by extensions.
This patch addresses the following:
- Adds a number of addition hypercall that are needed for MicroV
- Updates the code to support the changes made to the BSL including
better checking of safe integrals and narrow contracts
- Adds a lib folder to contain code shared between the kernel and
extensions where possible.
- Minor initial additions for Rust. Still lots of work to do here
This patch contains a massive number of changes that are the
result of finally adding unit/integration tests and ARM
support. ARM support moved a number of files that were duplicates
while the unit and integration tests identified a massive number
of structural issues. The cost of waiting so long to finally
add tests.