[hyperv] Do not steal ownership from the Gen 2 UEFI firmware
authorMichael Brown <mcb30@ipxe.org>
Fri, 28 Jul 2017 20:19:45 +0000 (21:19 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 28 Jul 2017 20:30:43 +0000 (21:30 +0100)
commit936657832f2262ad04bdf16b9229ce0b1d1c174f
treebc5ff1a50c989c604e462d4443822b163b2577a8
parent51a79731f6a94e48cfe355165c330ce7a6892e9a
[hyperv] Do not steal ownership from the Gen 2 UEFI firmware

We must not steal ownership from the Gen 2 UEFI firmware, since doing
so will cause an immediate system crash (most likely in the form of a
reboot).

This problem was masked before commit a0f6e75 ("[hyperv] Do not fail
if guest OS ID MSR is already set"), since prior to that commit we
would always fail if we found any non-zero guest OS identity.  We now
accept a non-zero previous guest OS identity in order to allow for
situations such as chainloading from iPXE to another iPXE, and as a
prerequisite for commit b91cc98 ("[hyperv] Cope with Windows Server
2016 enlightenments").

A proper fix would be to reverse engineer the UEFI protocols exposed
within the Hyper-V Gen 2 firmware and use these to bind to the VMBus
device representing the network connection, (with the native Hyper-V
driver moved to become a BIOS-only feature).

As an interim solution, fail to initialise the native Hyper-V driver
if we detect the guest OS identity known to be used by the Gen 2 UEFI
firmware.  This will cause the standard all-drivers build (ipxe.efi)
to fall back to using the SNP driver.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/drivers/hyperv/hyperv.c
src/include/ipxe/hyperv.h