* If the Virtual NMIs execution control is '1' then the logical processor * tracks virtual-NMI blocking in the Guest Interruptibility-state field of * the VMCS. An IRET instruction in VMX non-root operation will remove any * virtual-NMI blocking. * * This unblocking occurs even if the IRET causes a fault. In this case the * hypervisor needs to restore virtual-NMI blocking before resuming the
| 1610 | * hypervisor needs to restore virtual-NMI blocking before resuming the guest. |
| 1611 | */ |
| 1612 | static void |
| 1613 | vmx_restore_nmi_blocking(struct vmx *vmx, int vcpuid) |
| 1614 | { |
| 1615 | uint32_t gi; |
| 1616 | |
| 1617 | VCPU_CTR0(vmx->vm, vcpuid, "Restore Virtual-NMI blocking"); |
| 1618 | gi = vmcs_read(VMCS_GUEST_INTERRUPTIBILITY); |
| 1619 | gi |= VMCS_INTERRUPTIBILITY_NMI_BLOCKING; |
| 1620 | vmcs_write(VMCS_GUEST_INTERRUPTIBILITY, gi); |
| 1621 | } |
| 1622 | |
| 1623 | static void |
| 1624 | vmx_clear_nmi_blocking(struct vmx *vmx, int vcpuid) |
no test coverage detected