acrn-hypervisor/hypervisor
Binbin Wu 4ae350a091 hv: vmcs: pass-through instruction INVPCID to VM
According to SDM Vol.3 Section 25.3, behavior of the INVPCID
instruction is determined first by the setting of the “enable
INVPCID” VM-execution control:
- If the “enable INVPCID” VM-execution control is 0, INVPCID
  causes an invalid-opcode   exception (#UD).
- If the “enable INVPCID” VM-execution control is 1, treatment
  is based on the setting of the “INVLPG exiting” VM-execution
  control:
  * If the “INVLPG exiting” VM-execution control is 0, INVPCID
    operates normally.
  * If the “INVLPG exiting” VM-execution control is 1, INVPCID
    causes a VM exit.

In current implementation, hypervisor doesn't set “INVLPG exiting”
VM-execution control, this patch sets “enable INVPCID” VM-execution
control to 1 when the instruction is supported by physical cpu.
If INVPCID is supported by physical cpu, INVPCID will not cause VM
exit in VM.
If INVPCID is not supported by physical cpu, INVPCID causes an #UD
in VM.
When INVPCID is passed-through to VM, According to SDM Vol.3 28.3.3.1,
INVPCID instruction invalidates linear mappings and combined mappings.
They are required to do so only for the current VPID.
HV assigned a unique vpid for each vCPU, if guest uses wrong PCID,
it would not affect other vCPUs.

Tracked-On: #4296
Signed-off-by: Binbin Wu <binbin.wu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
2020-01-02 10:47:34 +08:00
..
acpi_parser HV: parse default pci mmcfg base 2019-12-02 16:20:24 +08:00
arch/x86 hv: vmcs: pass-through instruction INVPCID to VM 2020-01-02 10:47:34 +08:00
boot HV: search rsdp from e820 acpi reclaim region 2019-12-25 13:50:11 +08:00
bsp/ld hv: dmar_parse: remove dynamic memory allocation 2019-05-10 11:33:37 +08:00
common hv: vpci: an assign PT device should support FLR or PM reset 2019-12-30 13:43:07 +08:00
debug HV: rename CONFIG_MAX_PCPU_NUM to MAX_PCPU_NUM 2019-12-12 13:49:28 +08:00
dm hv: vpci: an assign PT device should support FLR or PM reset 2019-12-30 13:43:07 +08:00
hw hv: pci: add PCIe PM reset check 2019-12-30 13:43:07 +08:00
include hv: vpci: an assign PT device should support FLR or PM reset 2019-12-30 13:43:07 +08:00
lib hv:tiny cleanup 2019-09-05 09:58:47 +08:00
pre_build HV: Kconfig: remove MAX_VCPUS_PER_VM in Kconfig 2019-12-12 13:49:28 +08:00
release hv: uart: enable early boot uart 2019-07-26 09:10:06 +08:00
scenarios acrn-config: some cleanup for logical partition mode Linux bootargs 2019-12-25 13:46:37 +08:00
scripts Makefile: move .mk file to hv scripts folder 2019-11-13 16:05:30 +08:00
Kconfig
MAINTAINERS
Makefile hv: sched: use hypervisor configuration to choose scheduler 2019-12-11 09:31:39 +08:00
README.rst doc: fix utf-8 punctuation, branding, spelling 2019-03-14 09:13:58 -07:00

README.rst

ACRN Hypervisor
###############

The open source `Project ACRN`_ defines a device hypervisor reference stack and
an architecture for running multiple software subsystems, managed securely, on
a consolidated system by means of a virtual machine manager. It also defines a
reference framework implementation for virtual device emulation, called the
"ACRN Device Model".

The ACRN Hypervisor is a Type 1 reference hypervisor stack, running directly on
the bare-metal hardware, and is suitable for a variety of IoT and embedded
device solutions. The ACRN hypervisor addresses the gap that currently exists
between datacenter hypervisors, and hard partitioning hypervisors. The ACRN
hypervisor architecture partitions the system into different functional
domains, with carefully selected guest OS sharing optimizations for IoT and
embedded devices.

You can find out more about Project ACRN on the `Project ACRN documentation`_
website.

.. _`Project ACRN`: https://projectacrn.org
.. _`ACRN Hypervisor`: https://github.com/projectacrn/acrn-hypervisor
.. _`Project ACRN documentation`: https://projectacrn.github.io/