Currently we update pm_active and invoke invept from vmx_enter_guest(),
but is no apparent reason these can't be done before the call. The
invalidation algorithm is easier to modify and audit when it's written
in C, so let's rewrite it.
This is NFC except that the VMM no longer tries to handle errors from
invept. invept can fail for two reasons:
- the invept type is not supported, but we check this in ept_init()
- the eptp value is invalid, which I believe should never happen
So with this change, an error from invept results in a panic, and I
removed VMX_INVEPT_ERROR handling.