From 7c192db1ba9af632bb42c784fa5ed875eff9f5c8 Mon Sep 17 00:00:00 2001 From: "David B. Kinder" Date: Mon, 29 Oct 2018 12:31:41 -0700 Subject: [PATCH] doc: update HLD VT-d transcode, edit, and upload HLD 0.7 section 3.8 (VT-d) Tracked-on: #1643 Signed-off-by: David B. Kinder --- doc/developer-guides/hld/hld-hypervisor.rst | 3 +- doc/developer-guides/hld/hv-vt-d.rst | 372 ++++++++++++++++++ .../hld/images/vt-d-image19.png | Bin 0 -> 1930 bytes .../hld/images/vt-d-image40.png | Bin 0 -> 7966 bytes .../hld/images/vt-d-image44.png | Bin 0 -> 48807 bytes .../hld/images/vt-d-image90.png | Bin 0 -> 7690 bytes 6 files changed, 374 insertions(+), 1 deletion(-) create mode 100644 doc/developer-guides/hld/hv-vt-d.rst create mode 100644 doc/developer-guides/hld/images/vt-d-image19.png create mode 100644 doc/developer-guides/hld/images/vt-d-image40.png create mode 100644 doc/developer-guides/hld/images/vt-d-image44.png create mode 100644 doc/developer-guides/hld/images/vt-d-image90.png diff --git a/doc/developer-guides/hld/hld-hypervisor.rst b/doc/developer-guides/hld/hld-hypervisor.rst index 17fd4f4f9..6ca6fb440 100644 --- a/doc/developer-guides/hld/hld-hypervisor.rst +++ b/doc/developer-guides/hld/hld-hypervisor.rst @@ -13,4 +13,5 @@ Hypervisor high-level design I/O Emulation Physical Interrupt Timer - Virtual Interrupt + Virtual Interrupt + VT-d diff --git a/doc/developer-guides/hld/hv-vt-d.rst b/doc/developer-guides/hld/hv-vt-d.rst new file mode 100644 index 000000000..cd097df0a --- /dev/null +++ b/doc/developer-guides/hld/hv-vt-d.rst @@ -0,0 +1,372 @@ +.. _vt-d-hld: + +VT-d +#### + +VT-d stands for Intel Virtual Technology for Directed IO, and provides +hardware capabilities to assign I/O devices to VMs and extending the +protection and isolation properties of VMs for I/O operations. + +VT-d provides the following main functions: + +- **DMA remapping**: for supporting address translations for DMA from + devices. + +- **Interrupt remapping**: for supporting isolation and routing of + interrupts from devices and external interrupt controllers to + appropriate VMs. + +- **Interrupt posting**: for supporting direct delivery of virtual + interrupts from devices and external controllers to virtual + processors. + +ACRN hypervisor supports DMA remapping that provides address translation +capability for PCI pass-through devices, and second-level translation, +which applies to requests-without-PASID. ACRN does not support +First-level / nested translation. + +DMAR Engines Discovery +********************** + +DMA Remapping Report ACPI table +=============================== + +For generic platforms, ACRN hypervisor retrieves DMAR information from +the ACPI table, and parses the DMAR reporting structure to discover the +number of DMA-remapping hardware units present in the platform as well as +the devices under the scope of a remapping hardware unit, as shown in +:numref:`dma-remap-report`: + +.. figure:: images/vt-d-image90.png + :align: center + :name: dma-remap-report + + DMA Remapping Reporting Structure + +Pre-parsed DMAR information +=========================== + +For specific platforms, ACRN hypervisor uses pre-parsed DMA remapping +reporting information directly to save time for hypervisor boot-up. + +DMA remapping unit for integrated graphics device +================================================= + +Generally, there is a dedicated remapping hardware unit for the Intel +integrated graphics device. ACRN implements GVT-g for graphics, but +GVT-g is not compatible with VT-d. The remapping hardware unit for +graphics device is disabled on ACRN if GVT-g is enabled. If the graphics +device needs to pass-through to a VM, then the remapping hardware unit +must be enabled. + +DMA Remapping +************* + +DMA remapping hardware is used to isolate device access to memory, +enabling each device in the system to be assigned to a specific domain +through a distinct set of paging structures. + +Domains +======= + +A domain is abstractly defined as an isolated environment in the +platform, to which a subset of the host physical memory is allocated. +The memory resource of a domain is specified by the address translation +tables. + +Device to Domain Mapping Structure +================================== + +VT-d hardware uses root-table and context-tables to build the mapping +between devices and domains as shown in :numref:`vt-d-mapping`. + +.. figure:: images/vt-d-image44.png + :align: center + :name: vt-d-mapping + + Device to Domain Mapping structures + +The root-table is 4-KByte in size and contains 256 root-entries to cover +the PCI bus number space (0-255). Each root-entry contains a +context-table pointer to reference the context-table for devices on the +bus identified by the root-entry, if the present flag of the root-entry +is set. + +Each context-table contains 256 entries, with each entry corresponding +to a PCI device function on the bus. For a PCI device, the device and +function numbers (8-bits) are used to index into the context-table. Each +context-entry contains a Second-level Page-table Pointer, which provides +the host physical address of the address translation structure in system +memory to be used for remapping requests-without-PASID processed through +the context-entry. + +For a given Bus, Device, and Function combination as shown in +:numref:`bdf-passthru`, a pass-through device can be associated with +address translation structures for a domain. + +.. figure:: images/vt-d-image19.png + :align: center + :name: bdf-passthru + + BDF Format of Pass-through Device + +Refer to the `VT-d spec`_ for the more details of Device to domain +mapping structures. + +.. _VT-d spec: + https://software.intel.com/sites/default/files/managed/c5/15/vt-directed-io-spec.pdf + +Address Translation Structures +============================== + +On ACRN, EPT table of a domain is used as the address translation +structures for the devices assigned to the domain, as shown +:numref:`vt-d-DMA`. + +.. figure:: images/vt-d-image40.png + :align: center + :name: vt-d-DMA + + DMA Remapping Diagram + +When the device attempts to access system memory, the DMA +remapping hardware intercepts the access, utilizes the EPT table of the +domain to determine whether the access is allowed, and translates the DMA +address according to the EPT table from guest physical address (GPA) to +host physical address (HPA). + +Domains and Memory Isolation +============================ + +There are no DMA operations inside the hypervisor, so ACRN doesn’t +create a domain for the hypervisor. No DMA operations from pass-through +devices can access the hypervisor memory. + +ACRN treats each virtual machine (VM) as a separate domain. For a VM, +there is a EPT table for Normal world, and there may be a EPT table for +Secure World. Secure world can access Normal World's memory, but Normal +world cannot access Secure World's memory. + +VM0 domain + VM0 domain is created when ithe hypervisor creates VM0 for the + Service OS. + + IOMMU uses the EPT table of Normal world of VM0 as the address + translation structures for the devices in VM0 domain. The Normal world’s + EPT table of VM0 doesn’t include the memory resource of ithe hypervisor + and Secure worlds if any. So the devices in VM0 domain can’t access the + memory belong to hypervisor or secure worlds. + +Other domains + Other VM domains will be created when hypervisor creates User OS. One + domain for each User OS. + + IOMMU uses the EPT table of Normal world of a VM as the address + translation structures for the devices in the domain. The Normal world’s + EPT table of the VM only allows devices to access the memory + allocated for Normal world of the VM. + +Page-walk coherency +=================== + +For the VT-d hardware, which doesn’t support page-walk coherency, +hypervisor needs to make sure the updates of VT-d tables are synced in +memory: + +- Device to Domain Mapping Structures, including Root-entries and + Context-entries + +- EPT table of a VM. + +ACRN will flush the related cache line after updates of these structures +if the VT-d hardware doesn’t support page-walk coherency. + +Super-page support +================== + +ACRN VT-d reuses the EPT table as address a translation table. VT-d capability +for super-page support should be identical with the usage of EPT table. + +Snoop control +============= + +If VT-d hardware supports snoop control, it allows VT-d to control to +ignore the “no-snoop attribute” in PCI-E transactions. + +The following table shows the snoop behavior of DMA operation controlled by the +combination of: + +- Snoop Control capability of VT-d DMAR unit +- The setting of SNP filed in leaf PTE +- No-snoop attribute in PCI-e request + +.. list-table:: + :widths: 25 25 25 25 + :header-rows: 1 + + * - SC cap of VT-d + - SNP filed in leaf PTE + - No-snoop attribute in request + - Snoop behavior + + * - 0 + - 0 (must be 0) + - no snoop + - No snoop + + * - 0 + - 0 (must be 0) + - snoop + - Snoop + + * - 1 + - 1 + - snoop / no snoop + - Snoop + + * - 1 + - 0 + - no snoop + - No snoop + + * - 1 + - 0 + - snoop + - Snoop + +ACRN enable Snoop Control by default if all enabled VT-d DMAR units +support Snoop Control by setting bit 11 of leaf PTE of EPT table. Bit 11 +of leaf PTE of EPT is ignored by MMU. So no side effect for MMU. + +If one of the enabled VT-d DMAR units doesn’t support Snoop Control, +then Bit 11 of leaf PET of EPT is not set since the field is treated as +reserved(0) by VT-d hardware implementations not supporting Snoop +Control. + +Initialization +************** + +During hypervisor initialization, it registers DMAR units on the +platform according to the reparsed information or DMAR table. There may +be multiple DMAR units on the platform, ACRN allows some of the DMAR +units to be ignored. If some DMAR unit(s) are marked as ignored, they +would not be enabled. + +Hypervisor creates VM0 domain using the Normal World’s EPT table of VM0 +as address translation table when creating VM0 as Service OS. And all +PCI devices on the platform are added to VM0 domain. Then enable DMAR +translation for DMAR unit(s) if they are not marked as ignored. + +Device assignment +***************** + +All devices are initially added to VM0 domain. +To assign a device means to assign the device to an User OS. The device +is remove from VM0 domain and added to the VM domain related to the User +OS, which changes the address translation table from EPT of VM0 to EPT +of User OS for the device. + +To un-assign a device means to un-assign the device from an User OS. The +device is remove from the VM domain related to the User OS, then added +back to VM0 domain, which changes the address translation table from EPT +of User OS to EPT of VM0 for the device. + +Power Management support for S3 +******************************* + +During platform S3 suspend and resume, the VT-d register values will be +lost. ACRN VT-d provide APIs to be called during S3 suspend and resume. + +During S3 suspend, some register values are saved in the memory, and +DMAR translation is disabled. During S3 resume, the register values +saved are restored. Root table address register is set. DMAR translation +is enabled. + +All the operations for S3 suspend and resume are performed on all DMAR +units on the platform, except for the DMAR units marked ignored. + +Error Handling +************** + +ACRN VT-d supports DMA remapping error reporting. ACRN VT-d requests a +IRQ / vector for DMAR error reporting. A DMAR fault handler is +registered for the IRQ. DMAR unit supports report fault event via MSI. +When a fault event occurs, a MSI is generated, so that the DMAR fault +handler will be called to report error event. + +Data structures and interfaces +****************************** + +.. note:: Needs API reference to include/arch/x86/vtd.h + +initialization and deinitialization +=================================== + +The following APIs are provided during initialization and +deinitialization: + +- void init_iommu(void) + +Register DMAR units on the platform according to the reparsed +information or DMAR table. + +- void init_iommu_vm0_domain(struct vm \*vm0) + + Create VM0 domain using the Normal World’s EPT table of VM0 as address + translation table. Add all PCI devices on the platform to VM0 domain. Then enable + DMAR translation. + +- void destroy_iommu_domain(struct iommu_domain \*domain) + + Destroy the iommu domain. + +VT-d +==== + +The following API are provided during runtime: + +- void suspend_iommu(void) + + Suspend IOMMU. + +- void resume_iommu(void) + + Resume IOMMU. + +- struct iommu_domain \*create_iommu_domain(uint16_t vm_id, + uint64_t translation_table, uint32_t addr_width) + + Create a iommu domain for a VM specified by vm_id. + translation_table should be the physical address of EPT table of the VM + specified by the vm_id, the value cannot be NULL. + Return the iommu_domain created for the VM if not NULL. + Error if the return NULL. + +- int assign_iommu_device(struct iommu_domain \*domain, uint8_t + bus, uint8_t devfun) + + Assign a device specified by bus & devfun to a iommu domain. The device + is removed from VM0 domain and added to the domain specified. + + domain: specified the domain the device should be assigned to. + + bus: the 8-bit bus value of the pass-through device. + + devfun: the 8-bit device function value of the pass-through device. + + return: return 0 if success, other if error. + +- int unassign_iommu_device(struct iommu_domain \*domain, + + uint8_t bus, uint8_t devfun); + + Unassign a device specified by bus & devfun from a iommu domain. + + domain: specified the domain the device should be removed from. + + bus: the 8-bit bus value of the pass-through device. + + devfun: the 8-bit device function value of the pass-through device. + + return: return 0 if success, other if error. + diff --git a/doc/developer-guides/hld/images/vt-d-image19.png b/doc/developer-guides/hld/images/vt-d-image19.png new file mode 100644 index 0000000000000000000000000000000000000000..1448b0179ae61377decacbd84f89d40a328a3df3 GIT binary patch literal 1930 zcmb7Fc{H2p9u6@+V+kEImiV+(RjaghE%}Vt)q3p)wQI*xTjJ872@=sNikjAPOKe^A z-o{oUr9@(8A+rh z3X;B9g@g%QJ{XCWjWtW^;6hE`_6aZq3RDP)#eEy8JPI9!_|gokVqdd$(w&9AqIu zg8%!FVX{U?NBMmIv6fSv9UW*idQiig%V{`~7kH2G9k8+Soz>E%7S77wA-RyjBb=3D z|ACB_$(VVcJ9bniJlBkO=Qa&N4-Wmm?4i z$TaLmVJ&<$2=M<3Atnkdq{Se?ZG3qukVU59{{j<3LsJtH5>iw1FaV9SGS5pT5Qy+Z zg-~5*)N+rh+4qWBlhM#Z!kg`SjY9V(RC2maJ+y9NLmL9?n`uxz$+&ublvT*JC zQ0Rj+`h^=z5o3D>h zR!9#_UDLaXjR8xY9RHlqQ&2IOM8_aql(1^)fU7j)TAE4iAxXHs(yswVA^+J3tB&3< z9itPrJ{}&Dr)3?H1}3xpFnT8Ibw2W$gwcjieaAlLz4XrVQ7M4|+>mSFUQDae`q`{W z{DQ1h;%rO~YUZ{ve?KLja-D!p`x^i#-xQ!lfC@7q>k$Lo7(;5(Iq3c?q=gnDM@C#I zUZO2Dro?tLQNn%0dY-JAT#4u8|!A#lNY;r&S4&8P9A`JNIdYK2m@m>-4R}Te6V;2Bnh6L*IRDy(BFRBEb)Eebv3^!+7y> z{fKQ%bAx7aFjFwsvaQQlyJym_ka35nCflfs1m;k~$=muFB(l*fZ}8fBb-C8){=)*V zJp;xnGh8q)|9NiQ2(feMsyr2{P(x#s9;y?1>jB_{J8b5J7Rrv0qY~#xnK{tTE~-rU z$GB`}BOfUj97jK$R;34VGw7St5{9J{c$AE!O1Rhxd)6qK5>PxbPP) zxx64V&7F@=Too6ONo!C)#ZsVCA2u(5nd-%ttP162Vn?S2HWi-=>P&f@)&a-3d4cv{ zeq2lz3zb1IEtLV9#~l}N!mFJ1)cuTW&UE6zLw@|2xxmJk49AYKFD_B3jlGQc4@7u@ z%Iu3lXq|_M1>d@1<9x;&_N1zX$ zd0N}YGOJ4x1-c~O8`B;cN-0zGw%c;g>>gb!J51iV+THIasFVR)@MC!sSLTn(Q6tN( zqy2s^--vsknvM;#E0EVTt)d zm(Z@p$42T=;&@D?hl`jCFzEor! z`0cNV9F^q!)4TPtRqfPvc(BPav)0#t;+%-SyxRJV6jc%VU=>Dz0sQS^ysLi^)cn}d zrk2I>d(o*C+x@!eSD61;+<;?aE%-rWvO6N)mo8G1!Dd$$0#8D~Z5cLBYXKpgn=0 zxTFoE<0LGwq@*NQS65#Wrt2qzorZ=6ZG@ba;#n+FP85((|JV3sEO@_3Q)!t?TN8FH N%;AEIO}$k}#_w-%kmLXW literal 0 HcmV?d00001 diff --git a/doc/developer-guides/hld/images/vt-d-image40.png b/doc/developer-guides/hld/images/vt-d-image40.png new file mode 100644 index 0000000000000000000000000000000000000000..d32cea32ddc9b0bdc7e5b885e0c28352418834c0 GIT binary patch literal 7966 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 literal 0 HcmV?d00001 diff --git a/doc/developer-guides/hld/images/vt-d-image44.png b/doc/developer-guides/hld/images/vt-d-image44.png new file mode 100644 index 0000000000000000000000000000000000000000..c680cf8fd5a28d8b7744fe9f7d5d76bc9b48e8d3 GIT binary patch literal 48807 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