From 2302fc09080bad51c73f293294e19fd4db464eb0 Mon Sep 17 00:00:00 2001 From: Open-IOV Date: Wed, 23 Sep 2026 05:44:08 -0400 Subject: Open-IOV: initial public release Open-IOV virtualizes NVIDIA GPUs so that unmodified guest drivers run with real GPU functionality - CUDA first, 3D and video to follow - on unmodified hosts, without a proprietary vGPU license and without patching any driver, firmware or hypervisor. Core principle: emulate the interface, pass through the work. kernel/ open-iov-vfio.ko - host VFIO mdev driver: virtual GPU device (PCI config space, BAR shadows, MSI-X), GSP boot emulation, GSP-RM message-queue/RPC emulation, memory model (GPU-VA to guest-PA discovery) and the semaphore-completion service that advances guest UVM progress. userspace/ libiov.so management API and examples. tools/ guest diagnostics, firmware analysis wrappers, RM probes. scripts/ stack manager, VM harness, build/load/test automation. config/ hardware/version profiles (the portability surface). docs/ documentation tree - start at docs/README.md. wiki/ long-form firmware and protocol deep dives. Status: initialization works end to end for a stock 570.144 Linux guest on Turing (TU104): driver probe, nvidia-smi, the full GSP-RM control battery, object creation and the early CUDA/UVM start-up path. GPU work forwarding - the step that makes CUDA kernels execute on real hardware - is the active work item; see docs/04-implementation/01-known-knowns-and-unknowns.md. License: BSD-3-Clause for the project; GPL-2.0 for kernel modules that link GPL-only kernel interfaces. See LICENSE and docs/09-reference/legal-and-licensing.md. --- wiki/Address-Reference.md | 206 +++ wiki/BAR-Emulation-Specification.md | 321 ++++ wiki/Error-Codes.md | 198 +++ wiki/GPU_Driver_Internals.md | 1084 ++++++++++++ wiki/GPU_Firmware.md | 484 ++++++ wiki/GPU_SBOM.md | 258 +++ wiki/GSP-570.144W-Firmware-Analysis.md | 305 ++++ wiki/GSP-RPC-Emulation.md | 227 +++ wiki/Glossary.md | 163 ++ wiki/Migration-Protocol.md | 395 +++++ wiki/README.md | 21 + wiki/RPC-Message-Format.md | 316 ++++ wiki/Virtual_IO_Internals.md | 1736 ++++++++++++++++++++ wiki/WPR-Management.md | 288 ++++ wiki/open-iov.org/api.php?action=rsd | 1 + wiki/open-iov.org/favicon.ico.html | 245 +++ .../images/0/0b/Intel_GVT-g_Capabilities.png | Bin 0 -> 178799 bytes .../0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png | Bin 0 -> 46427 bytes .../1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png | Bin 0 -> 23772 bytes .../images/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 61809 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 19546 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 58827 bytes ...status_information_for_an_Intel_DG2_device..png | Bin 0 -> 139460 bytes .../images/2/2b/Telescope_LG-Proxy.png | Bin 0 -> 218331 bytes .../images/3/33/IOCTL_set_VFIO_container.png | Bin 0 -> 115364 bytes .../3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png | Bin 0 -> 197659 bytes .../images/3/3f/Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 112779 bytes .../images/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 111549 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 58285 bytes wiki/open-iov.org/images/4/43/VFIO_Diagram.png | Bin 0 -> 63388 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 104539 bytes .../images/5/58/Memory_Regions_Added_by_QEMU.png | Bin 0 -> 21708 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 58319 bytes wiki/open-iov.org/images/6/65/SR-IOV.png | Bin 0 -> 86810 bytes .../Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 235053 bytes wiki/open-iov.org/images/7/73/NUMA_Node.png | Bin 0 -> 24762 bytes wiki/open-iov.org/images/7/75/Mdev-gpu.png | Bin 0 -> 226672 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 57531 bytes .../images/8/8a/KVMFR_Looking_Glass.png | Bin 0 -> 1226009 bytes ...Device_Decomposure_and_Recomposure_via_VFIO.png | Bin 0 -> 61327 bytes .../9/9d/Application_Binary_Interface_(ABI).png | Bin 0 -> 149845 bytes .../images/9/9e/Vfio-pci_driver_bindings.png | Bin 0 -> 37167 bytes .../images/a/aa/Ioeventfd-and-irqfd.png | Bin 0 -> 74754 bytes ...24!I915_Scheduling_Events_and_Requests.png.html | 245 +++ wiki/open-iov.org/images/b/b4/Virgl.png | Bin 0 -> 67323 bytes ...MMU_-_GMMU_IOVA_translation-isolation..png.html | 245 +++ ...ile_descriptor_triggers_EPT_violation..png.html | 245 +++ .../images/c/c2/Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 48860 bytes .../c/c3/I915_Scheduling_Events_and_Requests.png | Bin 0 -> 38555 bytes .../open-iov.org/images/c/c7/VFIO-Mdev_Diagram.png | Bin 0 -> 141851 bytes wiki/open-iov.org/images/d/d3/IVSHMEM.png | Bin 0 -> 29796 bytes wiki/open-iov.org/images/d/df/SR-IOV-Diagram.png | Bin 0 -> 123478 bytes .../images/e/e0/Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 49945 bytes .../e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 57030 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 58002 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 68620 bytes wiki/open-iov.org/images/open-iov.png?d7807 | Bin 0 -> 5427 bytes .../120px-Intel_GVT-g_Capabilities.png | Bin 0 -> 12423 bytes .../300px-Intel_GVT-g_Capabilities.png | Bin 0 -> 45503 bytes .../450px-Intel_GVT-g_Capabilities.png | Bin 0 -> 80006 bytes .../600px-Intel_GVT-g_Capabilities.png | Bin 0 -> 120702 bytes .../800px-Intel_GVT-g_Capabilities.png | Bin 0 -> 180272 bytes .../120px-Screen_Shot_2022-11-18_at_4.14.32_PM.png | Bin 0 -> 8887 bytes .../300px-Screen_Shot_2022-11-18_at_4.14.32_PM.png | Bin 0 -> 24286 bytes .../450px-Screen_Shot_2022-11-18_at_4.14.32_PM.png | Bin 0 -> 40218 bytes .../600px-Screen_Shot_2022-11-18_at_4.14.32_PM.png | Bin 0 -> 58374 bytes ...120px-Screen_Shot_2022-05-06_at_10.46.59_AM.png | Bin 0 -> 2834 bytes ...300px-Screen_Shot_2022-05-06_at_10.46.59_AM.png | Bin 0 -> 15344 bytes ...450px-Screen_Shot_2022-05-06_at_10.46.59_AM.png | Bin 0 -> 25185 bytes .../1137px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 139484 bytes .../120px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 11461 bytes .../1516px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 203211 bytes .../300px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 29386 bytes .../450px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 43286 bytes .../600px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 69546 bytes .../758px-Type_1_IOMMU_Tracks_VA-GFN.png | Bin 0 -> 98462 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 87756 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 7766 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 101043 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 23008 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 36621 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 50758 bytes ...QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png | Bin 0 -> 64700 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 116230 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 9201 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 114096 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 28233 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 43875 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 63583 bytes ...o_Read-Write_acess_to_Mdev_file_descriptor..png | Bin 0 -> 75849 bytes ...status_information_for_an_Intel_DG2_device..png | Bin 0 -> 41451 bytes ...status_information_for_an_Intel_DG2_device..png | Bin 0 -> 43297 bytes ...status_information_for_an_Intel_DG2_device..png | Bin 0 -> 80080 bytes ...status_information_for_an_Intel_DG2_device..png | Bin 0 -> 83140 bytes ...status_information_for_an_Intel_DG2_device..png | Bin 0 -> 3411 bytes .../1200px-Telescope_LG-Proxy.png | Bin 0 -> 115471 bytes .../120px-Telescope_LG-Proxy.png | Bin 0 -> 9142 bytes .../1599px-Telescope_LG-Proxy.png | Bin 0 -> 159491 bytes .../300px-Telescope_LG-Proxy.png | Bin 0 -> 21038 bytes .../450px-Telescope_LG-Proxy.png | Bin 0 -> 33895 bytes .../600px-Telescope_LG-Proxy.png | Bin 0 -> 46888 bytes .../800px-Telescope_LG-Proxy.png | Bin 0 -> 68184 bytes .../1115px-IOCTL_set_VFIO_container.png | Bin 0 -> 45240 bytes .../120px-IOCTL_set_VFIO_container.png | Bin 0 -> 3133 bytes .../1486px-IOCTL_set_VFIO_container.png | Bin 0 -> 62823 bytes .../300px-IOCTL_set_VFIO_container.png | Bin 0 -> 8579 bytes .../450px-IOCTL_set_VFIO_container.png | Bin 0 -> 13927 bytes .../600px-IOCTL_set_VFIO_container.png | Bin 0 -> 19824 bytes .../743px-IOCTL_set_VFIO_container.png | Bin 0 -> 26362 bytes .../120px-Intel_i915_Host_DRM_+_VFIO-Mdev..png | Bin 0 -> 11621 bytes .../300px-Intel_i915_Host_DRM_+_VFIO-Mdev..png | Bin 0 -> 42244 bytes .../450px-Intel_i915_Host_DRM_+_VFIO-Mdev..png | Bin 0 -> 75790 bytes .../600px-Intel_i915_Host_DRM_+_VFIO-Mdev..png | Bin 0 -> 114885 bytes .../800px-Intel_i915_Host_DRM_+_VFIO-Mdev..png | Bin 0 -> 172271 bytes .../1200px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 45455 bytes .../120px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 2598 bytes .../1600px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 64532 bytes .../300px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 7641 bytes .../450px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 12626 bytes .../600px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 18400 bytes .../800px-Ioctl-VFIO_GROUP_GET_FD.png | Bin 0 -> 26836 bytes .../1200px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 121678 bytes .../120px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 6448 bytes .../1599px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 165013 bytes .../300px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 11296 bytes .../450px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 15767 bytes .../600px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 52289 bytes .../800px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png | Bin 0 -> 73437 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 105373 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 9394 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 119466 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 28042 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 43929 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 62739 bytes ...ation_and_forwards_to_QEMU_VFIO_PCI_driver..png | Bin 0 -> 79012 bytes .../4/43/VFIO_Diagram.png/300px-VFIO_Diagram.png | Bin 0 -> 40761 bytes .../4/43/VFIO_Diagram.png/91px-VFIO_Diagram.png | Bin 0 -> 8436 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 114917 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 6113 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 21514 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 37722 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 56914 bytes ...ion_overlays_within_a_VFIO_file_descriptor..png | Bin 0 -> 64846 bytes .../1200px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 71259 bytes .../120px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 7470 bytes .../1600px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 65318 bytes .../300px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 21971 bytes .../450px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 35180 bytes .../600px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 45965 bytes .../800px-Memory_Regions_Added_by_QEMU.png | Bin 0 -> 49910 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 94964 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 8167 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 109847 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 24393 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 38651 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 53382 bytes ..._binding_and_acquires_mdev_file_descriptor..png | Bin 0 -> 69795 bytes .../images/thumb/6/65/SR-IOV.png/120px-SR-IOV.png | Bin 0 -> 12726 bytes .../images/thumb/6/65/SR-IOV.png/300px-SR-IOV.png | Bin 0 -> 38702 bytes .../images/thumb/6/65/SR-IOV.png/450px-SR-IOV.png | Bin 0 -> 65199 bytes .../images/thumb/6/65/SR-IOV.png/600px-SR-IOV.png | Bin 0 -> 95381 bytes .../images/thumb/6/65/SR-IOV.png/754px-SR-IOV.png | Bin 0 -> 129870 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 174068 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 11643 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 245440 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 32234 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 52456 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 75912 bytes ...-Figure_0-_Approches_to_GPU_Virtualization..png | Bin 0 -> 106729 bytes .../thumb/7/73/NUMA_Node.png/120px-NUMA_Node.png | Bin 0 -> 5347 bytes .../thumb/7/73/NUMA_Node.png/300px-NUMA_Node.png | Bin 0 -> 13573 bytes .../thumb/7/73/NUMA_Node.png/450px-NUMA_Node.png | Bin 0 -> 22260 bytes .../thumb/7/73/NUMA_Node.png/600px-NUMA_Node.png | Bin 0 -> 32003 bytes .../thumb/7/75/Mdev-gpu.png/1200px-Mdev-gpu.png | Bin 0 -> 143843 bytes .../thumb/7/75/Mdev-gpu.png/120px-Mdev-gpu.png | Bin 0 -> 6853 bytes .../thumb/7/75/Mdev-gpu.png/1600px-Mdev-gpu.png | Bin 0 -> 219478 bytes .../thumb/7/75/Mdev-gpu.png/300px-Mdev-gpu.png | Bin 0 -> 21711 bytes .../thumb/7/75/Mdev-gpu.png/450px-Mdev-gpu.png | Bin 0 -> 37634 bytes .../thumb/7/75/Mdev-gpu.png/600px-Mdev-gpu.png | Bin 0 -> 54589 bytes .../thumb/7/75/Mdev-gpu.png/800px-Mdev-gpu.png | Bin 0 -> 79782 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 99015 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 8463 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 113516 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 26090 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 41060 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 58918 bytes ...O_file_descriptor_into_the_virtual_machine..png | Bin 0 -> 75199 bytes .../1200px-KVMFR_Looking_Glass.png | Bin 0 -> 1152107 bytes .../120px-KVMFR_Looking_Glass.png | Bin 0 -> 20655 bytes .../300px-KVMFR_Looking_Glass.png | Bin 0 -> 96201 bytes .../450px-KVMFR_Looking_Glass.png | Bin 0 -> 195735 bytes .../600px-KVMFR_Looking_Glass.png | Bin 0 -> 330807 bytes .../800px-KVMFR_Looking_Glass.png | Bin 0 -> 559376 bytes ...Device_Decomposure_and_Recomposure_via_VFIO.png | Bin 0 -> 5339 bytes ...Device_Decomposure_and_Recomposure_via_VFIO.png | Bin 0 -> 17600 bytes ...Device_Decomposure_and_Recomposure_via_VFIO.png | Bin 0 -> 31115 bytes ...Device_Decomposure_and_Recomposure_via_VFIO.png | Bin 0 -> 46629 bytes ...Device_Decomposure_and_Recomposure_via_VFIO.png | Bin 0 -> 69096 bytes .../120px-Application_Binary_Interface_(ABI).png | Bin 0 -> 15021 bytes .../300px-Application_Binary_Interface_(ABI).png | Bin 0 -> 56282 bytes .../450px-Application_Binary_Interface_(ABI).png | Bin 0 -> 100865 bytes .../600px-Application_Binary_Interface_(ABI).png | Bin 0 -> 144426 bytes .../120px-Vfio-pci_driver_bindings.png | Bin 0 -> 2070 bytes .../300px-Vfio-pci_driver_bindings.png | Bin 0 -> 4906 bytes .../450px-Vfio-pci_driver_bindings.png | Bin 0 -> 8200 bytes .../600px-Vfio-pci_driver_bindings.png | Bin 0 -> 11558 bytes .../800px-Vfio-pci_driver_bindings.png | Bin 0 -> 16363 bytes .../1200px-Ioeventfd-and-irqfd.png | Bin 0 -> 74400 bytes .../120px-Ioeventfd-and-irqfd.png | Bin 0 -> 6127 bytes .../300px-Ioeventfd-and-irqfd.png | Bin 0 -> 18211 bytes .../450px-Ioeventfd-and-irqfd.png | Bin 0 -> 27521 bytes .../600px-Ioeventfd-and-irqfd.png | Bin 0 -> 35817 bytes .../800px-Ioeventfd-and-irqfd.png | Bin 0 -> 46597 bytes .../images/thumb/b/b4/Virgl.png/300px-Virgl.png | Bin 0 -> 50340 bytes .../images/thumb/b/b4/Virgl.png/90px-Virgl.png | Bin 0 -> 10621 bytes .../1191px-Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 129453 bytes .../120px-Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 12146 bytes .../300px-Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 35080 bytes .../450px-Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 52587 bytes .../600px-Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 76039 bytes .../794px-Figure_0-_i915_vGPU_Scheduling.png | Bin 0 -> 95436 bytes .../1162px-I915_Scheduling_Events_and_Requests.png | Bin 0 -> 110731 bytes .../120px-I915_Scheduling_Events_and_Requests.png | Bin 0 -> 10764 bytes .../300px-I915_Scheduling_Events_and_Requests.png | Bin 0 -> 26178 bytes .../450px-I915_Scheduling_Events_and_Requests.png | Bin 0 -> 47748 bytes .../600px-I915_Scheduling_Events_and_Requests.png | Bin 0 -> 59644 bytes .../775px-I915_Scheduling_Events_and_Requests.png | Bin 0 -> 84321 bytes .../300px-VFIO-Mdev_Diagram.png | Bin 0 -> 62797 bytes .../450px-VFIO-Mdev_Diagram.png | Bin 0 -> 112103 bytes .../453px-VFIO-Mdev_Diagram.png | Bin 0 -> 112627 bytes .../91px-VFIO-Mdev_Diagram.png | Bin 0 -> 12889 bytes .../thumb/d/d3/IVSHMEM.png/120px-IVSHMEM.png | Bin 0 -> 7049 bytes .../thumb/d/d3/IVSHMEM.png/300px-IVSHMEM.png | Bin 0 -> 17150 bytes .../thumb/d/d3/IVSHMEM.png/450px-IVSHMEM.png | Bin 0 -> 27168 bytes .../thumb/d/d3/IVSHMEM.png/600px-IVSHMEM.png | Bin 0 -> 37518 bytes .../thumb/d/d3/IVSHMEM.png/800px-IVSHMEM.png | Bin 0 -> 53853 bytes .../df/SR-IOV-Diagram.png/120px-SR-IOV-Diagram.png | Bin 0 -> 12740 bytes .../df/SR-IOV-Diagram.png/300px-SR-IOV-Diagram.png | Bin 0 -> 49293 bytes .../df/SR-IOV-Diagram.png/450px-SR-IOV-Diagram.png | Bin 0 -> 90008 bytes .../df/SR-IOV-Diagram.png/600px-SR-IOV-Diagram.png | Bin 0 -> 138925 bytes .../1160px-Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 388411 bytes .../120px-Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 15523 bytes .../300px-Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 43289 bytes .../450px-Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 92435 bytes .../600px-Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 164552 bytes .../773px-Figure_2-_Intel_vGPU_Scheduler.png | Bin 0 -> 258373 bytes ...1149px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 85094 bytes .../120px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 7591 bytes ...1532px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 100384 bytes .../300px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 22884 bytes .../450px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 36202 bytes .../600px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 51608 bytes .../766px-Echoing_a_UUID_into_the_sysfsdev_API.png | Bin 0 -> 64392 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 104728 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 9119 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 121708 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 27071 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 43501 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 61379 bytes ...r_driver_through_vfio-mdev_and_Mediated_CBs.png | Bin 0 -> 78279 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 107373 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 10624 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 120945 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 28600 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 44517 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 61861 bytes ...R_to_Timeshared_Syhededuling_via_Channel_IO.png | Bin 0 -> 79573 bytes wiki/open-iov.org/index.html | 245 +++ wiki/open-iov.org/index.php/AMDGPU.html | 220 +++ wiki/open-iov.org/index.php/Articles.html | 323 ++++ wiki/open-iov.org/index.php/CPU_Support.html | 233 +++ ...ile:Application_Binary_Interface_(ABI).png.html | 233 +++ ...e_Decomposure_and_Recomposure_via_VFIO.png.html | 233 +++ ...e:Echoing_a_UUID_into_the_sysfsdev_API.png.html | 233 +++ ...re_0-_Approches_to_GPU_Virtualization..png.html | 233 +++ .../File:Figure_0-_i915_vGPU_Scheduling.png.html | 233 +++ ...s_information_for_an_Intel_DG2_device..png.html | 233 +++ .../File:Figure_2-_Intel_vGPU_Scheduler.png.html | 233 +++ ...Timeshared_Syhededuling_via_Channel_IO.png.html | 233 +++ ...MMU_-_GMMU_IOVA_translation-isolation..png.html | 233 +++ ...verlays_within_a_VFIO_file_descriptor..png.html | 233 +++ ...ile_descriptor_triggers_EPT_violation..png.html | 233 +++ ...le:I915_Scheduling_Events_and_Requests.png.html | 234 +++ .../File:IOCTL_set_VFIO_container.png.html | 233 +++ wiki/open-iov.org/index.php/File:IVSHMEM.png.html | 233 +++ .../File:Intel_GVT-g_Capabilities.png.html | 233 +++ .../File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html | 233 +++ .../File:Ioctl-VFIO_GROUP_GET_FD.png.html | 233 +++ .../File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html | 233 +++ .../index.php/File:Ioeventfd-and-irqfd.png.html | 233 +++ .../index.php/File:KVMFR_Looking_Glass.png.html | 233 +++ ..._and_forwards_to_QEMU_VFIO_PCI_driver..png.html | 233 +++ wiki/open-iov.org/index.php/File:Mdev-gpu.png.html | 233 +++ .../File:Memory_Regions_Added_by_QEMU.png.html | 233 +++ .../open-iov.org/index.php/File:NUMA_Node.png.html | 233 +++ ...calls_VFIO_DMA_MAP_via_Memory_listener.png.html | 233 +++ ...d-Write_acess_to_Mdev_file_descriptor..png.html | 233 +++ ...ing_and_acquires_mdev_file_descriptor..png.html | 233 +++ ...ver_through_vfio-mdev_and_Mediated_CBs.png.html | 233 +++ ...e_descriptor_into_the_virtual_machine..png.html | 233 +++ .../index.php/File:SR-IOV-Diagram.png.html | 233 +++ wiki/open-iov.org/index.php/File:SR-IOV.png.html | 233 +++ ...:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html | 233 +++ ...e:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html | 233 +++ .../index.php/File:Telescope_LG-Proxy.png.html | 233 +++ .../File:Type_1_IOMMU_Tracks_VA-GFN.png.html | 233 +++ .../index.php/File:VFIO-Mdev_Diagram.png.html | 233 +++ .../index.php/File:VFIO_Diagram.png.html | 233 +++ .../File:Vfio-pci_driver_bindings.png.html | 233 +++ wiki/open-iov.org/index.php/File:Virgl.png.html | 233 +++ .../index.php/GPU_Driver_Internals.html | 661 ++++++++ wiki/open-iov.org/index.php/GPU_Firmware.html | 453 +++++ .../GPU_Software_Bill_Of_Materials_(SBOM).html | 528 ++++++ wiki/open-iov.org/index.php/GPU_Support.html | 813 +++++++++ wiki/open-iov.org/index.php/Glossary.html | 268 +++ .../open-iov.org/index.php/Hypervisor_Support.html | 332 ++++ wiki/open-iov.org/index.php/Intel.html | 214 +++ wiki/open-iov.org/index.php/Intel_SR-IOV_APIs.html | 215 +++ wiki/open-iov.org/index.php/Introduction.html | 268 +++ .../Introductory_Concepts_&_Definitions.html | 269 +++ .../index.php/LIME_Is_Mediated_Emulation.html | 259 +++ .../index.php/Looking_Glass_KVMFR.html | 222 +++ wiki/open-iov.org/index.php/Mdev-GPU.html | 362 ++++ .../index.php/Mediated_Device_Internals.html | 1014 ++++++++++++ wiki/open-iov.org/index.php/Merged_Drivers.html | 290 ++++ wiki/open-iov.org/index.php/Open-IOV:About.html | 214 +++ wiki/open-iov.org/index.php/OpenRM.html | 564 +++++++ .../index.php/Special:Contributions/Arthur.html | 547 ++++++ wiki/open-iov.org/index.php/Special:Random.html | 212 +++ .../index.php/Special:SpecialPages.html | 283 ++++ .../index.php/Special:WhatLinksHere/Articles.html | 216 +++ .../Special:WhatLinksHere/CPU_Support.html | 216 +++ ...ile:Application_Binary_Interface_(ABI).png.html | 216 +++ ...e_Decomposure_and_Recomposure_via_VFIO.png.html | 216 +++ ...e:Echoing_a_UUID_into_the_sysfsdev_API.png.html | 216 +++ ...re_0-_Approches_to_GPU_Virtualization..png.html | 216 +++ .../File:Figure_0-_i915_vGPU_Scheduling.png.html | 216 +++ ...s_information_for_an_Intel_DG2_device..png.html | 216 +++ .../File:Figure_2-_Intel_vGPU_Scheduler.png.html | 216 +++ ...Timeshared_Syhededuling_via_Channel_IO.png.html | 216 +++ ...MMU_-_GMMU_IOVA_translation-isolation..png.html | 216 +++ ...verlays_within_a_VFIO_file_descriptor..png.html | 216 +++ ...ile_descriptor_triggers_EPT_violation..png.html | 216 +++ ...le:I915_Scheduling_Events_and_Requests.png.html | 216 +++ .../File:IOCTL_set_VFIO_container.png.html | 216 +++ .../Special:WhatLinksHere/File:IVSHMEM.png.html | 216 +++ .../File:Intel_GVT-g_Capabilities.png.html | 216 +++ .../File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html | 216 +++ .../File:Ioctl-VFIO_GROUP_GET_FD.png.html | 216 +++ .../File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html | 216 +++ .../File:Ioeventfd-and-irqfd.png.html | 216 +++ .../File:KVMFR_Looking_Glass.png.html | 216 +++ ..._and_forwards_to_QEMU_VFIO_PCI_driver..png.html | 216 +++ .../Special:WhatLinksHere/File:Mdev-gpu.png.html | 216 +++ .../File:Memory_Regions_Added_by_QEMU.png.html | 216 +++ .../Special:WhatLinksHere/File:NUMA_Node.png.html | 216 +++ ...calls_VFIO_DMA_MAP_via_Memory_listener.png.html | 216 +++ ...d-Write_acess_to_Mdev_file_descriptor..png.html | 216 +++ ...ing_and_acquires_mdev_file_descriptor..png.html | 216 +++ ...ver_through_vfio-mdev_and_Mediated_CBs.png.html | 216 +++ ...e_descriptor_into_the_virtual_machine..png.html | 216 +++ .../File:SR-IOV-Diagram.png.html | 216 +++ .../Special:WhatLinksHere/File:SR-IOV.png.html | 216 +++ ...:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html | 216 +++ ...e:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html | 216 +++ .../File:Telescope_LG-Proxy.png.html | 216 +++ .../File:Type_1_IOMMU_Tracks_VA-GFN.png.html | 216 +++ .../File:VFIO-Mdev_Diagram.png.html | 216 +++ .../File:VFIO_Diagram.png.html | 216 +++ .../File:Vfio-pci_driver_bindings.png.html | 216 +++ .../Special:WhatLinksHere/File:Virgl.png.html | 216 +++ .../GPU_Driver_Internals.html | 217 +++ .../Special:WhatLinksHere/GPU_Firmware.html | 216 +++ .../GPU_Software_Bill_Of_Materials_(SBOM).html | 216 +++ .../Special:WhatLinksHere/GPU_Support.html | 216 +++ .../index.php/Special:WhatLinksHere/Glossary.html | 218 +++ .../index.php/Special:WhatLinksHere/Intel.html | 217 +++ .../Special:WhatLinksHere/Intel_SR-IOV_APIs.html | 216 +++ .../Special:WhatLinksHere/Introduction.html | 216 +++ .../Introductory_Concepts_&_Definitions.html | 216 +++ .../Special:WhatLinksHere/Merged_Drivers.html | 216 +++ .../index.php/Special:WhatLinksHere/OpenRM.html | 216 +++ .../Virtual_I/O_Internals.html | 219 +++ .../Virtual_IO_Internals.html | 216 +++ .../Virtualization_Fundamentals.html | 217 +++ wiki/open-iov.org/index.php/Talk:Mdev-GPU.html | 212 +++ wiki/open-iov.org/index.php/VGPU_Unlock.html | 215 +++ .../index.php/Virtual_I/O_Internals.html | 1013 ++++++++++++ .../index.php/Virtual_IO_Internals.html | 1014 ++++++++++++ .../index.php/Virtualization_Fundamentals.html | 247 +++ .../index.php?title=AMD&action=edit.html | 200 +++ .../index.php?title=AMD&action=history.html | 206 +++ .../index.php?title=AMD&action=info.html | 218 +++ .../open-iov.org/index.php?title=AMD&oldid=38.html | 213 +++ .../index.php?title=AMDGPU&action=edit.html | 209 +++ .../index.php?title=AMDGPU&action=history.html | 209 +++ .../index.php?title=AMDGPU&action=info.html | 218 +++ .../index.php?title=AMDGPU&oldid=23746.html | 221 +++ .../index.php?title=Articles&action=edit.html | 319 ++++ .../index.php?title=Articles&action=history.html | 256 +++ .../index.php?title=Articles&action=info.html | 219 +++ .../index.php?title=Articles&oldid=23794.html | 324 ++++ .../index.php?title=CPU_Support&action=edit.html | 232 +++ ...index.php?title=CPU_Support&action=history.html | 220 +++ .../index.php?title=CPU_Support&action=info.html | 218 +++ .../index.php?title=CPU_Support&oldid=23744.html | 234 +++ ...ion_Binary_Interface_(ABI).png&action=edit.html | 196 +++ ..._Binary_Interface_(ABI).png&action=history.html | 206 +++ ...ion_Binary_Interface_(ABI).png&action=info.html | 221 +++ ...cation_Binary_Interface_(ABI).png&oldid=48.html | 234 +++ ...e_and_Recomposure_via_VFIO.png&action=edit.html | 196 +++ ...nd_Recomposure_via_VFIO.png&action=history.html | 206 +++ ...e_and_Recomposure_via_VFIO.png&action=info.html | 221 +++ ...ure_and_Recomposure_via_VFIO.png&oldid=399.html | 234 +++ ...UUID_into_the_sysfsdev_API.png&action=edit.html | 196 +++ ...D_into_the_sysfsdev_API.png&action=history.html | 206 +++ ...UUID_into_the_sysfsdev_API.png&action=info.html | 221 +++ ...a_UUID_into_the_sysfsdev_API.png&oldid=462.html | 234 +++ ...hes_to_GPU_Virtualization..png&action=edit.html | 196 +++ ..._to_GPU_Virtualization..png&action=history.html | 206 +++ ...hes_to_GPU_Virtualization..png&action=info.html | 221 +++ ...ches_to_GPU_Virtualization..png&oldid=5587.html | 234 +++ ...re_0-_i915_vGPU_Scheduling.png&action=edit.html | 196 +++ ...0-_i915_vGPU_Scheduling.png&action=history.html | 206 +++ ...re_0-_i915_vGPU_Scheduling.png&action=info.html | 221 +++ ...ure_0-_i915_vGPU_Scheduling.png&oldid=5617.html | 234 +++ ...n_for_an_Intel_DG2_device..png&action=edit.html | 196 +++ ...or_an_Intel_DG2_device..png&action=history.html | 206 +++ ...n_for_an_Intel_DG2_device..png&action=info.html | 221 +++ ...ion_for_an_Intel_DG2_device..png&oldid=884.html | 234 +++ ...re_2-_Intel_vGPU_Scheduler.png&action=edit.html | 196 +++ ...2-_Intel_vGPU_Scheduler.png&action=history.html | 206 +++ ...re_2-_Intel_vGPU_Scheduler.png&action=info.html | 221 +++ ...ure_2-_Intel_vGPU_Scheduler.png&oldid=5644.html | 234 +++ ...yhededuling_via_Channel_IO.png&action=edit.html | 196 +++ ...deduling_via_Channel_IO.png&action=history.html | 206 +++ ...yhededuling_via_Channel_IO.png&action=info.html | 221 +++ ...yhededuling_via_Channel_IO.png&oldid=23658.html | 234 +++ ...OVA_translation-isolation..png&action=edit.html | 196 +++ ..._translation-isolation..png&action=history.html | 206 +++ ...OVA_translation-isolation..png&action=info.html | 221 +++ ..._IOVA_translation-isolation..png&oldid=416.html | 234 +++ ...in_a_VFIO_file_descriptor..png&action=edit.html | 196 +++ ...a_VFIO_file_descriptor..png&action=history.html | 206 +++ ...in_a_VFIO_file_descriptor..png&action=info.html | 221 +++ ...thin_a_VFIO_file_descriptor..png&oldid=447.html | 234 +++ ...or_triggers_EPT_violation..png&action=edit.html | 196 +++ ...triggers_EPT_violation..png&action=history.html | 206 +++ ...or_triggers_EPT_violation..png&action=info.html | 221 +++ ...ptor_triggers_EPT_violation..png&oldid=492.html | 234 +++ ...duling_Events_and_Requests.png&action=edit.html | 196 +++ ...ing_Events_and_Requests.png&action=history.html | 207 +++ ...duling_Events_and_Requests.png&action=info.html | 221 +++ ...eduling_Events_and_Requests.png&oldid=5633.html | 235 +++ ...e:IOCTL_set_VFIO_container.png&action=edit.html | 196 +++ ...OCTL_set_VFIO_container.png&action=history.html | 206 +++ ...e:IOCTL_set_VFIO_container.png&action=info.html | 221 +++ ...ile:IOCTL_set_VFIO_container.png&oldid=343.html | 234 +++ ...dex.php?title=File:IVSHMEM.png&action=edit.html | 196 +++ ....php?title=File:IVSHMEM.png&action=history.html | 206 +++ ...dex.php?title=File:IVSHMEM.png&action=info.html | 221 +++ .../index.php?title=File:IVSHMEM.png&oldid=45.html | 234 +++ ...e:Intel_GVT-g_Capabilities.png&action=edit.html | 196 +++ ...ntel_GVT-g_Capabilities.png&action=history.html | 206 +++ ...e:Intel_GVT-g_Capabilities.png&action=info.html | 221 +++ ...ile:Intel_GVT-g_Capabilities.png&oldid=105.html | 234 +++ ...i915_Host_DRM_+_VFIO-Mdev..png&action=edit.html | 196 +++ ...5_Host_DRM_+_VFIO-Mdev..png&action=history.html | 206 +++ ...i915_Host_DRM_+_VFIO-Mdev..png&action=info.html | 221 +++ ...l_i915_Host_DRM_+_VFIO-Mdev..png&oldid=103.html | 234 +++ ...le:Ioctl-VFIO_GROUP_GET_FD.png&action=edit.html | 196 +++ ...Ioctl-VFIO_GROUP_GET_FD.png&action=history.html | 206 +++ ...le:Ioctl-VFIO_GROUP_GET_FD.png&action=info.html | 221 +++ ...File:Ioctl-VFIO_GROUP_GET_FD.png&oldid=347.html | 234 +++ ...l-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=edit.html | 196 +++ ...FIO_IOMMU_MAP-UNMAP_DMA.png&action=history.html | 206 +++ ...l-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=info.html | 221 +++ ...ctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&oldid=351.html | 234 +++ ...e=File:Ioeventfd-and-irqfd.png&action=edit.html | 196 +++ ...ile:Ioeventfd-and-irqfd.png&action=history.html | 206 +++ ...e=File:Ioeventfd-and-irqfd.png&action=info.html | 221 +++ ...tle=File:Ioeventfd-and-irqfd.png&oldid=377.html | 234 +++ ...e=File:KVMFR_Looking_Glass.png&action=edit.html | 196 +++ ...ile:KVMFR_Looking_Glass.png&action=history.html | 206 +++ ...e=File:KVMFR_Looking_Glass.png&action=info.html | 221 +++ ...itle=File:KVMFR_Looking_Glass.png&oldid=46.html | 234 +++ ...s_to_QEMU_VFIO_PCI_driver..png&action=edit.html | 196 +++ ...o_QEMU_VFIO_PCI_driver..png&action=history.html | 206 +++ ...s_to_QEMU_VFIO_PCI_driver..png&action=info.html | 221 +++ ...rds_to_QEMU_VFIO_PCI_driver..png&oldid=498.html | 234 +++ ...ex.php?title=File:Mdev-gpu.png&action=edit.html | 196 +++ ...php?title=File:Mdev-gpu.png&action=history.html | 207 +++ ...ex.php?title=File:Mdev-gpu.png&action=info.html | 221 +++ ...ndex.php?title=File:Mdev-gpu.png&oldid=706.html | 234 +++ ...mory_Regions_Added_by_QEMU.png&action=edit.html | 196 +++ ...y_Regions_Added_by_QEMU.png&action=history.html | 207 +++ ...mory_Regions_Added_by_QEMU.png&action=info.html | 221 +++ ...Memory_Regions_Added_by_QEMU.png&oldid=815.html | 234 +++ ...x.php?title=File:NUMA_Node.png&action=edit.html | 196 +++ ...hp?title=File:NUMA_Node.png&action=history.html | 206 +++ ...x.php?title=File:NUMA_Node.png&action=info.html | 221 +++ ...ndex.php?title=File:NUMA_Node.png&oldid=47.html | 234 +++ ...MA_MAP_via_Memory_listener.png&action=edit.html | 196 +++ ...MAP_via_Memory_listener.png&action=history.html | 206 +++ ...MA_MAP_via_Memory_listener.png&action=info.html | 221 +++ ..._DMA_MAP_via_Memory_listener.png&oldid=817.html | 234 +++ ...s_to_Mdev_file_descriptor..png&action=edit.html | 196 +++ ...o_Mdev_file_descriptor..png&action=history.html | 206 +++ ...s_to_Mdev_file_descriptor..png&action=info.html | 221 +++ ...ess_to_Mdev_file_descriptor..png&oldid=502.html | 234 +++ ...ires_mdev_file_descriptor..png&action=edit.html | 196 +++ ...s_mdev_file_descriptor..png&action=history.html | 206 +++ ...ires_mdev_file_descriptor..png&action=info.html | 221 +++ ...quires_mdev_file_descriptor..png&oldid=470.html | 234 +++ ...vfio-mdev_and_Mediated_CBs.png&action=edit.html | 196 +++ ...o-mdev_and_Mediated_CBs.png&action=history.html | 206 +++ ...vfio-mdev_and_Mediated_CBs.png&action=info.html | 221 +++ ...h_vfio-mdev_and_Mediated_CBs.png&oldid=487.html | 234 +++ ..._into_the_virtual_machine..png&action=edit.html | 196 +++ ...to_the_virtual_machine..png&action=history.html | 206 +++ ..._into_the_virtual_machine..png&action=info.html | 221 +++ ...or_into_the_virtual_machine..png&oldid=477.html | 234 +++ ...?title=File:SR-IOV-Diagram.png&action=edit.html | 196 +++ ...tle=File:SR-IOV-Diagram.png&action=history.html | 206 +++ ...?title=File:SR-IOV-Diagram.png&action=info.html | 221 +++ ...php?title=File:SR-IOV-Diagram.png&oldid=50.html | 234 +++ ...ndex.php?title=File:SR-IOV.png&action=edit.html | 196 +++ ...x.php?title=File:SR-IOV.png&action=history.html | 206 +++ ...ndex.php?title=File:SR-IOV.png&action=info.html | 221 +++ .../index.php?title=File:SR-IOV.png&oldid=49.html | 234 +++ ..._2022-05-06_at_10.46.59_AM.png&action=edit.html | 196 +++ ...22-05-06_at_10.46.59_AM.png&action=history.html | 206 +++ ..._2022-05-06_at_10.46.59_AM.png&action=info.html | 221 +++ ...ot_2022-05-06_at_10.46.59_AM.png&oldid=396.html | 234 +++ ...t_2022-11-18_at_4.14.32_PM.png&action=edit.html | 196 +++ ...022-11-18_at_4.14.32_PM.png&action=history.html | 206 +++ ...t_2022-11-18_at_4.14.32_PM.png&action=info.html | 221 +++ ...hot_2022-11-18_at_4.14.32_PM.png&oldid=869.html | 234 +++ ...le=File:Telescope_LG-Proxy.png&action=edit.html | 196 +++ ...File:Telescope_LG-Proxy.png&action=history.html | 206 +++ ...le=File:Telescope_LG-Proxy.png&action=info.html | 221 +++ ...itle=File:Telescope_LG-Proxy.png&oldid=296.html | 234 +++ ...Type_1_IOMMU_Tracks_VA-GFN.png&action=edit.html | 196 +++ ...e_1_IOMMU_Tracks_VA-GFN.png&action=history.html | 206 +++ ...Type_1_IOMMU_Tracks_VA-GFN.png&action=info.html | 221 +++ ...e:Type_1_IOMMU_Tracks_VA-GFN.png&oldid=821.html | 234 +++ ...tle=File:VFIO-Mdev_Diagram.png&action=edit.html | 196 +++ ...=File:VFIO-Mdev_Diagram.png&action=history.html | 206 +++ ...tle=File:VFIO-Mdev_Diagram.png&action=info.html | 221 +++ ...?title=File:VFIO-Mdev_Diagram.png&oldid=41.html | 234 +++ ...hp?title=File:VFIO_Diagram.png&action=edit.html | 196 +++ ...title=File:VFIO_Diagram.png&action=history.html | 206 +++ ...hp?title=File:VFIO_Diagram.png&action=info.html | 221 +++ ...x.php?title=File:VFIO_Diagram.png&oldid=40.html | 234 +++ ...e:Vfio-pci_driver_bindings.png&action=edit.html | 196 +++ ...fio-pci_driver_bindings.png&action=history.html | 206 +++ ...e:Vfio-pci_driver_bindings.png&action=info.html | 221 +++ ...ile:Vfio-pci_driver_bindings.png&oldid=341.html | 234 +++ ...index.php?title=File:Virgl.png&action=edit.html | 196 +++ ...ex.php?title=File:Virgl.png&action=history.html | 206 +++ ...index.php?title=File:Virgl.png&action=info.html | 221 +++ .../index.php?title=File:Virgl.png&oldid=52.html | 234 +++ ...php?title=GPU_Driver_Internals&action=edit.html | 550 +++++++ ...?title=GPU_Driver_Internals&action=history.html | 256 +++ ...php?title=GPU_Driver_Internals&action=info.html | 218 +++ ...php?title=GPU_Driver_Internals&oldid=23791.html | 662 ++++++++ .../index.php?title=GPU_Firmware&action=edit.html | 357 ++++ ...ndex.php?title=GPU_Firmware&action=history.html | 227 +++ .../index.php?title=GPU_Firmware&action=info.html | 218 +++ .../index.php?title=GPU_Firmware&oldid=23779.html | 454 +++++ ...tware_Bill_Of_Materials_(SBOM)&action=edit.html | 374 +++++ ...re_Bill_Of_Materials_(SBOM)&action=history.html | 248 +++ ...tware_Bill_Of_Materials_(SBOM)&action=info.html | 219 +++ ...tware_Bill_Of_Materials_(SBOM)&oldid=23786.html | 529 ++++++ .../index.php?title=GPU_Support&action=edit.html | 550 +++++++ ...index.php?title=GPU_Support&action=history.html | 256 +++ .../index.php?title=GPU_Support&action=info.html | 218 +++ .../index.php?title=GPU_Support&oldid=23752.html | 814 +++++++++ .../index.php?title=Glossary&action=edit.html | 245 +++ .../index.php?title=Glossary&action=history.html | 220 +++ .../index.php?title=Glossary&action=info.html | 218 +++ .../index.php?title=Glossary&oldid=23763.html | 269 +++ ...x.php?title=Hypervisor_Support&action=edit.html | 262 +++ ...hp?title=Hypervisor_Support&action=history.html | 217 +++ ...x.php?title=Hypervisor_Support&action=info.html | 218 +++ ...dex.php?title=Hypervisor_Support&oldid=751.html | 333 ++++ .../index.php?title=Intel&action=edit.html | 200 +++ .../index.php?title=Intel&action=history.html | 215 +++ .../index.php?title=Intel&action=info.html | 218 +++ .../index.php?title=Intel&oldid=23757.html | 215 +++ ...ex.php?title=Intel_SR-IOV_APIs&action=edit.html | 196 +++ ...php?title=Intel_SR-IOV_APIs&action=history.html | 206 +++ ...ex.php?title=Intel_SR-IOV_APIs&action=info.html | 219 +++ ...ex.php?title=Intel_SR-IOV_APIs&oldid=23756.html | 213 +++ ...ex.php?title=Intel_SR-IOV_APIs&redirect=no.html | 211 +++ .../index.php?title=Introduction&action=edit.html | 231 +++ ...ndex.php?title=Introduction&action=history.html | 216 +++ .../index.php?title=Introduction&action=info.html | 219 +++ .../index.php?title=Introduction&oldid=23688.html | 269 +++ ...ductory_Concepts_&_Definitions&action=edit.html | 196 +++ ...tory_Concepts_&_Definitions&action=history.html | 206 +++ ...ductory_Concepts_&_Definitions&action=info.html | 219 +++ ...roductory_Concepts_&_Definitions&oldid=723.html | 213 +++ ...ductory_Concepts_&_Definitions&redirect=no.html | 211 +++ ...tle=LIME_Is_Mediated_Emulation&action=edit.html | 231 +++ ...=LIME_Is_Mediated_Emulation&action=history.html | 227 +++ ...tle=LIME_Is_Mediated_Emulation&action=info.html | 218 +++ ...title=LIME_Is_Mediated_Emulation&oldid=786.html | 260 +++ ....php?title=Looking_Glass_KVMFR&action=edit.html | 207 +++ ...p?title=Looking_Glass_KVMFR&action=history.html | 213 +++ ....php?title=Looking_Glass_KVMFR&action=info.html | 218 +++ ...ex.php?title=Looking_Glass_KVMFR&oldid=855.html | 223 +++ .../index.php?title=Main_Page&action=edit.html | 226 +++ .../index.php?title=Main_Page&action=history.html | 256 +++ .../index.php?title=Main_Page&action=info.html | 219 +++ .../index.php?title=Main_Page&oldid=23765.html | 246 +++ .../index.php?title=Mdev-GPU&action=edit.html | 339 ++++ .../index.php?title=Mdev-GPU&action=history.html | 227 +++ .../index.php?title=Mdev-GPU&action=info.html | 218 +++ .../index.php?title=Mdev-GPU&oldid=23740.html | 363 ++++ ...itle=Mediated_Device_Internals&action=edit.html | 196 +++ ...e=Mediated_Device_Internals&action=history.html | 206 +++ ...itle=Mediated_Device_Internals&action=info.html | 219 +++ ...?title=Mediated_Device_Internals&oldid=660.html | 213 +++ ...itle=Mediated_Device_Internals&redirect=no.html | 211 +++ ...index.php?title=Merged_Drivers&action=edit.html | 255 +++ ...ex.php?title=Merged_Drivers&action=history.html | 255 +++ ...index.php?title=Merged_Drivers&action=info.html | 218 +++ ...index.php?title=Merged_Drivers&oldid=23737.html | 291 ++++ ...index.php?title=Open-IOV:About&action=edit.html | 200 +++ ...ex.php?title=Open-IOV:About&action=history.html | 210 +++ ...index.php?title=Open-IOV:About&action=info.html | 220 +++ .../index.php?title=Open-IOV:About&oldid=5625.html | 215 +++ .../index.php?title=OpenRM&action=edit.html | 484 ++++++ .../index.php?title=OpenRM&action=history.html | 215 +++ .../index.php?title=OpenRM&action=info.html | 218 +++ .../index.php?title=OpenRM&oldid=23739.html | 565 +++++++ ...index.php?title=Special:RecentChanges&feed=atom | 10 + ...x.php?title=Special:UserLogin&returnto=AMD.html | 199 +++ ...hp?title=Special:UserLogin&returnto=AMDGPU.html | 199 +++ ...?title=Special:UserLogin&returnto=Articles.html | 199 +++ ...tle=Special:UserLogin&returnto=CPU+Support.html | 199 +++ ...ile:Application+Binary+Interface+(ABI).png.html | 199 +++ ...e+Decomposure+and+Recomposure+via+VFIO.png.html | 199 +++ ...e:Echoing+a+UUID+into+the+sysfsdev+API.png.html | 199 +++ ...re+0-+Approches+to+GPU+Virtualization..png.html | 199 +++ ...to=File:Figure+0-+i915+vGPU+Scheduling.png.html | 199 +++ ...s+information+for+an+Intel+DG2+device..png.html | 199 +++ ...to=File:Figure+2-+Intel+vGPU+Scheduler.png.html | 199 +++ ...Timeshared+Syhededuling+via+Channel+IO.png.html | 199 +++ ...MMU+-+GMMU+IOVA+translation-isolation..png.html | 199 +++ ...verlays+within+a+VFIO+file+descriptor..png.html | 199 +++ ...ile+descriptor+triggers+EPT+violation..png.html | 199 +++ ...le:I915+Scheduling+Events+and+Requests.png.html | 199 +++ ...returnto=File:IOCTL+set+VFIO+container.png.html | 199 +++ ...pecial:UserLogin&returnto=File:IVSHMEM.png.html | 199 +++ ...returnto=File:Intel+GVT-g+Capabilities.png.html | 199 +++ ...=File:Intel+i915+Host+DRM+++VFIO-Mdev..png.html | 199 +++ ...&returnto=File:Ioctl-VFIO+GROUP+GET+FD.png.html | 199 +++ ...to=File:Ioctl-VFIO+IOMMU+MAP-UNMAP+DMA.png.html | 199 +++ ...ogin&returnto=File:Ioeventfd-and-irqfd.png.html | 199 +++ ...+and+forwards+to+QEMU+VFIO+PCI+driver..png.html | 199 +++ ...ogin&returnto=File:KVMFR+Looking+Glass.png.html | 199 +++ ...ecial:UserLogin&returnto=File:Mdev-gpu.png.html | 199 +++ ...rnto=File:Memory+Regions+Added+by+QEMU.png.html | 199 +++ ...cial:UserLogin&returnto=File:NUMA+Node.png.html | 199 +++ ...calls+VFIO+DMA+MAP+via+Memory+listener.png.html | 199 +++ ...d-Write+acess+to+Mdev+file+descriptor..png.html | 199 +++ ...ing+and+acquires+mdev+file+descriptor..png.html | 199 +++ ...ver+through+vfio-mdev+and+Mediated+CBs.png.html | 199 +++ ...e+descriptor+into+the+virtual+machine..png.html | 199 +++ ...UserLogin&returnto=File:SR-IOV-Diagram.png.html | 199 +++ ...Special:UserLogin&returnto=File:SR-IOV.png.html | 199 +++ ...:Screen+Shot+2022-05-06+at+10.46.59+AM.png.html | 199 +++ ...e:Screen+Shot+2022-11-18+at+4.14.32+PM.png.html | 199 +++ ...Login&returnto=File:Telescope+LG-Proxy.png.html | 199 +++ ...turnto=File:Type+1+IOMMU+Tracks+VA-GFN.png.html | 199 +++ ...l:UserLogin&returnto=File:VFIO+Diagram.png.html | 199 +++ ...rLogin&returnto=File:VFIO-Mdev+Diagram.png.html | 199 +++ ...returnto=File:Vfio-pci+driver+bindings.png.html | 199 +++ ...=Special:UserLogin&returnto=File:Virgl.png.html | 199 +++ ...al:UserLogin&returnto=GPU+Driver+Internals.html | 199 +++ ...le=Special:UserLogin&returnto=GPU+Firmware.html | 199 +++ ...rnto=GPU+Software+Bill+Of+Materials+(SBOM).html | 199 +++ ...tle=Special:UserLogin&returnto=GPU+Support.html | 199 +++ ...?title=Special:UserLogin&returnto=Glossary.html | 199 +++ ...cial:UserLogin&returnto=Hypervisor+Support.html | 199 +++ ...ntel+SR-IOV+APIs&returntoquery=redirect=no.html | 199 +++ ...php?title=Special:UserLogin&returnto=Intel.html | 199 +++ ...le=Special:UserLogin&returnto=Introduction.html | 199 +++ ...ts+&+Definitions&returntoquery=redirect=no.html | 199 +++ ...rLogin&returnto=LIME+Is+Mediated+Emulation.html | 199 +++ ...ial:UserLogin&returnto=Looking+Glass+KVMFR.html | 199 +++ ...title=Special:UserLogin&returnto=Main+Page.html | 199 +++ ...?title=Special:UserLogin&returnto=Mdev-GPU.html | 199 +++ ...Device+Internals&returntoquery=redirect=no.html | 199 +++ ...=Special:UserLogin&returnto=Merged+Drivers.html | 199 +++ ...=Special:UserLogin&returnto=Open-IOV:About.html | 199 +++ ...hp?title=Special:UserLogin&returnto=OpenRM.html | 199 +++ ...e=Special:UserLogin&returnto=Talk:Mdev-GPU.html | 199 +++ ...tle=Special:UserLogin&returnto=VGPU+Unlock.html | 199 +++ ...UserLogin&returnto=Virtual+I%2FO+Internals.html | 199 +++ ...ual+IO+Internals&returntoquery=redirect=no.html | 199 +++ ...Login&returnto=Virtualization+Fundamentals.html | 199 +++ .../index.php?title=Talk:Mdev-GPU&action=edit.html | 196 +++ ...dex.php?title=Talk:Mdev-GPU&action=history.html | 206 +++ .../index.php?title=Talk:Mdev-GPU&action=info.html | 220 +++ .../index.php?title=Talk:Mdev-GPU&oldid=715.html | 213 +++ ...hp?title=User:Arthur&action=edit&redlink=1.html | 191 +++ ...tle=User_talk:Arthur&action=edit&redlink=1.html | 191 +++ .../index.php?title=VGPU_Unlock&action=edit.html | 202 +++ ...index.php?title=VGPU_Unlock&action=history.html | 206 +++ .../index.php?title=VGPU_Unlock&action=info.html | 218 +++ .../index.php?title=VGPU_Unlock&oldid=145.html | 216 +++ ...?title=Virtual_I%2FO_Internals&action=edit.html | 818 +++++++++ ...tle=Virtual_I%2FO_Internals&action=history.html | 256 +++ ...?title=Virtual_I%2FO_Internals&action=info.html | 218 +++ ...?title=Virtual_I%2FO_Internals&oldid=23792.html | 1014 ++++++++++++ ...php?title=Virtual_IO_Internals&action=edit.html | 196 +++ ...?title=Virtual_IO_Internals&action=history.html | 206 +++ ...php?title=Virtual_IO_Internals&action=info.html | 219 +++ ...x.php?title=Virtual_IO_Internals&oldid=686.html | 213 +++ ...php?title=Virtual_IO_Internals&redirect=no.html | 211 +++ ...le=Virtualization_Fundamentals&action=edit.html | 221 +++ ...Virtualization_Fundamentals&action=history.html | 215 +++ ...le=Virtualization_Fundamentals&action=info.html | 218 +++ ...le=Virtualization_Fundamentals&oldid=23743.html | 248 +++ ...ector.styles.legacy&only=styles&skin=vector.css | 1 + ...ector.styles.legacy&only=styles&skin=vector.css | 1 + ...ector.styles.legacy&only=styles&skin=vector.css | 1 + ...ector.styles.legacy&only=styles&skin=vector.css | 1 + ...&modules=startup&only=scripts&raw=1&skin=vector | 37 + wiki/open-iov.org/opensearch_desc.php | 1 + .../assets/poweredby_mediawiki_132x47.png | Bin 0 -> 6628 bytes .../assets/poweredby_mediawiki_176x62.png | Bin 0 -> 9397 bytes .../resources/assets/poweredby_mediawiki_88x31.png | Bin 0 -> 3839 bytes .../images/sort_both.svg?0e440 | 4 + .../images/sort_down.svg?4b69e | 4 + .../images/sort_up.svg?2ff5c | 4 + .../src/mediawiki.action/images/checker.svg?ff513 | 4 + .../images/nextredirect-ltr.png?778f7 | Bin 0 -> 118 bytes .../images/nextredirect-ltr.svg?3ffd5 | 5 + .../images/nextredirect-rtl.png?3fa7a | Bin 0 -> 115 bytes .../images/nextredirect-rtl.svg?67397 | 5 + .../mediawiki.action/images/redirect-ltr.png?926f7 | Bin 0 -> 164 bytes .../mediawiki.action/images/redirect-ltr.svg?ff441 | 5 + .../mediawiki.action/images/redirect-rtl.png?adb14 | Bin 0 -> 139 bytes .../mediawiki.action/images/redirect-rtl.svg?db62f | 5 + .../mediawiki.skinning/images/audio-ltr.svg?74d04 | 6 + .../mediawiki.skinning/images/chat-ltr.svg?e0649 | 4 + .../images/document-ltr.svg?0bf90 | 5 + .../images/external-ltr.svg?59558 | 6 + .../mediawiki.skinning/images/ftp-ltr.svg?c5643 | 7 + .../images/magnify-clip-ltr.svg?8330e | 7 + .../images/magnify-clip-rtl.svg?38fd5 | 7 + .../src/mediawiki.skinning/images/mail.svg?8a79c | 5 + .../src/mediawiki.skinning/images/video.svg?a3758 | 6 + wiki/open-iov.org/robots.txt.html | 245 +++ .../resources/common/images/arrow-down.svg?9426f | 4 + .../resources/common/images/bullet-icon.svg?d4515 | 4 + .../common/images/external-link-ltr-icon.svg?48e54 | 6 + .../common/images/portal-separator.png?4ab04 | Bin 0 -> 139 bytes .../resources/common/images/search.svg?bbf78 | 7 + .../common/images/tab-normal-fade.png?1cc52 | Bin 0 -> 116 bytes .../common/images/tab-separator.png?09d4b | Bin 0 -> 124 bytes .../common/images/unwatch-icon-hl.svg?5e652 | 12 + .../resources/common/images/unwatch-icon.svg?c5368 | 15 + .../common/images/unwatch-temp-icon-hl.svg?f3db6 | 18 + .../common/images/unwatch-temp-icon.svg?195f5 | 18 + .../common/images/watch-icon-hl.svg?9bf90 | 7 + .../resources/common/images/watch-icon.svg?6ab6f | 7 + .../images/user-avatar.svg?b7f58 | 7 + wiki/vGPU-IO-Integration-Guide.md | 480 ++++++ 773 files changed, 117516 insertions(+) create mode 100644 wiki/Address-Reference.md create mode 100644 wiki/BAR-Emulation-Specification.md create mode 100644 wiki/Error-Codes.md create mode 100644 wiki/GPU_Driver_Internals.md create mode 100644 wiki/GPU_Firmware.md create mode 100644 wiki/GPU_SBOM.md create mode 100644 wiki/GSP-570.144W-Firmware-Analysis.md create mode 100644 wiki/GSP-RPC-Emulation.md create mode 100644 wiki/Glossary.md create mode 100644 wiki/Migration-Protocol.md create mode 100644 wiki/README.md create mode 100644 wiki/RPC-Message-Format.md create mode 100644 wiki/Virtual_IO_Internals.md create mode 100644 wiki/WPR-Management.md create mode 100644 wiki/open-iov.org/api.php?action=rsd create mode 100644 wiki/open-iov.org/favicon.ico.html create mode 100644 wiki/open-iov.org/images/0/0b/Intel_GVT-g_Capabilities.png create mode 100644 wiki/open-iov.org/images/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png create mode 100644 wiki/open-iov.org/images/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png create mode 100644 wiki/open-iov.org/images/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png create mode 100644 wiki/open-iov.org/images/2/2b/Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/3/33/IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png create mode 100644 wiki/open-iov.org/images/3/3f/Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/4/43/VFIO_Diagram.png create mode 100644 wiki/open-iov.org/images/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/5/58/Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/6/65/SR-IOV.png create mode 100644 wiki/open-iov.org/images/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/7/73/NUMA_Node.png create mode 100644 wiki/open-iov.org/images/7/75/Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/8/8a/KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png create mode 100644 wiki/open-iov.org/images/9/9d/Application_Binary_Interface_(ABI).png create mode 100644 wiki/open-iov.org/images/9/9e/Vfio-pci_driver_bindings.png create mode 100644 wiki/open-iov.org/images/a/aa/Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html create mode 100644 wiki/open-iov.org/images/b/b4/Virgl.png create mode 100644 wiki/open-iov.org/images/b/bb/Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html create mode 100644 wiki/open-iov.org/images/b/bc/Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html create mode 100644 wiki/open-iov.org/images/c/c2/Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/c/c3/I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/c/c7/VFIO-Mdev_Diagram.png create mode 100644 wiki/open-iov.org/images/d/d3/IVSHMEM.png create mode 100644 wiki/open-iov.org/images/d/df/SR-IOV-Diagram.png create mode 100644 wiki/open-iov.org/images/e/e0/Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/open-iov.png?d7807 create mode 100644 wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/120px-Intel_GVT-g_Capabilities.png create mode 100644 wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/300px-Intel_GVT-g_Capabilities.png create mode 100644 wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/450px-Intel_GVT-g_Capabilities.png create mode 100644 wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/600px-Intel_GVT-g_Capabilities.png create mode 100644 wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/800px-Intel_GVT-g_Capabilities.png create mode 100644 wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/120px-Screen_Shot_2022-11-18_at_4.14.32_PM.png create mode 100644 wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/300px-Screen_Shot_2022-11-18_at_4.14.32_PM.png create mode 100644 wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/450px-Screen_Shot_2022-11-18_at_4.14.32_PM.png create mode 100644 wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/600px-Screen_Shot_2022-11-18_at_4.14.32_PM.png create mode 100644 wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/120px-Screen_Shot_2022-05-06_at_10.46.59_AM.png create mode 100644 wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/300px-Screen_Shot_2022-05-06_at_10.46.59_AM.png create mode 100644 wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/450px-Screen_Shot_2022-05-06_at_10.46.59_AM.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1137px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/120px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1516px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/300px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/450px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/600px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/758px-Type_1_IOMMU_Tracks_VA-GFN.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1139px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/120px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1518px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/300px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/450px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/600px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/759px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1148px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/120px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1530px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/300px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/450px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/600px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/765px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/293px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png create mode 100644 wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/300px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png create mode 100644 wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/440px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png create mode 100644 wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/450px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png create mode 100644 wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/58px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1200px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/120px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1599px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/300px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/450px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/600px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/800px-Telescope_LG-Proxy.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1115px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/120px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1486px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/300px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/450px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/600px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/743px-IOCTL_set_VFIO_container.png create mode 100644 wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/120px-Intel_i915_Host_DRM_+_VFIO-Mdev..png create mode 100644 wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/300px-Intel_i915_Host_DRM_+_VFIO-Mdev..png create mode 100644 wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/450px-Intel_i915_Host_DRM_+_VFIO-Mdev..png create mode 100644 wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/600px-Intel_i915_Host_DRM_+_VFIO-Mdev..png create mode 100644 wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/800px-Intel_i915_Host_DRM_+_VFIO-Mdev..png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1200px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/120px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1600px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/300px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/450px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/600px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/800px-Ioctl-VFIO_GROUP_GET_FD.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1200px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/120px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1599px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/300px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/450px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/600px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/800px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1148px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/120px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1529px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/300px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/450px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/600px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/765px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png create mode 100644 wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/300px-VFIO_Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/91px-VFIO_Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/1005px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/120px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/300px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/450px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/600px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/670px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1200px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/120px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1600px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/300px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/450px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/600px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/800px-Memory_Regions_Added_by_QEMU.png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1166px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/120px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1554px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/300px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/450px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/600px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/777px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png create mode 100644 wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/120px-SR-IOV.png create mode 100644 wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/300px-SR-IOV.png create mode 100644 wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/450px-SR-IOV.png create mode 100644 wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/600px-SR-IOV.png create mode 100644 wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/754px-SR-IOV.png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1200px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/120px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1600px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/300px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/450px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/600px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/800px-Figure_0-_Approches_to_GPU_Virtualization..png create mode 100644 wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/120px-NUMA_Node.png create mode 100644 wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/300px-NUMA_Node.png create mode 100644 wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/450px-NUMA_Node.png create mode 100644 wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/600px-NUMA_Node.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1200px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/120px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1600px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/300px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/450px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/600px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/800px-Mdev-gpu.png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1155px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/120px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1539px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/300px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/450px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/600px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/770px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png create mode 100644 wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/1200px-KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/120px-KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/300px-KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/450px-KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/600px-KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/800px-KVMFR_Looking_Glass.png create mode 100644 wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/120px-Device_Decomposure_and_Recomposure_via_VFIO.png create mode 100644 wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/300px-Device_Decomposure_and_Recomposure_via_VFIO.png create mode 100644 wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/450px-Device_Decomposure_and_Recomposure_via_VFIO.png create mode 100644 wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/600px-Device_Decomposure_and_Recomposure_via_VFIO.png create mode 100644 wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/800px-Device_Decomposure_and_Recomposure_via_VFIO.png create mode 100644 wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/120px-Application_Binary_Interface_(ABI).png create mode 100644 wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/300px-Application_Binary_Interface_(ABI).png create mode 100644 wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/450px-Application_Binary_Interface_(ABI).png create mode 100644 wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/600px-Application_Binary_Interface_(ABI).png create mode 100644 wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/120px-Vfio-pci_driver_bindings.png create mode 100644 wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/300px-Vfio-pci_driver_bindings.png create mode 100644 wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/450px-Vfio-pci_driver_bindings.png create mode 100644 wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/600px-Vfio-pci_driver_bindings.png create mode 100644 wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/800px-Vfio-pci_driver_bindings.png create mode 100644 wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/1200px-Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/120px-Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/300px-Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/450px-Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/600px-Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/800px-Ioeventfd-and-irqfd.png create mode 100644 wiki/open-iov.org/images/thumb/b/b4/Virgl.png/300px-Virgl.png create mode 100644 wiki/open-iov.org/images/thumb/b/b4/Virgl.png/90px-Virgl.png create mode 100644 wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/1191px-Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/120px-Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/300px-Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/450px-Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/600px-Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/794px-Figure_0-_i915_vGPU_Scheduling.png create mode 100644 wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/1162px-I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/120px-I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/300px-I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/450px-I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/600px-I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/775px-I915_Scheduling_Events_and_Requests.png create mode 100644 wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/300px-VFIO-Mdev_Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/450px-VFIO-Mdev_Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/453px-VFIO-Mdev_Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/91px-VFIO-Mdev_Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/120px-IVSHMEM.png create mode 100644 wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/300px-IVSHMEM.png create mode 100644 wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/450px-IVSHMEM.png create mode 100644 wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/600px-IVSHMEM.png create mode 100644 wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/800px-IVSHMEM.png create mode 100644 wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/120px-SR-IOV-Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/300px-SR-IOV-Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/450px-SR-IOV-Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/600px-SR-IOV-Diagram.png create mode 100644 wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/1160px-Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/120px-Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/300px-Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/450px-Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/600px-Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/773px-Figure_2-_Intel_vGPU_Scheduler.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1149px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/120px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1532px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/300px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/450px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/600px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/766px-Echoing_a_UUID_into_the_sysfsdev_API.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1145px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/120px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1526px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/300px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/450px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/600px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/763px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1196px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/120px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1594px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/300px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/450px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/600px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/797px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png create mode 100644 wiki/open-iov.org/index.html create mode 100644 wiki/open-iov.org/index.php/AMDGPU.html create mode 100644 wiki/open-iov.org/index.php/Articles.html create mode 100644 wiki/open-iov.org/index.php/CPU_Support.html create mode 100644 wiki/open-iov.org/index.php/File:Application_Binary_Interface_(ABI).png.html create mode 100644 wiki/open-iov.org/index.php/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html create mode 100644 wiki/open-iov.org/index.php/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_0-_Approches_to_GPU_Virtualization..png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_0-_i915_vGPU_Scheduling.png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_2-_Intel_vGPU_Scheduler.png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html create mode 100644 wiki/open-iov.org/index.php/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html create mode 100644 wiki/open-iov.org/index.php/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html create mode 100644 wiki/open-iov.org/index.php/File:I915_Scheduling_Events_and_Requests.png.html create mode 100644 wiki/open-iov.org/index.php/File:IOCTL_set_VFIO_container.png.html create mode 100644 wiki/open-iov.org/index.php/File:IVSHMEM.png.html create mode 100644 wiki/open-iov.org/index.php/File:Intel_GVT-g_Capabilities.png.html create mode 100644 wiki/open-iov.org/index.php/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html create mode 100644 wiki/open-iov.org/index.php/File:Ioctl-VFIO_GROUP_GET_FD.png.html create mode 100644 wiki/open-iov.org/index.php/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html create mode 100644 wiki/open-iov.org/index.php/File:Ioeventfd-and-irqfd.png.html create mode 100644 wiki/open-iov.org/index.php/File:KVMFR_Looking_Glass.png.html create mode 100644 wiki/open-iov.org/index.php/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html create mode 100644 wiki/open-iov.org/index.php/File:Mdev-gpu.png.html create mode 100644 wiki/open-iov.org/index.php/File:Memory_Regions_Added_by_QEMU.png.html create mode 100644 wiki/open-iov.org/index.php/File:NUMA_Node.png.html create mode 100644 wiki/open-iov.org/index.php/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html create mode 100644 wiki/open-iov.org/index.php/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html create mode 100644 wiki/open-iov.org/index.php/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html create mode 100644 wiki/open-iov.org/index.php/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html create mode 100644 wiki/open-iov.org/index.php/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html create mode 100644 wiki/open-iov.org/index.php/File:SR-IOV-Diagram.png.html create mode 100644 wiki/open-iov.org/index.php/File:SR-IOV.png.html create mode 100644 wiki/open-iov.org/index.php/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html create mode 100644 wiki/open-iov.org/index.php/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html create mode 100644 wiki/open-iov.org/index.php/File:Telescope_LG-Proxy.png.html create mode 100644 wiki/open-iov.org/index.php/File:Type_1_IOMMU_Tracks_VA-GFN.png.html create mode 100644 wiki/open-iov.org/index.php/File:VFIO-Mdev_Diagram.png.html create mode 100644 wiki/open-iov.org/index.php/File:VFIO_Diagram.png.html create mode 100644 wiki/open-iov.org/index.php/File:Vfio-pci_driver_bindings.png.html create mode 100644 wiki/open-iov.org/index.php/File:Virgl.png.html create mode 100644 wiki/open-iov.org/index.php/GPU_Driver_Internals.html create mode 100644 wiki/open-iov.org/index.php/GPU_Firmware.html create mode 100644 wiki/open-iov.org/index.php/GPU_Software_Bill_Of_Materials_(SBOM).html create mode 100644 wiki/open-iov.org/index.php/GPU_Support.html create mode 100644 wiki/open-iov.org/index.php/Glossary.html create mode 100644 wiki/open-iov.org/index.php/Hypervisor_Support.html create mode 100644 wiki/open-iov.org/index.php/Intel.html create mode 100644 wiki/open-iov.org/index.php/Intel_SR-IOV_APIs.html create mode 100644 wiki/open-iov.org/index.php/Introduction.html create mode 100644 wiki/open-iov.org/index.php/Introductory_Concepts_&_Definitions.html create mode 100644 wiki/open-iov.org/index.php/LIME_Is_Mediated_Emulation.html create mode 100644 wiki/open-iov.org/index.php/Looking_Glass_KVMFR.html create mode 100644 wiki/open-iov.org/index.php/Mdev-GPU.html create mode 100644 wiki/open-iov.org/index.php/Mediated_Device_Internals.html create mode 100644 wiki/open-iov.org/index.php/Merged_Drivers.html create mode 100644 wiki/open-iov.org/index.php/Open-IOV:About.html create mode 100644 wiki/open-iov.org/index.php/OpenRM.html create mode 100644 wiki/open-iov.org/index.php/Special:Contributions/Arthur.html create mode 100644 wiki/open-iov.org/index.php/Special:Random.html create mode 100644 wiki/open-iov.org/index.php/Special:SpecialPages.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Articles.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/CPU_Support.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Application_Binary_Interface_(ABI).png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_Approches_to_GPU_Virtualization..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_i915_vGPU_Scheduling.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Intel_vGPU_Scheduler.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:I915_Scheduling_Events_and_Requests.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IOCTL_set_VFIO_container.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IVSHMEM.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_GVT-g_Capabilities.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_GROUP_GET_FD.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioeventfd-and-irqfd.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVMFR_Looking_Glass.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Mdev-gpu.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Memory_Regions_Added_by_QEMU.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:NUMA_Node.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV-Diagram.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Telescope_LG-Proxy.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Type_1_IOMMU_Tracks_VA-GFN.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO-Mdev_Diagram.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO_Diagram.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Vfio-pci_driver_bindings.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Virgl.png.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Driver_Internals.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Firmware.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Software_Bill_Of_Materials_(SBOM).html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Support.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Glossary.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel_SR-IOV_APIs.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Introduction.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Introductory_Concepts_&_Definitions.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Merged_Drivers.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/OpenRM.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_I/O_Internals.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_IO_Internals.html create mode 100644 wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtualization_Fundamentals.html create mode 100644 wiki/open-iov.org/index.php/Talk:Mdev-GPU.html create mode 100644 wiki/open-iov.org/index.php/VGPU_Unlock.html create mode 100644 wiki/open-iov.org/index.php/Virtual_I/O_Internals.html create mode 100644 wiki/open-iov.org/index.php/Virtual_IO_Internals.html create mode 100644 wiki/open-iov.org/index.php/Virtualization_Fundamentals.html create mode 100644 wiki/open-iov.org/index.php?title=AMD&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=AMD&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=AMD&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=AMD&oldid=38.html create mode 100644 wiki/open-iov.org/index.php?title=AMDGPU&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=AMDGPU&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=AMDGPU&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=AMDGPU&oldid=23746.html create mode 100644 wiki/open-iov.org/index.php?title=Articles&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Articles&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Articles&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Articles&oldid=23794.html create mode 100644 wiki/open-iov.org/index.php?title=CPU_Support&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=CPU_Support&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=CPU_Support&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=CPU_Support&oldid=23744.html create mode 100644 wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&oldid=48.html create mode 100644 wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&oldid=399.html create mode 100644 wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&oldid=462.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&oldid=5587.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&oldid=5617.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&oldid=884.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&oldid=5644.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&oldid=23658.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&oldid=416.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&oldid=447.html create mode 100644 wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&oldid=492.html create mode 100644 wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&oldid=5633.html create mode 100644 wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&oldid=343.html create mode 100644 wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:IVSHMEM.png&oldid=45.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&oldid=105.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&oldid=103.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&oldid=347.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&oldid=351.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&oldid=377.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&oldid=46.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&oldid=498.html create mode 100644 wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&oldid=706.html create mode 100644 wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&oldid=815.html create mode 100644 wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:NUMA_Node.png&oldid=47.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&oldid=817.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&oldid=502.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&oldid=470.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&oldid=487.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&oldid=477.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&oldid=50.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:SR-IOV.png&oldid=49.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&oldid=396.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&oldid=869.html create mode 100644 wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&oldid=296.html create mode 100644 wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&oldid=821.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&oldid=41.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&oldid=40.html create mode 100644 wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&oldid=341.html create mode 100644 wiki/open-iov.org/index.php?title=File:Virgl.png&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=File:Virgl.png&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=File:Virgl.png&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=File:Virgl.png&oldid=52.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Driver_Internals&oldid=23791.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Firmware&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Firmware&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Firmware&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Firmware&oldid=23779.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Support&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Support&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Support&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=GPU_Support&oldid=23752.html create mode 100644 wiki/open-iov.org/index.php?title=Glossary&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Glossary&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Glossary&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Glossary&oldid=23763.html create mode 100644 wiki/open-iov.org/index.php?title=Hypervisor_Support&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Hypervisor_Support&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Hypervisor_Support&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Hypervisor_Support&oldid=751.html create mode 100644 wiki/open-iov.org/index.php?title=Intel&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Intel&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Intel&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Intel&oldid=23757.html create mode 100644 wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&oldid=23756.html create mode 100644 wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Introduction&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Introduction&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Introduction&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Introduction&oldid=23688.html create mode 100644 wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&oldid=723.html create mode 100644 wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&oldid=786.html create mode 100644 wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&oldid=855.html create mode 100644 wiki/open-iov.org/index.php?title=Main_Page&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Main_Page&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Main_Page&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Main_Page&oldid=23765.html create mode 100644 wiki/open-iov.org/index.php?title=Mdev-GPU&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Mdev-GPU&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Mdev-GPU&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Mdev-GPU&oldid=23740.html create mode 100644 wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Mediated_Device_Internals&oldid=660.html create mode 100644 wiki/open-iov.org/index.php?title=Mediated_Device_Internals&redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Merged_Drivers&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Merged_Drivers&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Merged_Drivers&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Merged_Drivers&oldid=23737.html create mode 100644 wiki/open-iov.org/index.php?title=Open-IOV:About&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Open-IOV:About&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Open-IOV:About&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Open-IOV:About&oldid=5625.html create mode 100644 wiki/open-iov.org/index.php?title=OpenRM&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=OpenRM&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=OpenRM&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=OpenRM&oldid=23739.html create mode 100644 wiki/open-iov.org/index.php?title=Special:RecentChanges&feed=atom create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMD.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMDGPU.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Articles.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=CPU+Support.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Application+Binary+Interface+(ABI).png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Device+Decomposure+and+Recomposure+via+VFIO.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Echoing+a+UUID+into+the+sysfsdev+API.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+Approches+to+GPU+Virtualization..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+i915+vGPU+Scheduling.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Firmware+status+information+for+an+Intel+DG2+device..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Intel+vGPU+Scheduler.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+3-+GPU+BAR+to+Timeshared+Syhededuling+via+Channel+IO.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+6-+MMU+-+GMMU+IOVA+translation-isolation..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+7-+A+depiction+of+region+overlays+within+a+VFIO+file+descriptor..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Guest+driver+accessing+Mdev+MMIO+space+backed+by+mdev+file+descriptor+triggers+EPT+violation..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:I915+Scheduling+Events+and+Requests.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IOCTL+set+VFIO+container.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IVSHMEM.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+GVT-g+Capabilities.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+i915+Host+DRM+++VFIO-Mdev..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+GROUP+GET+FD.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+IOMMU+MAP-UNMAP+DMA.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioeventfd-and-irqfd.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVM+services+EPT+violation+and+forwards+to+QEMU+VFIO+PCI+driver..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVMFR+Looking+Glass.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Mdev-gpu.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Memory+Regions+Added+by+QEMU.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:NUMA+Node.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+calls+VFIO+DMA+MAP+via+Memory+listener.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+convert+request+from+KVM+to+Read-Write+acess+to+Mdev+file+descriptor..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+creates+VFIO-mdev+IOMMU+binding+and+acquires+mdev+file+descriptor..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+gets+region+info+via+VFIO+UAPI+from+vendor+driver+through+vfio-mdev+and+Mediated+CBs.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+presenting+the+VFIO+file+descriptor+into+the+virtual+machine..png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV-Diagram.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-05-06+at+10.46.59+AM.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-11-18+at+4.14.32+PM.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Telescope+LG-Proxy.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Type+1+IOMMU+Tracks+VA-GFN.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO+Diagram.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO-Mdev+Diagram.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Vfio-pci+driver+bindings.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Virgl.png.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Driver+Internals.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Firmware.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Software+Bill+Of+Materials+(SBOM).html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Support.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Glossary.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Hypervisor+Support.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel+SR-IOV+APIs&returntoquery=redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introduction.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introductory+Concepts+&+Definitions&returntoquery=redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=LIME+Is+Mediated+Emulation.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Looking+Glass+KVMFR.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Main+Page.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mdev-GPU.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mediated+Device+Internals&returntoquery=redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Merged+Drivers.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Open-IOV:About.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=OpenRM.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Talk:Mdev-GPU.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=VGPU+Unlock.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+I%2FO+Internals.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+IO+Internals&returntoquery=redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtualization+Fundamentals.html create mode 100644 wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&oldid=715.html create mode 100644 wiki/open-iov.org/index.php?title=User:Arthur&action=edit&redlink=1.html create mode 100644 wiki/open-iov.org/index.php?title=User_talk:Arthur&action=edit&redlink=1.html create mode 100644 wiki/open-iov.org/index.php?title=VGPU_Unlock&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=VGPU_Unlock&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=VGPU_Unlock&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=VGPU_Unlock&oldid=145.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&oldid=23792.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_IO_Internals&oldid=686.html create mode 100644 wiki/open-iov.org/index.php?title=Virtual_IO_Internals&redirect=no.html create mode 100644 wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=edit.html create mode 100644 wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=history.html create mode 100644 wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=info.html create mode 100644 wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&oldid=23743.html create mode 100644 wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|filepage|mediawiki.action.view.filepage|skins.vector.styles.legacy&only=styles&skin=vector.css create mode 100644 wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|jquery.makeCollapsible.styles|jquery.tablesorter.styles|skins.vector.styles.legacy&only=styles&skin=vector.css create mode 100644 wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|mediawiki.action.view.redirectPage|skins.vector.styles.legacy&only=styles&skin=vector.css create mode 100644 wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|skins.vector.styles.legacy&only=styles&skin=vector.css create mode 100644 wiki/open-iov.org/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector create mode 100644 wiki/open-iov.org/opensearch_desc.php create mode 100644 wiki/open-iov.org/resources/assets/poweredby_mediawiki_132x47.png create mode 100644 wiki/open-iov.org/resources/assets/poweredby_mediawiki_176x62.png create mode 100644 wiki/open-iov.org/resources/assets/poweredby_mediawiki_88x31.png create mode 100644 wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_both.svg?0e440 create mode 100644 wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_down.svg?4b69e create mode 100644 wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_up.svg?2ff5c create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/checker.svg?ff513 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.png?778f7 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.svg?3ffd5 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.png?3fa7a create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.svg?67397 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.png?926f7 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.svg?ff441 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.png?adb14 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.svg?db62f create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/audio-ltr.svg?74d04 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/chat-ltr.svg?e0649 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/document-ltr.svg?0bf90 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/external-ltr.svg?59558 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/ftp-ltr.svg?c5643 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg?8330e create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg?38fd5 create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/mail.svg?8a79c create mode 100644 wiki/open-iov.org/resources/src/mediawiki.skinning/images/video.svg?a3758 create mode 100644 wiki/open-iov.org/robots.txt.html create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/arrow-down.svg?9426f create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/bullet-icon.svg?d4515 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/external-link-ltr-icon.svg?48e54 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/portal-separator.png?4ab04 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/search.svg?bbf78 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/tab-normal-fade.png?1cc52 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/tab-separator.png?09d4b create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon-hl.svg?5e652 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon.svg?c5368 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg?f3db6 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon.svg?195f5 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon-hl.svg?9bf90 create mode 100644 wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon.svg?6ab6f create mode 100644 wiki/open-iov.org/skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg?b7f58 create mode 100644 wiki/vGPU-IO-Integration-Guide.md (limited to 'wiki') diff --git a/wiki/Address-Reference.md b/wiki/Address-Reference.md new file mode 100644 index 0000000..08df1a8 --- /dev/null +++ b/wiki/Address-Reference.md @@ -0,0 +1,206 @@ +# Address Reference + +## Firmware Base +| Symbol | Address | Description | +|--------|---------|-------------| +| `FW_BASE` | 0x04000000 | Firmware load address | +| `FW_SIZE` | 0x02000000 | ~32 MB | + +## Dispatchers +| Name | Address | Size | Description | +|------|---------|------|-------------| +| Entry Point | 0x04009000 | 573B | Boot entry | +| Primary Dispatcher | 0x057A1AC0 | 558B | Main RPC dispatcher | +| Secondary Dispatcher | 0x04ED39DC | 141KB | Branch-based dispatcher | +| Tertiary Dispatcher | 0x05723EF4 | 13KB | Additional dispatcher | +| RPC Jump Table | 0x059BE7F4 | 4.9KB | 12 RPC type table | +| RPC Type Table | 0x059BFEB0 | — | Actual handler addresses | + +## Primary Dispatcher Sub-Commands (Jump Table at 0x057A3AD8) +| Subcmd | Target | Decompiled | +|--------|--------|------------| +| 0 | 0x057A1DB4 | ✅ | +| 1 | 0x057A1C18 | ✅ | +| 2 | 0x057A39FC | ✅ | +| 3 | 0x057A1BCC | ✅ | +| 4 | 0x057A1EF4 | ✅ | +| 5 | 0x057A1E94 | ✅ | +| 6 | 0x057A3A28 | ✅ | +| 7 | 0x057A3A60 | ✅ | +| 8 | 0x057A1C6C | ✅ | +| 9 | 0x057A3A48 | ✅ | +| 10 | 0x057A1F6C | ✅ | +| 11 | 0x057A3AC4 | ✅ | +| 12 | 0x057A1E10 | ✅ | +| 13 | 0x057A3A90 | ✅ | +| 14 | 0x057A39BC | ✅ | +| 15 | 0x057A3AAC | ✅ | +| 16 | 0x057A3A78 | ✅ | +| 17 | 0x057A1CCC | ✅ | +| 18 | 0x057A39E0 | ✅ | +| 19 | 0x057A1FA8 | ✅ | +| 20 | 0x057A2094 | ✅ | +| 21 | 0x057A2074 | ✅ | +| 22 | 0x057A2044 | ✅ | +| 23 | 0x057A20D4 | ✅ | +| 24 | 0x057A20B4 | ✅ | +| 25 | 0x057A1FC8 | ✅ | +| 26 | 0x057A2008 | ✅ | +| 27 | 0x057A1FE8 | ✅ | +| 28 | 0x057A2024 | ✅ | +| 29 | 0x057A219C | ✅ | +| 30 | 0x057A20FC | ✅ | +| 31 | 0x057A214C | ✅ | + +## Migration Jump Tables +### Table 1: 0x04179ED8 (MIGRATE branch at 0x057A1BDC) +| Index | Target | Decompiled | +|-------|--------|------------| +| 0 | 0x057A2344 | ✅ | +| 1 | 0x057A2320 | ✅ | +| 2 | 0x057A230C | ✅ | +| 3 | 0x057A22F8 | ✅ | +| 4 | 0x057A2388 | ✅ | +| 5 | 0x057A23D8 | ✅ | +| 6 | 0x057A23AC | ✅ | +| 7 | 0x057A2478 | ✅ | +| 8 | 0x057A2428 | ✅ | +| 9 | 0x057A2454 | ✅ | +| 10 | 0x057A2404 | ✅ | +| 11 | 0x057A2364 | ✅ | +| 12 | 0x057A1F3C | (dup) | +| 13 | 0x057A299C | — | +| 14 | 0x057A1F3C | (dup) | +| 15 | 0x057A1F3C | (dup) | + +### Table 2: 0x04179FBC (MIGRATE branch at 0x057A1D5C) +| Index | Target | Decompiled | +|-------|--------|------------| +| 0 | 0x057A257C | ✅ | +| 1 | 0x057A25E4 | ✅ | +| 2 | 0x057A24EC | ✅ | +| 3 | 0x057A2608 | ✅ | +| 4 | 0x057A2534 | ✅ | +| 5 | 0x057A25C0 | ✅ | +| 6 | 0x057A24A4 | ✅ | +| 7 | 0x057A259C | ✅ | +| 8 | 0x057A2510 | ✅ | +| 9 | 0x057A2558 | ✅ | +| 10 | 0x057A24C8 | ✅ | +| 11 | 0x057A262C | ✅ | +| 12 | 0x057A345C | ✅ | +| 13 | 0x057A36D8 | ✅ | +| 14 | 0x057A35D8 | ✅ | +| 15 | 0x057A3658 | ✅ | + +## RPC Handlers (from Jump Table at 0x059BFEB0) +| RPC Type | Name | Handler A | Handler B | +|----------|------|-----------|-----------| +| 0x01 | ALLOC | — | — | +| 0x02 | FREE | — | — | +| 0x03 | MAP | 0x05766AB7 | 0x05778A37 | +| 0x04 | UNMAP | 0x057669B7 | 0x05779937 | +| 0x05 | PIN | 0x057664B7 | 0x0577A3B7 | +| 0x06 | UNPIN | 0x057682B7 | 0x05779FB7 | +| 0x07 | SCHEDULE | 0x05767F37 | 0x0575AEB7 | +| 0x08 | YIELD | 0x0575AE37 | 0x05767337 | +| 0x09 | NOTIFY | 0x0577C8B7 | 0x05767837 | +| 0x0A | BAR_TRAP | 0x057675B7 | — | +| 0x0B | MIGRATE | — | — | +| 0x0C | DEBUG | — | — | + +## Specialized Main Handlers +| Function | Address | Size | +|----------|---------|------| +| `rpc_alloc_main` | 0x057E94EC | 40 KB | +| `rpc_schedule_main` | 0x051EFBF4 | 1.8 KB | +| `rpc_bar_trap_handler` | 0x04CB8188 | 40 KB | +| `rpc_pin_handler` | 0x04ED34B8 | — | + +## WPR Handlers +| Handler | Address | Size | +|---------|---------|------| +| WPR Handler 1 | 0x04F00B0C | 62 KB | +| WPR Handler 2 | 0x04F00C78 | 62 KB | + +## Memory & Global State +| Symbol | Address | Description | +|--------|---------|-------------| +| Global Error Flag | 0x04296048 | `cRam0000000004296048` | +| Error Status Reg | 0x0429B750+0x111300 | Error register | +| Stack Canary | 0x041DC350 | Frame guard value | +| Allocator Arena | 0x429B000 | Base | +| Allocator Entry | 0x429B450 | `UNK_ram_058A1A9C` | +| Cache Manager | 0x429B428 | `UNK_ram_05895BF4` | + +## String References + +### BAR Strings +| String | Address | +|--------|---------| +| BAR1 | 0x0406570E, 0x04085DE0 | +| Bar1Rest | 0x040656DA | +| ForceBarAccess | 0x040656F2 | +| Bar1Aperture | 0x04065722 | +| Bar1Size | (referenced) | + +### WPR Strings +| String | Address | +|--------|---------| +| WPR_WRITE_COMPLETE | 0x5E478F8 | +| WPR_READ_COMPLETE | 0x5E478E0 | +| WPR_WRITE_TIMEOUT | 0x5E47898 | +| WPR_READ_TIMEOUT | 0x5E47880 | +| NV_WPR_WRITE_COMPLETE | 0x5E478C8 | +| NV_WPR_READ_COMPLETE | 0x5E478B0 | +| NV_WPR_WRITE_TIMEOUT | 0x5E47868 | +| NV_WPR_READ_TIMEOUT | 0x5E47850 | + +### VBIOS Signatures +| Signature | Value | Meaning | +|-----------|-------|---------| +| VBIOS Standard | 0xAA55 | VBIOS header | +| WPR Enable | 0x57464F4E ("WFON") | WPR on | +| WPR Version | 0x5746564E ("WFVN") | WPR version | + +## Key Function Pointers (Indirect Calls) +| Address | Function | Purpose | +|---------|----------|---------| +| 0x05AB7DA0 | Logger | String logging | +| 0x05AC4B7C | Stack unwind | Frame recovery | +| 0x058A1A9C | Allocator | Memory alloc | +| 0x05895BF4 | Cache flush | Cache management | +| 0x0588F9C4 | DMA copy | Memory copy | +| 0x05AEC86C | Memory read | Read from addr | +| 0x05AE1430 | Size query | Region size | +| 0x05AF4D30 | Page fault | Page fault handler | +| 0x05B10C3C | Page map | Page mapping | +| 0x05AE9A2C | Crypto/verify | Integrity check | +| 0x05AED674 | WPR check | WPR validation | +| 0x05AED430 | WPR emulate | WPR emulation | +| 0x05CB30CC | Config read | Config access | +| 0x05CB25E0 | BAR config | BAR configuration | +| 0x05CB23D8 | BAR map | BAR mapping | + +## Decompiled Output Files +All files in: `$OPEN_IOV_ROOT/firmware/570-GSP/decompiled/` + +| Category | Files | +|----------|-------| +| Core | entry_ram_04009000.c, FUN_ram_057a1ac0_ram_057a1ac0.c | +| Sub-commands | FUN_ram_057a1bcc_ram_057a1bcc.c ... FUN_ram_057a214c_ram_057a214c.c (32) | +| Dispatchers | FUN_ram_04cc58f8_ram_04cc58f8.c, FUN_ram_04ed39dc_ram_04ed39dc.c, FUN_ram_05723ef4_ram_05723ef4.c | +| RPC Jump Table | FUN_ram_059be7f4_ram_059be7f4.c | +| BAR | FUN_ram_04cb8188_ram_04cb8188.c | +| WPR | FUN_ram_04f00b0c_ram_04f00b0c.c, FUN_ram_04f00c78_ram_04f00c78.c | +| ALLOC | FUN_ram_057e94ec_ram_057e94ec.c, FUN_ram_04d00a18_ram_04d00a18.c, FUN_ram_054a7de0_ram_054a7de0.c | +| SCHEDULE | FUN_ram_051efbf4_ram_051efbf4.c | +| RPC Handlers | FUN_ram_057664b7_ram_057664b7.c ... FUN_ram_0577c8b7_ram_0577c8b7.c (15) | +| Migration | FUN_ram_057a22f8_ram_057a22f8.c ... FUN_ram_057a3658_ram_057a3658.c (28) | + +## Migration Sub-Command Descriptors (Sample) +| Handler | Returned ID | Phase | +|---------|-------------|-------| +| 0x057A22F8 | 0x10 | Prepare | +| 0x057A2344 | 0x14 | Prepare | +| Others | TBD | Transfer/Commit | \ No newline at end of file diff --git a/wiki/BAR-Emulation-Specification.md b/wiki/BAR-Emulation-Specification.md new file mode 100644 index 0000000..b8a46c3 --- /dev/null +++ b/wiki/BAR-Emulation-Specification.md @@ -0,0 +1,321 @@ +# BAR Emulation Specification (GSP 570.144W) + +## Overview +The GSP firmware implements BAR (Base Address Register) emulation for virtual GPU (vGPU) through the **BAR_TRAP** RPC (type 0x0A). The main handler at **0x04CB8188** (40 KB) manages BAR1 aperture, forced access, and memory backing. + +## Key Addresses + +| Component | Address | Description | +|-----------|---------|-------------| +| BAR Trap Handler | 0x04CB8188 | Main emulation logic (40 KB) | +| RPC Jump Table Entry | 0x057675B7 | BAR_TRAP in secondary dispatcher | +| String: BAR1 | 0x0406570E, 0x04085DE0 | BAR1 identifier | +| String: Bar1Rest | 0x040656DA | BAR1 restore state | +| String: ForceBarAccess | 0x040656F2 | Forced access control | +| String: Bar1Aperture | 0x04065722 | Aperture configuration | +| Memory Allocator | 0x429B450 | Arena for BAR backing store | +| Cache Management | 0x429B428 | Flush/invalidate | + +## Handler State Machine + +### Main Loop (0x04CB8188) +The handler runs a continuous event loop processing BAR trap requests: + +```c +while (true) { + // Wait for trap event (bitmask in unaff_s5) + event = wait_for_bar_event(); + + switch (event & 0x3F) { + case 0x01: // BAR1 write access + handle_bar1_write(); + break; + case 0x02: // BAR1 read access + handle_bar1_read(); + break; + case 0x08: // Aperture configuration + handle_aperture_config(); + break; + case 0x10: // ForceBarAccess + handle_force_access(); + break; + case 0x20: // Bar1Rest (restore) + handle_bar1_restore(); + break; + default: + return ERROR_UNKNOWN_EVENT; + } +} +``` + +### Event Bitmask +| Bit | Event | Description | +|-----|-------|-------------| +| 0 | BAR1_WRITE | Guest VF wrote to BAR1 | +| 1 | BAR1_READ | Guest VF read from BAR1 | +| 3 | APERTURE | Aperture size/offset change | +| 4 | FORCE_ACCESS | ForceBarAccess triggered | +| 5 | BAR1_REST | Restore BAR1 state | + +## Memory Management + +### Allocator Arena (0x429B450) +```c +// Allocate backing store for BAR emulation +void *bar_alloc(size_t size) { + // Calls UNK_ram_058A1A9C(0x429B450, size) + // Returns pointer in 0x429B000 region +} + +// Free backing store +void bar_free(void *ptr) { + // Calls UNK_ram_05895BF4(0x429B428, ptr) +} +``` + +### Allocation Sizes +- **Standard BAR1 page**: 0x1000 (4 KB) +- **Aperture buffer**: 0x40000 (256 KB) max +- **Force access buffer**: 0x1000 (4 KB) + +### Cache Coherency +```c +// Flush cache for DMA +void bar_cache_flush(void *addr, size_t size) { + UNK_ram_05895BF4(0x429B428, addr); + UNK_ram_05895BF4(0x429B428, addr + size); +} +``` + +## BAR1 Emulation Logic + +### Write Path (Event 0x01) +```c +int handle_bar1_write(bar_trap_t *trap) { + // 1. Validate offset within aperture + if (trap->offset >= bar1_aperture_size) + return ERROR_OVERFLOW; + + // 2. Check ForceBarAccess flag + if (force_bar_access && !(trap->flags & FORCE_ALLOWED)) + return ERROR_PERMISSION; + + // 3. Translate to backing store + uint8_t *backing = bar1_backing + trap->offset; + + // 4. Perform write (1/2/4/8 bytes) + switch (trap->size) { + case 1: *backing = trap->value; break; + case 2: *(uint16_t*)backing = trap->value; break; + case 4: *(uint32_t*)backing = trap->value; break; + case 8: *(uint64_t*)backing = trap->value; break; + } + + // 5. Flush to device if needed + if (device_needs_flush) + bar_cache_flush(backing, trap->size); + + return OK; +} +``` + +### Read Path (Event 0x02) +```c +int handle_bar1_read(bar_trap_t *trap) { + if (trap->offset >= bar1_aperture_size) + return ERROR_OVERFLOW; + + uint8_t *backing = bar1_backing + trap->offset; + + switch (trap->size) { + case 1: *trap->out_value = *backing; break; + case 2: *trap->out_value = *(uint16_t*)backing; break; + case 4: *trap->out_value = *(uint32_t*)backing; break; + case 8: *trap->out_value = *(uint64_t*)backing; break; + } + + return OK; +} +``` + +### Aperture Configuration (Event 0x08) +```c +int handle_aperture_config(bar_config_t *cfg) { + // Validate new aperture + if (cfg->size > MAX_APERTURE_SIZE) // 0x40000 + return ERROR_INVALID; + + if (cfg->offset & 0xFFF) // Must be 4KB aligned + return ERROR_ALIGNMENT; + + // Reallocate backing store if size changed + if (cfg->size != bar1_aperture_size) { + void *new_backing = bar_alloc(cfg->size); + if (!new_backing) return ERROR_NOMEM; + + // Copy existing data + memcpy(new_backing, bar1_backing, + min(cfg->size, bar1_aperture_size)); + + bar_free(bar1_backing); + bar1_backing = new_backing; + bar1_aperture_size = cfg->size; + } + + bar1_aperture_offset = cfg->offset; + return OK; +} +``` + +### ForceBarAccess (Event 0x10) +```c +int handle_force_access(force_access_t *fa) { + // ForceBarAccess allows hypervisor to bypass VF permissions + // Used for live migration, checkpoint/restore + + force_bar_access = fa->enable; + force_access_vf = fa->vf_id; + force_access_range = fa->range; + + // Allocate shadow buffer for forced operations + if (fa->enable) { + force_buffer = bar_alloc(0x1000); + if (!force_buffer) return ERROR_NOMEM; + } else { + bar_free(force_buffer); + force_buffer = NULL; + } + + return OK; +} +``` + +### Bar1Rest - State Restore (Event 0x20) +```c +int handle_bar1_restore(restore_state_t *rs) { + // Restore BAR1 state from checkpoint + // Used during VF live migration + + bar1_aperture_offset = rs->aperture_offset; + bar1_aperture_size = rs->aperture_size; + force_bar_access = rs->force_access; + + // Restore backing store from serialized data + if (rs->backing_size > 0) { + void *new_backing = bar_alloc(rs->backing_size); + if (!new_backing) return ERROR_NOMEM; + + memcpy(new_backing, rs->backing_data, rs->backing_size); + bar_free(bar1_backing); + bar1_backing = new_backing; + } + + return OK; +} +``` + +## vGPU-IO Integration + +### Kernel BAR Trap Registration +```c +struct gsp_bar_ops { + int (*bar_trap)(struct gsp_device *gsp, + struct bar_trap_msg *msg); + int (*configure_aperture)(struct gsp_device *gsp, + uint32_t vf_id, + uint64_t offset, uint64_t size); + int (*force_access)(struct gsp_device *gsp, + uint32_t vf_id, bool enable); + int (*save_state)(struct gsp_device *gsp, + uint32_t vf_id, void *buf, size_t *size); + int (*restore_state)(struct gsp_device *gsp, + uint32_t vf_id, void *buf, size_t size); +}; + +static const struct gsp_bar_ops gsp_bar_ops = { + .bar_trap = gsp_bar_trap_handler, + .configure_aperture = gsp_bar_config_aperture, + .force_access = gsp_bar_force_access, + .save_state = gsp_bar_save_state, + .restore_state = gsp_bar_restore_state, +}; +``` + +### VF BAR Configuration +```c +int gsp_vf_bar_init(struct gsp_vf *vf) { + struct bar_config cfg = { + .vf_id = vf->id, + .bar = 1, // BAR1 + .aperture_offset = vf->bar1_offset, + .aperture_size = vf->bar1_size, + .flags = BAR_FLAG_COHERENT, + }; + + return gsp_rpc_send(vf->gsp, RPC_BAR_TRAP, + BAR_SUBCMD_CONFIG, &cfg, sizeof(cfg)); +} +``` + +### Live Migration Support +```c +// Save BAR state for migration +int gsp_vf_bar_save(struct gsp_vf *vf, void *buf, size_t *size) { + struct bar_save_msg msg = { + .vf_id = vf->id, + .bar = 1, + }; + + return gsp_rpc_send(vf->gsp, RPC_BAR_TRAP, + BAR_SUBCMD_SAVE, &msg, sizeof(msg), + buf, size); +} + +// Restore BAR state on destination +int gsp_vf_bar_restore(struct gsp_vf *vf, void *buf, size_t size) { + struct bar_restore_msg msg = { + .vf_id = vf->id, + .bar = 1, + .data = buf, + .data_size = size, + }; + + return gsp_rpc_send(vf->gsp, RPC_BAR_TRAP, + BAR_SUBCMD_RESTORE, &msg, sizeof(msg)); +} +``` + +## Error Handling + +| Error | Code | Recovery | +|-------|------|----------| +| OOM (0x51) | Allocator exhausted | Shrink aperture, retry | +| Timeout (0x1E) | Cache flush timeout | Reset BAR, reinitialize | +| Invalid (0x1F) | Bad aperture config | Validate alignment/size | +| Permission (0xFFFF) | ForceAccess violation | Check VF permissions | +| Overflow (0x25) | Offset beyond aperture | Bounds check in VF driver | + +## Debugging + +### Key Registers to Monitor +``` +0x04296048 : Global error flag (cRam0000000004296048) +0x0429B750 : Error status (0x111300 offset) +0x429B428 : Cache management base +0x429B450 : Allocator arena base +``` + +### Log Strings +Search for these in GSP logs: +- `BAR1` - BAR1 access +- `Bar1Rest` - State restore +- `ForceBarAccess` - Forced access +- `Bar1Aperture` - Aperture changes +- `Bar1Size` - Size queries + +--- + +## Reference +- Handler: `FUN_ram_04cb8188_ram_04cb8188.c` (40 KB) +- RPC Type: 0x0A (BAR_TRAP) +- Jump Table Entry: 0x057675B7 \ No newline at end of file diff --git a/wiki/Error-Codes.md b/wiki/Error-Codes.md new file mode 100644 index 0000000..c61da06 --- /dev/null +++ b/wiki/Error-Codes.md @@ -0,0 +1,198 @@ +# GSP Error Codes + +## Standard POSIX Errors (Negative Return Values) + +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0 | 0x00000000 | OK | Success | +| -1 | 0xFFFFFFFF | EPERM | Operation not permitted | +| -2 | 0xFFFFFFFE | ENOENT | No such file/entry | +| -3 | 0xFFFFFFFD | EINVAL | Invalid argument | +| -6 | 0xFFFFFFFA | ENODEV | No such device | +| -12 | 0xFFFFFFF4 | ENOMEM | Out of memory | +| -16 | 0xFFFFFFEE | EBUSY | Device/resource busy | +| -22 | 0xFFFFFFEA | EINVAL | Invalid argument | +| -28 | 0xFFFFFFE4 | ENOSPC | No space left on device | +| -37 | 0xFFFFFFDB | ENOLCK | No locks available | +| -56 | 0xFFFFFFC8 | EBADMSG | Bad message | +| -84 | 0xFFFFFFAC | EOVERFLOW | Value too large | +| -90 | 0xFFFFA6 | ENOSTR | Not a stream | +| -91 | 0xFFFFA5 | ENODATA | No data available | +| -94 | 0xFFFFA2 | ENOSR | Out of streams resources | +| -97 | 0xFFFFFF9F | EPROTO | Protocol error | +| -111 | 0xFFFFFF91 | ETIMEDOUT | Connection timed out | + +## GSP-Specific Error Codes (Observed in Firmware) + +### Memory Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x1E | 0x0000001E | ETIME | WPR/RPC timeout | +| 0x1F | 0x0000001F | EDEV | Device error | +| 0x25 | 0x00000025 | EOVERFLOW | Region/offset overflow | +| 0x37 | 0x00000037 | EINVAL | Invalid alignment/size | +| 0x51 | 0x00000051 | ENOMEM | Allocator exhausted | +| 0x56 | 0x00000056 | EBUSY | Resource busy | +| 0xFFFF | 0xFFFFFFFF | EPERM | Permission denied | + +### RPC Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x1D | 0x0000001D | EFAULT | Bad address in RPC | +| 0x1E | 0x0000001E | ETIMEDOUT | RPC timeout | +| 0x1F | 0x0000001F | EPROTO | Protocol violation | +| 0x20 | 0x00000020 | EBADRPC | Invalid RPC type | +| 0x21 | 0x00000021 | EBADSEQ | Sequence mismatch | +| 0x22 | 0x00000022 | EBADSIZE | Payload size error | + +### BAR Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x30 | 0x00000030 | EBARINVAL | Invalid BAR index | +| 0x31 | 0x00000031 | EBARPERM | BAR access denied | +| 0x32 | 0x00000032 | EBARSIZE | Aperture size error | +| 0x33 | 0x00000033 | EBARALIGN | Alignment error | +| 0x34 | 0x00000034 | EBARRANGE | Offset out of range | +| 0x35 | 0x00000035 | EBARBUSY | BAR busy | + +### WPR Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x40 | 0x00000040 | EWPRINVAL | Invalid WPR region | +| 0x41 | 0x00000041 | EWPRPERM | WPR permission denied | +| 0x42 | 0x00000042 | EWPROVERLAP | Overlapping WPR regions | +| 0x43 | 0x00000043 | EWPRBUSY | WPR operation in progress | +| 0x44 | 0x00000044 | EWPRTIMEOUT | WPR timeout | + +### Migration Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x50 | 0x00000050 | EMIGINVAL | Invalid migration phase | +| 0x51 | 0x00000051 | EMIGNOMEM | Migration buffer OOM | +| 0x52 | 0x00000052 | EMIGBUSY | Migration in progress | +| 0x53 | 0x00000053 | EMIGPHASE | Phase mismatch | +| 0x54 | 0x00000054 | EMIGVERIFY | Verification failed | +| 0x55 | 0x00000055 | EMIGCOMMIT | Commit failed | +| 0x56 | 0x00000056 | EMIGABORT | Migration aborted | + +### Scheduler Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x60 | 0x00000060 | ESCHINVAL | Invalid schedule params | +| 0x61 | 0x00000061 | ESCHPRIO | Priority error | +| 0x62 | 0x00000062 | ESCHYIELD | Yield failed | +| 0x63 | 0x00000063 | ESCHPREEMPT | Preemption error | + +### Notification Errors +| Code | Hex | Name | Description | +|------|-----|------|-------------| +| 0x70 | 0x00000070 | ENOTIFYINVAL | Invalid notification | +| 0x71 | 0x00000071 | ENOTIFYBUSY | Notification queue full | +| 0x72 | 0x00000072 | ENOTIFYDROP | Notification dropped | + +## Error Code Mapping (Kernel Driver) + +```c +static int gsp_errno_to_errno(int gsp_err) { + switch (gsp_err) { + case 0: return 0; + case -1: return -EPERM; + case -2: return -ENOENT; + case -3: return -EINVAL; + case -6: return -ENODEV; + case -12: return -ENOMEM; + case -16: return -EBUSY; + case -22: return -EINVAL; + case -28: return -ENOSPC; + case -37: return -ENOLCK; + case -56: return -EBADMSG; + case -84: return -EOVERFLOW; + case -90: return -ENOSTR; + case -91: return -ENODATA; + case -94: return -ENOSR; + case -97: return -EPROTO; + case -111: return -ETIMEDOUT; + + // GSP-specific + case 0x1E: return -ETIMEDOUT; + case 0x1F: return -EIO; + case 0x25: return -EOVERFLOW; + case 0x37: return -EINVAL; + case 0x51: return -ENOMEM; + case 0x56: return -EBUSY; + case 0xFFFF: return -EPERM; + + // BAR + case 0x30: return -EINVAL; + case 0x31: return -EPERM; + case 0x32: return -EINVAL; + case 0x33: return -EINVAL; + case 0x34: return -ERANGE; + case 0x35: return -EBUSY; + + // WPR + case 0x40: return -EINVAL; + case 0x41: return -EPERM; + case 0x42: return -EEXIST; + case 0x43: return -EBUSY; + case 0x44: return -ETIMEDOUT; + + // Migration + case 0x50: return -EINVAL; + case 0x51: return -ENOMEM; + case 0x52: return -EBUSY; + case 0x53: return -EINVAL; + case 0x54: return -EIO; + case 0x55: return -EIO; + case 0x56: return -ECANCELED; + + // Scheduler + case 0x60: return -EINVAL; + case 0x61: return -EINVAL; + case 0x62: return -EAGAIN; + case 0x63: return -EAGAIN; + + // Notification + case 0x70: return -EINVAL; + case 0x71: return -EAGAIN; + case 0x72: return -ENOBUFS; + + default: return -EIO; + } +} +``` + +## Debugging Error Codes + +### GSP Log Format +``` +GSP_ERROR: rpc_type=0x0A seq=0x1234 err=0x31 (EBARPERM) vf=2 addr=0x7F000000 +``` + +### Common Error Scenarios + +| Scenario | Error Code | Resolution | +|----------|------------|------------| +| VF writes to unmapped BAR | 0x31 (EBARPERM) | Check VF BAR config | +| Migration verify fails | 0x54 (EMIGVERIFY) | Check memory integrity | +| WPR timeout on page fault | 0x44 (EWPRTIMEOUT) | Increase timeout | +| RPC sequence mismatch | 0x21 (EBADSEQ) | Reset RPC client | +| Allocator exhausted | 0x51 (ENOMEM) | Free unused VF memory | +| BAR aperture too small | 0x32 (EBARSIZE) | Increase aperture | + +### Error Injection (Testing) +```c +// Inject errors for testing +#define GSP_INJECT_ERROR(rpc_type, err_code) \ + gsp_test_inject_error(gsp, rpc_type, err_code) + +void gsp_test_inject_error(struct gsp_device *gsp, + uint32_t rpc_type, int err_code) { + struct inject_payload p = { + .rpc_type = rpc_type, + .error_code = err_code, + .enable = 1, + }; + gsp_rpc_send_sync(gsp->rpc, RPC_DEBUG, &p, sizeof(p), NULL, NULL); +} +``` \ No newline at end of file diff --git a/wiki/GPU_Driver_Internals.md b/wiki/GPU_Driver_Internals.md new file mode 100644 index 0000000..4c18fca --- /dev/null +++ b/wiki/GPU_Driver_Internals.md @@ -0,0 +1,1084 @@ +::: {#mw-page-base .noprint} +::: + +::: {#mw-head-base .noprint} +::: + +::: {#content .mw-body role="main"} +[]{#top} + +::: {#siteNotice} +::: + +::: mw-indicators +::: + +# GPU Driver Internals {#firstHeading .firstHeading} + +::: {#bodyContent .vector-body} +::: {#siteSub .noprint} +From Open-IOV +::: + +::: {#contentSub} +::: {.mw-revision .warningbox} +::: {#mw-revision-info} +Revision as of 17:53, 19 June 2023 by +[Arthur](./index.php%3Ftitle=User:Arthur&action=edit&redlink=1.html "User:Arthur (page does not exist)"){.new +.mw-userlink} +[([talk](./index.php%3Ftitle=User_talk:Arthur&action=edit&redlink=1.html "User talk:Arthur (page does not exist)"){.new +.mw-usertoollinks-talk} \| +[contribs](index.php/Special:Contributions/Arthur.html "Special:Contributions/Arthur"){.mw-usertoollinks-contribs})]{.mw-usertoollinks} +[([[[→‎References (Talks & Reading +Material)](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#References_(Talks_&_Reading_Material))]{.autocomment}]{dir="auto"})]{.comment} +::: + +::: {#mw-revision-nav} +([diff](https://open-iov.org/index.php?title=GPU_Driver_Internals&diff=prev&oldid=23791 "GPU Driver Internals")) +[← Older +revision](https://open-iov.org/index.php?title=GPU_Driver_Internals&direction=prev&oldid=23791 "GPU Driver Internals") +\| Latest revision (diff) \| Newer revision → (diff) +::: +::: +::: + +::: {#contentSub2} +::: + +::: {#jump-to-nav} +::: + +[Jump to +navigation](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#mw-head){.mw-jump-link} +[Jump to +search](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#searchInput){.mw-jump-link} + +::: {#mw-content-text .mw-body-content .mw-content-ltr lang="en" dir="ltr"} +::: mw-parser-output +This page will detail the internals of various GPU drivers for use with +I/O Virtualization. + +> An absence of critical technical documentation has historically slowed +> growth and adoption of developer ecosystems for GPU virtualization. +> +> This +> [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/){.external +> .text rel="nofollow"} licensed content can either be used with +> attribution, or used as inspiration for new documentation, created by +> GPU vendors for public commercial distribution as developer +> documentation. +> +> Where possible, this documentation will clearly label dates and +> versions of observed-but-not-guaranteed behaviour vs. +> vendor-documented stable interfaces/behaviour with guarantees of +> forward or backward compatibility. + +::: {#toc .toc role="navigation" aria-labelledby="mw-toc-heading"} +::: {.toctitle lang="en" dir="ltr"} +## Contents {#mw-toc-heading} + +[]{.toctogglespan} +::: + +- [[1]{.tocnumber} [Article + Structure]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Article_Structure) + - [[1.1]{.tocnumber} [High Level + Architecture]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#High_Level_Architecture) + - [[1.2]{.tocnumber} + [Initialization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Initialization) + - [[1.3]{.tocnumber} + [Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Scheduling) + - [[1.3.1]{.tocnumber} [In-VM + Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#In-VM_Scheduling) + - [[1.3.2]{.tocnumber} [Between-VM + Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Between-VM_Scheduling) + - [[1.3.3]{.tocnumber} [Firmware Scheduling (if + applicable)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Firmware_Scheduling_(if_applicable)) + - [[1.4]{.tocnumber} [Memory + Management]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Memory_Management) + - [[1.5]{.tocnumber} [Display Surface + Virtualization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Display_Surface_Virtualization) + - [[1.5.1]{.tocnumber} [Graphics Buffer + Sharing]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Graphics_Buffer_Sharing) +- [[2]{.tocnumber} [Vendor + Neutral]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Vendor_Neutral) + - [[2.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Knowledge_Resources_Used) + - [[2.2]{.tocnumber} [Display Surface + Virtualization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Display_Surface_Virtualization_2) + - [[2.2.1]{.tocnumber} [Graphics Buffer + Sharing]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Graphics_Buffer_Sharing_2) + - [[2.2.1.1]{.tocnumber} [Display Flow in + Linux]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Display_Flow_in_Linux) + - [[2.2.1.2]{.tocnumber} [SR-IOV and + Mdev]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#SR-IOV_and_Mdev) + - [[2.2.1.3]{.tocnumber} [VFs in QEMU Hypervisor + (VirtIO-GPU)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#VFs_in_QEMU_Hypervisor_(VirtIO-GPU)) + - [[2.2.1.4]{.tocnumber} + [Transport]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Transport) + - [[2.2.1.4.1]{.tocnumber} [QEMU Host-Side + u-dma-buf]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#QEMU_Host-Side_u-dma-buf) + - [[2.2.1.4.2]{.tocnumber} [QEMU Host-Side + Modules]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#QEMU_Host-Side_Modules) + - [[2.2.1.5]{.tocnumber} [Windows + VFs]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Windows_VFs) + - [[2.2.1.6]{.tocnumber} [Windows Driver + Stack]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Windows_Driver_Stack) + - [[2.2.1.7]{.tocnumber} [DVServer + KMD]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#DVServer_KMD) + - [[2.2.1.8]{.tocnumber} [Android + VFs]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Android_VFs) +- [[3]{.tocnumber} + [i915]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#i915) + - [[3.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Knowledge_Resources_Used_2) + - [[3.2]{.tocnumber} [High Level + Architecture]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#High_Level_Architecture_2) + - [[3.2.1]{.tocnumber} [i915 + Clients]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#i915_Clients) + - [[3.3]{.tocnumber} + [Initialization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Initialization_2) + - [[3.4]{.tocnumber} + [Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Scheduling_2) + - [[3.4.1]{.tocnumber} [In-VM + Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#In-VM_Scheduling_2) + - [[3.4.2]{.tocnumber} [Guest kernel + (i915.ko)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Guest_kernel_(i915.ko)) + - [[3.4.2.1]{.tocnumber} + [vExeclist]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#vExeclist) + - [[3.4.2.2]{.tocnumber} + [vGuC]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#vGuC) + - [[3.4.3]{.tocnumber} [Between-VM + Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Between-VM_Scheduling_2) + - [[3.4.3.1]{.tocnumber} [Host kernel + (i915.ko)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Host_kernel_(i915.ko)) + - [[3.4.3.1.1]{.tocnumber} + [Execlist]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Execlist) + - [[3.4.3.1.2]{.tocnumber} + [GuC]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#GuC) + - [[3.4.3.2]{.tocnumber} [Device Firmware + (GuC)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Device_Firmware_(GuC)) + - [[3.5]{.tocnumber} [Memory + Management]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Memory_Management_2) + - [[3.5.1]{.tocnumber} [Translation + Tables]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Translation_Tables) + - [[3.5.1.1]{.tocnumber} [GTT (Graphics Translation + Table)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#GTT_(Graphics_Translation_Table)) + - [[3.5.1.2]{.tocnumber} [GGTT (Global Graphics + Translation + Table)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#GGTT_(Global_Graphics_Translation_Table)) + - [[3.5.1.3]{.tocnumber} [PPGTT (Per Process Graphics + Translation + Table)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#PPGTT_(Per_Process_Graphics_Translation_Table)) + - [[3.5.1.4]{.tocnumber} [Aliasing + PPGTT]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Aliasing_PPGTT) + - [[3.5.1.5]{.tocnumber} [Real + PPGTT]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Real_PPGTT) + - [[3.6]{.tocnumber} [Display Surface + Virtualization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Display_Surface_Virtualization_3) + - [[3.6.1]{.tocnumber} + [VirtIO-GPU]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#VirtIO-GPU) + - [[3.6.2]{.tocnumber} [IDD (Indirect Display + Driver)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#IDD_(Indirect_Display_Driver)) + - [[3.6.3]{.tocnumber} [Graphics Buffer + Sharing]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Graphics_Buffer_Sharing_3) +- [[4]{.tocnumber} + [OpenRM]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#OpenRM) + - [[4.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Knowledge_Resources_Used_3) + - [[4.2]{.tocnumber} [High Level + Architecture]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#High_Level_Architecture_3) + - [[4.2.1]{.tocnumber} [RM + Clients]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#RM_Clients) + - [[4.2.2]{.tocnumber} [RM + Server]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#RM_Server) + - [[4.2.3]{.tocnumber} [RM + API]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#RM_API) + - [[4.2.4]{.tocnumber} [RM + Core]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#RM_Core) + - [[4.3]{.tocnumber} + [Initialization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Initialization_3) + - [[4.4]{.tocnumber} + [Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Scheduling_3) + - [[4.4.1]{.tocnumber} [Command + Submission]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Command_Submission) + - [[4.4.1.1]{.tocnumber} + [Runlist]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Runlist) + - [[4.4.2]{.tocnumber} [In-VM + Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#In-VM_Scheduling_3) + - [[4.4.2.1]{.tocnumber} [Guest kernel + (nvidia.ko)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Guest_kernel_(nvidia.ko)) + - [[4.4.3]{.tocnumber} [Between-VM + Scheduling]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Between-VM_Scheduling_3) + - [[4.4.3.1]{.tocnumber} [Host kernel + (nvidia.ko)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Host_kernel_(nvidia.ko)) + - [[4.4.3.2]{.tocnumber} [Host usermode (nvidia-vgpu-mgr / + libnvidia-vgpu.so)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Host_usermode_(nvidia-vgpu-mgr_/_libnvidia-vgpu.so)) + - [[4.4.3.3]{.tocnumber} + [nvidia-vgpu-mgr]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#nvidia-vgpu-mgr) + - [[4.4.3.3.1]{.tocnumber} + [vmiop]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#vmiop) + - [[4.4.3.4]{.tocnumber} [Device Firmware + (GSP)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Device_Firmware_(GSP)) + - [[4.5]{.tocnumber} [Memory + Management]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Memory_Management_3) + - [[4.5.1]{.tocnumber} [Programming the + MMU]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Programming_the_MMU) + - [[4.5.1.1]{.tocnumber} + [AMAPLibrary]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#AMAPLibrary) + - [[4.5.1.2]{.tocnumber} [Architecture + HALs]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Architecture_HALs) + - [[4.5.1.3]{.tocnumber} [DMA from Falcon / NvRISC-V to + Frame Buffer Interface + (FBIF)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#DMA_from_Falcon_/_NvRISC-V_to_Frame_Buffer_Interface_(FBIF)) + - [[4.5.2]{.tocnumber} [Translation + Tables]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Translation_Tables_2) + - [[4.5.2.1]{.tocnumber} + [vmiop_gva]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#vmiop_gva) + - [[4.6]{.tocnumber} [Display Surface + Virtualization]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#Display_Surface_Virtualization_4) +- [[5]{.tocnumber} + [amdgpu]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#amdgpu) +- [[6]{.tocnumber} [References (Talks & Reading + Material)]{.toctext}](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html#References_(Talks_&_Reading_Material)) +::: + +## [Article Structure]{#Article_Structure .mw-headline} + +This article will aim to provide information about the following details +of GPU drivers: + +### [High Level Architecture]{#High_Level_Architecture .mw-headline} + +This section will detail high level architectures of each driver. + +### [Initialization]{#Initialization .mw-headline} + +This section will cover how the GPU\'s embedded components, the GPU +driver, and virtualization functions are initialized. + +### [Scheduling]{#Scheduling .mw-headline} + +This section will detail how the device schedules instructions for +execution. + +This will attempt to provide a comprehensive view of scheduling from +virtualized processes down to execution within the device. + +#### [In-VM Scheduling]{#In-VM_Scheduling .mw-headline} + +The In-VM Scheduling section will detail how instructions scheduled +within the virtual machine\'s GPU device driver. + +#### [Between-VM Scheduling]{#Between-VM_Scheduling .mw-headline} + +The Between-VM Scheduling section will detail how the host kernel module +and/or virtual GPU helper functions handle scheduling / context swaps +between virtual machines on a computer system. + +#### []{#Firmware_Scheduling_.28if_applicable.29}[Firmware Scheduling (if applicable)]{#Firmware_Scheduling_(if_applicable) .mw-headline} + +The Firmware Scheduling section will cover the GPU\'s internal +scheduling model if a deferred execution pathway is used (like i915\'s +GuC or OpenRM\'s GSP). + +In the case an intermediate scheduling microcontroller is not used this +section may be less applicable (ie: vExeclist scheduling under Intel +vGPUs). + +### [Memory Management]{#Memory_Management .mw-headline} + +The Memory Management section will cover how the GPU driver manages +memory for virtual GPUs and host processes. + +This will aim detail paging abstractions used for global memory +translation, and per-process memory translation. + +### [Display Surface Virtualization]{#Display_Surface_Virtualization .mw-headline} + +The Display Surface Virtualization section will detail how virtual +displays are provided to guests and/or graphics rendering buffers (pixel +surfaces) are shared from guest to host if such functions are provided +via the driver. + +#### [Graphics Buffer Sharing]{#Graphics_Buffer_Sharing .mw-headline} + +This section will cover methods provided by the GPU driver suitable for +high performance graphics sharing. + +## [Vendor Neutral]{#Vendor_Neutral .mw-headline} + +This section will detail functions in common between GPU drivers. + +Also see [Display Virtualization for Windows +OS](https://github.com/intel/Display-Virtualization-for-Windows-OS){.external +.text rel="nofollow"}. + +### [Knowledge Resources Used]{#Knowledge_Resources_Used .mw-headline} + +This section is supported by significant contributions to documentation +and open source by **Satyeshwar Singh**. + +### [Display Surface Virtualization]{#Display_Surface_Virtualization_2 .mw-headline} + +The Display Surface Virtualization section will detail how virtual +displays are provided to guests and/or graphics rendering buffers (pixel +surfaces) are shared from guest to host if such functions are provided +via the driver. + +#### [Graphics Buffer Sharing]{#Graphics_Buffer_Sharing_2 .mw-headline} + +This section will deal with graphics buffer sharing for vendor neutral +GPUs. + +##### [Display Flow in Linux]{#Display_Flow_in_Linux .mw-headline} + +Userspace applications provide their buffers to compositor. + +Compositor asks Mesa to create a framebuffer. + +Framebuffer is allocated through vendor driver. + +Vendor driver flips the framebuffer on the screen. + +##### [SR-IOV and Mdev]{#SR-IOV_and_Mdev .mw-headline} + +SR-IOV VFs don\'t have access to the display controller (only PF does). + +Known issue is displaying a VF\'s framebuffer on the screen. + +##### []{#VFs_in_QEMU_Hypervisor_.28VirtIO-GPU.29}[VFs in QEMU Hypervisor (VirtIO-GPU)]{#VFs_in_QEMU_Hypervisor_(VirtIO-GPU) .mw-headline} + +SR-IOV and Mdev VFs run in QEMU Hypervisor. + +QEMU has full access to all pages in VF\'s address space. + +VirtIO-GPU allows for allocating buffers (not API remoting in this +case). + +Mesa\'s KMSRO allocates framebuffer via virtio-gpu. + +Mesa\'s KMSRO asks vendor driver to import framebuffer (no specific +compositor dependancy). + +##### [Transport]{#Transport .mw-headline} + +A Scatter Gather List (SGL) of physical pages is constructed by +VirtIO-GPU of VF. + +###### [QEMU Host-Side u-dma-buf]{#QEMU_Host-Side_u-dma-buf .mw-headline} + +Host QEMU uses u-dma-buf driver to reconstruct a virtual memory pointer +from the SGL shared by VF. + +u-dma-buf driver allocates contiguous memory blocks in kernel as DMA +buffers. + +###### [QEMU Host-Side Modules]{#QEMU_Host-Side_Modules .mw-headline} + +Once virtio-qemu has a DMA buffer, it shares it with the QEMU UI. + +QEMU UI has several toolkits to support like GTK, SDL, etc. with GTK. +being the default. + +GTK uses EGL and passes it the DMABUF as a texture. + +##### [Windows VFs]{#Windows_VFs .mw-headline} + +Windows OS doesn\'t support DMABUF capability so we can\'t allocate +buffers from VirtIO-GPU and share them with the Windows Kernel Mode +Driver (KMD). + +Windows OS is different in the way that the FB is allocated via the OS +rather than the miniport driver. + +Modified version of RedHat virtio-gpu-do (short for Display Only) driver +used. + +##### [Windows Driver Stack]{#Windows_Driver_Stack .mw-headline} + +OS (DWM) allocates frame buffers and asks GPU to write to them through +Miniport. + +DVServer UMD (IDD) asks the OS for the FB copy. + +DVServer UMD (IDD) passes the virtual memory address to DVServer KMD. + +##### [DVServer KMD]{#DVServer_KMD .mw-headline} + +DVServer KMD finds the SGL (Scatter Gather List) of physical pages for +this virtual memory address. + +This SGL is passed via virt-queue from the VF to the host QEMU. + +##### [Android VFs]{#Android_VFs .mw-headline} + +Android uses Linux kernel underneath. VirtIO-GPU is present in +Android\'s kernel. + +KMSRO patch to allocate framebuffer via VirtIO-GPU also ported over to +Android. + +Need modifications in the minigbm lib of Android to connect with KMSRO +part. + +Rest of stack looks identical to Linux VF/PF. + +## [i915]{#i915 .mw-headline} + +### [Knowledge Resources Used]{#Knowledge_Resources_Used_2 .mw-headline} + +This section is supported by significant contributions to documentation +and open source by **Zhi Wang**, **Ben Widawsky**, and **Igor +Bogdanov**. + +See references 2, 3, 4, 5, 6, 7, 8, and 9 in the [References (Talks & +Reading +Material)](index.php/GPU_Driver_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} section. + +### [High Level Architecture]{#High_Level_Architecture_2 .mw-headline} + +#### [i915 Clients]{#i915_Clients .mw-headline} + +Processes which make use of the Intel i915 driver receive an i915 Client +ID. + +### [Initialization]{#Initialization_2 .mw-headline} + +During initialization of the i915 driver the GuC binary blob is +offloaded into the Graphics Translation Table (GTT). This allows the GuC +to read GTT-loaded binary blob from shared framebuffer memory so that it +may boot. + +### [Scheduling]{#Scheduling_2 .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 0: i915 vGPU +Scheduling](images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/300px-Figure_0-_i915_vGPU_Scheduling.png){.thumbimage +decoding="async" width="300" height="227" +srcset="images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/450px-Figure_0-_i915_vGPU_Scheduling.png 1.5x, images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/600px-Figure_0-_i915_vGPU_Scheduling.png 2x"}](index.php/File:Figure_0-_i915_vGPU_Scheduling.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Figure_0-_i915_vGPU_Scheduling.png.html "Enlarge"){.internal} +::: + +**Figure 0:** i915 vGPU high-level Scheduling. See slides from: +[\[9\]](index.php/GPU_Driver_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +There are several abstractions for GPU virtual machine scheduling. Those +are as follows: + +- Guest kernel (i915.ko) +- Host kernel (i915.ko) +- Device Firmware (GuC) + +##### [In-VM Scheduling]{#In-VM_Scheduling_2 .mw-headline} + +##### []{#Guest_kernel_.28i915.ko.29}[Guest kernel (i915.ko)]{#Guest_kernel_(i915.ko) .mw-headline} + +###### [vExeclist]{#vExeclist .mw-headline} + +The vExeclist is a method to submit commands directly to the GPU without +the use of an intermediate microcontroller. + +###### [vGuC]{#vGuC .mw-headline} + +vGuC is a command submission interface used to process commands to the +Intel [Graphics Microcontroller +(GuC)](index.php/GPU_Firmware.html#GuC){.external .text rel="nofollow"}. + +#### [Between-VM Scheduling]{#Between-VM_Scheduling_2 .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 1: i915 vGPU Scheduling Requests & +Events](images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/300px-I915_Scheduling_Events_and_Requests.png){.thumbimage +decoding="async" width="300" height="232" +srcset="images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/450px-I915_Scheduling_Events_and_Requests.png 1.5x, images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/600px-I915_Scheduling_Events_and_Requests.png 2x"}](index.php/File:I915_Scheduling_Events_and_Requests.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:I915_Scheduling_Events_and_Requests.png.html "Enlarge"){.internal} +::: + +**Figure 1:** i915 vGPU Scheduling Requests & Events. See slides from: +[\[9\]](index.php/GPU_Driver_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +##### []{#Host_kernel_.28i915.ko.29}[Host kernel (i915.ko)]{#Host_kernel_(i915.ko) .mw-headline} + +Submitting commands to the GPU under i915 can take several paths. One +pathway makes use of direct command submission without an intermediate +micro-controller whereas the other uses an intermediate +micro-controller. The intermediate micro-controller approach increases +the amount of binary-blob code used and abstracts the kernel module from +the device\'s internal scheduling model. + +###### [Execlist]{#Execlist .mw-headline} + +Execlist executes commands synchronously on the device without an +intermediate microcontroller. This is the preferred method of executing +commands by some driver developers because of it\'s stability and +transparency under current i915 development. + +###### [GuC]{#GuC .mw-headline} + +GuC provides an execution pathway with an intermediate microcontroller +providing a scheduling abstraction for Intel\'s preferred internal +scheduling model. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 2: Intel vGPU Scheduler request +flow.](images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/300px-Figure_2-_Intel_vGPU_Scheduler.png){.thumbimage +decoding="async" width="300" height="233" +srcset="images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/450px-Figure_2-_Intel_vGPU_Scheduler.png 1.5x, images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/600px-Figure_2-_Intel_vGPU_Scheduler.png 2x"}](index.php/File:Figure_2-_Intel_vGPU_Scheduler.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Figure_2-_Intel_vGPU_Scheduler.png.html "Enlarge"){.internal} +::: + +**Figure 2:** i915 vGPU Scheduler request flow. See slides from: +[\[9\]](index.php/GPU_Driver_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +##### []{#Device_Firmware_.28GuC.29}[Device Firmware (GuC)]{#Device_Firmware_(GuC) .mw-headline} + +### [Memory Management]{#Memory_Management_2 .mw-headline} + +##### [Translation Tables]{#Translation_Tables .mw-headline} + +###### []{#GTT_.28Graphics_Translation_Table.29}[GTT (Graphics Translation Table)]{#GTT_(Graphics_Translation_Table) .mw-headline} + +GPU Memory on-device is a part of a GTT or Graphics Translation Table. +This table stores information globally for all graphics processes within +the system. Some processes access the Global Graphics Translation Table +(GGTT) such as +[DRI](https://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure "wikipedia:Direct Rendering Infrastructure"){.extiw} +while other\'s receive a Per Process Graphics Translation Table (PPGTT) +buffer based on their i915 Client ID. + +###### []{#GGTT_.28Global_Graphics_Translation_Table.29}[GGTT (Global Graphics Translation Table)]{#GGTT_(Global_Graphics_Translation_Table) .mw-headline} + +###### []{#PPGTT_.28Per_Process_Graphics_Translation_Table.29}[PPGTT (Per Process Graphics Translation Table)]{#PPGTT_(Per_Process_Graphics_Translation_Table) .mw-headline} + +Process-specific memory buffers are stored inside a Per Process Graphics +Translation Table or PPGTT. This is a [GPU +MMU](index.php/Virtual_IO_Internals.html#VRAM_Isolation_(GPU_GMMU)){.external +.text rel="nofollow"} translated subregion or IOVA of global GPU memory +specific to a GPU process\'s client ID. + +###### [Aliasing PPGTT]{#Aliasing_PPGTT .mw-headline} + +Aliasing PPGTT (Per Process Graphics Translation Table) refers to +partially separated GPU resources (process context). + +###### [Real PPGTT]{#Real_PPGTT .mw-headline} + +Real PPGTT (Per Process Graphics Translation Table) refers to fully +separated GPU resources (process context). + +### [Display Surface Virtualization]{#Display_Surface_Virtualization_3 .mw-headline} + +The Intel vGPU makes use of two modes for Display Surface +Virtualization. + +- VirtIO-GPU (Linux) +- Indirect Display Driver (Windows) + +#### [VirtIO-GPU]{#VirtIO-GPU .mw-headline} + +#### []{#IDD_.28Indirect_Display_Driver.29}[IDD (Indirect Display Driver)]{#IDD_(Indirect_Display_Driver) .mw-headline} + +The IDD ([Indirect Display +Driver](https://learn.microsoft.com/en-us/windows-hardware/drivers/display/indirect-display-driver-model-overview){.external +.text rel="nofollow"}) provides virtual display functions with arbitrary +resolutions to any rendering device virtual or physical. + +Intel\'s IDD can be found in their [Display Virtualization for Windows +OS](https://github.com/intel/Display-Virtualization-for-Windows-OS/){.external +.text rel="nofollow"} repository. + +#### [Graphics Buffer Sharing]{#Graphics_Buffer_Sharing_3 .mw-headline} + +Intel\'s i915 driver provides functionality to directly map display +memory from a [guest vGPU Virtual Function (either SR-IOV or VFIO-Mdev) +into the host GPU\'s Physical +Function](index.php/Merged_Drivers.html){.external .text rel="nofollow"} +without slow memory copies or graphics compression. For users running +GPU virtualization on their local device this results in a significant +performance uplift compared to traditional graphics sharing +functionality built for remote access use-cases such as VDI. + +Intel\'s [0copy display virtualization +tools](https://github.com/intel/Display-Virtualization-for-Windows-OS){.external +.text rel="nofollow"} are simple to implement as sharing does not rely +upon an added [IVSHMEM (Inter-VM Shared Memory +device)](https://www.qemu.org/docs/master/system/devices/ivshmem.html){.external +.text rel="nofollow"} - rather the host directly maps the guest\'s +display memory via [udmabuf](https://lwn.net/Articles/758903/){.external +.text rel="nofollow"} as the buffer sharing functions are provided +within the i915 open source driver. + +## [OpenRM]{#OpenRM .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 3: GPU BAR to Timeshared Syhededuling via Channel +IO](images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/300px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png){.thumbimage +decoding="async" width="300" height="226" +srcset="images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/450px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png 1.5x, images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/600px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png 2x"}](index.php/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html "Enlarge"){.internal} +::: + +**Figure 3:** GPU BAR to Timeshared Scheduling via Channel IO. +::: +::: +::: + +### [Knowledge Resources Used]{#Knowledge_Resources_Used_3 .mw-headline} + +This section is supported by significant contributions to documentation +and open source by **Andy Currid**, **Neo Jia**, **John Fanelli**, and +**Neha Joshi**. + +### [High Level Architecture]{#High_Level_Architecture_3 .mw-headline} + +The Open Resource Manager (RM driver) makes use of a highly object +oriented paradigm comprised of multiple \"engines\" which act as +micro-services for servicing driver requests. + +The Open Resource Manager driver (also known as +[OpenRM](index.php/OpenRM.html){.external .text rel="nofollow"}) refers +to Nvidia\'s +[open-kernel-modules](https://github.com/NVIDIA/open-gpu-kernel-modules){.external +.text rel="nofollow"}. + +Broadly speaking the OpenRM driver consists of two parts. + +- The Platform RM (OpenRM) +- The Firmware RM (GSP RM / RM Core) + +The Platform RM is loaded into the Linux Kernel as nvidia.ko. This +module communicates with the GSP RM for via [Remote Procedure Calls +(RPCs)](https://en.wikipedia.org/wiki/Remote_procedure_call "wikipedia:Remote procedure call"){.extiw} +to communicate with engines from the RM Core. + +##### [RM Clients]{#RM_Clients .mw-headline} + +Processes (local, remote, or virtualized) which make use of the RM +driver receive an RM Client ID. + +#### [RM Server]{#RM_Server .mw-headline} + +The RM Server (or Resource Server) tracks RM Clients as well as the +hardware and software resources they control, allocate, and free. + +#### [RM API]{#RM_API .mw-headline} + +API to control the Resource Manager Server. + +#### [RM Core]{#RM_Core .mw-headline} + +Core functions of the RM driver controlling resource locking, mapping, +unmapping, control calls, constructors, and deconstructors. Under OpenRM +the RM Core runs within the GPU System Processor (GSP micro-controller) +while in pre-open source versions of the Resource Manager the RM Core +ran within the nvidia.ko kernel module + +### [Initialization]{#Initialization_3 .mw-headline} + +During bring up of the hardware several binary blobs are loaded from +embedded [Boot +ROM](https://en.wikipedia.org/wiki/Boot_ROM "wikipedia:Boot ROM"){.extiw} +memory to bootstrap embedded controller bring up from which point +additional software is loaded from onboard +[SPI](https://en.wikipedia.org/wiki/Serial_Peripheral_Interface "wikipedia:Serial Peripheral Interface"){.extiw} +flash memory. + +Software loaded from SPI flash is necessary for the full initialization +of the Falcon/NvRISC processor as well as a cached version of the +software necessary to run the GPU System Processor (GSP). + +Once the platform is posted it is ready to communicate with the host +platform\'s RM driver. The OpenRM driver offloads a binary blob +containing the RM Core to the [GPU System Processor +(GSP)](index.php/GPU_Firmware.html#GSP){.external .text rel="nofollow"} +which is likely to contain a more recent version than the cached version +contained in on-board SPI flash. + +### [Scheduling]{#Scheduling_3 .mw-headline} + +There are several abstractions for GPU virtual machine scheduling. Those +are as follows: + +- Guest kernel (nvidia.ko) +- Host kernel (nvidia.ko) +- Host usermode (gpu-mgr / libnvidiavgpu.so) +- Device Firmware (GSP) + +#### [Command Submission]{#Command_Submission .mw-headline} + +##### [Runlist]{#Runlist .mw-headline} + +#### [In-VM Scheduling]{#In-VM_Scheduling_3 .mw-headline} + +Virtual machines contain their own GPU scheduling within the Nvidia +kernel module in the guest OS. + +##### []{#Guest_kernel_.28nvidia.ko.29}[Guest kernel (nvidia.ko)]{#Guest_kernel_(nvidia.ko) .mw-headline} + +Within a virtual machine running the Nvidia driver messages to the GPU +are first sent to the guest nvidia.ko kernel module. + +The guest then determines whether a vRPC (virtual Remote Procedure Call) +or a pRPC (physical Remote Procedure Call) should be sent. Both pRPCs +and vRPCs are sent through the host RM driver (Resource Manager). + +> *Note: Unclear on execution pathway for pRPCs vs vRPCs. pRPCs may go +> directly to device.* + +#### [Between-VM Scheduling]{#Between-VM_Scheduling_3 .mw-headline} + +In addition to scheduling which occurs within the virtual machine the +Resource Manager driver also schedules messages to the GPU between +GPU-accelerated virtual machines and host processes. + +##### []{#Host_kernel_.28nvidia.ko.29}[Host kernel (nvidia.ko)]{#Host_kernel_(nvidia.ko) .mw-headline} + +Messages sent by the guest (via vRPC or pRPC) are received by the host +Nvidia.ko driver. + +Nvidia.ko contains a virtual GPU state machine which contains status +information for the virtual GPU. + +Nvidia.ko also contains a virtual GPU kernel scheduler which interacts +with virtual GPU objects. + +Nvidia.ko also contains an RM Call scheduler which schedules calls on an +RM class. + +The Nividia.ko kernel module exits to userspace to execute the +nvidia-vgpu-mgr and VMIOP (Virtual Machine Input Output Plugin). + +##### []{#Host_usermode_.28nvidia-vgpu-mgr_.2F_libnvidia-vgpu.so.29}[Host usermode (nvidia-vgpu-mgr / libnvidia-vgpu.so)]{#Host_usermode_(nvidia-vgpu-mgr_/_libnvidia-vgpu.so) .mw-headline} + +After exiting to userspace a daemon process (the nvidia-vgpu-mgr, and +it\'s library libnvidia-vgpu.so) are executed to schedule VM-exits +described below. + +##### [nvidia-vgpu-mgr]{#nvidia-vgpu-mgr .mw-headline} + +The nvidia-vgpu-mgr is a process which provides the spawning of virtual +GPU stubs and population with capability information. + +This daemon process interacts with the libnvidia-vgpu.so, nvidia.ko, and +nvidia-vgpu-vfio.ko components. + +This process and the libnvidia-vgpu.so contain, and execute the VMIOP. + +This process (and the VMIOP) schedules RPCs sent by the guest, receives +VFIO BAR-exits, and relays requests to allocate, deallocate, pin, unpin, +map, unmap to the [RM +Core](index.php/GPU_Driver_Internals.html#RM_Core){.external .text +rel="nofollow"}. + +###### [vmiop]{#vmiop .mw-headline} + +VMIOP (Virtual Machine Input Output Plugin) handles presenting +virtualized functionality into the guest. + +The Virtual Machine Input Output Plugin software handles virtual +displays, compute API offload, and most importantly [BAR (Base Address +Register) +quirks](index.php/Virtual_I/O_Internals.html#VFIO_Quirks_(region_traps)){.external +.text rel="nofollow"}. + +The VMIOP is an [SDK (Software Development +Kit)](https://en.wikipedia.org/wiki/Software_development_kit "wikipedia:Software development kit"){.extiw} +provided in binary format split between the libnvidiavgpu.so and +nvidia-vgpu-mgr which provides userland helper functions for GPU +virtualization. + +Messages to the VMIOP are scheduled by Linux kernel +[niceness](https://www.learnlinux.org.za/courses/build/internals/ch07s02.html){.external +.text rel="nofollow"} (scheduling abstraction). + +##### []{#Device_Firmware_.28GSP.29}[Device Firmware (GSP)]{#Device_Firmware_(GSP) .mw-headline} + +Messages received by the host RM driver (Resource Manager) are then +scheduled by the RM Core contained within the GSP (GPU System +Processor). The GSP handles the device\'s internal scheduling model. + +### [Memory Management]{#Memory_Management_3 .mw-headline} + +Managing virtual machine memory is very important to the security of +virtualization. + +This section will cover the method by which secure memory \"enclaves\" +or [IO Virtual Addresses +(IOVAs)](https://terenceli.github.io/%E6%8A%80%E6%9C%AF/2019/08/04/iommu-introduction){.external +.text rel="nofollow"} may be provisioned and separation enforced by +hardware constructs within the GPU. + +##### [Programming the MMU]{#Programming_the_MMU .mw-headline} + +In order to hardware enforce separation between memory allocated to +Virtual Machines (VMs) virtualization software must program the GPU\'s +MMU (GMMU controller) to create IO Virtual Addresses (IOVAs). + +In order to create such configurations several abstractions are used to +translate high level representations of virtualization programmed via +the vmiop and gpu-mgr into practical, architecture specific +instructions. + +###### [AMAPLibrary]{#AMAPLibrary .mw-headline} + +The AMAPLibrary acts as a device abstraction framework for GPU driver +software to program using high level representations of MMU +configuration. + +The AMAPLibrary translates high level representations of GPU +virtualization into graphics architecture-specific logic contained +within architecture HALs (Hardware Abstraction Layers). + +###### [Architecture HALs]{#Architecture_HALs .mw-headline} + +GPU [Hardware Abstraction Layers +(HALs)](https://archive.ll.mit.edu/HPEC/agendas/proc07/Day3/10_Hensley_Abstract.pdf){.external +.text rel="nofollow"} contain logic specific to graphics architectures, +for instance the precise method by which the GPU driver may interact +with the Falcon to provision MMU protected memory. + +###### []{#DMA_from_Falcon_.2F_NvRISC-V_to_Frame_Buffer_Interface_.28FBIF.29}[DMA from Falcon / NvRISC-V to Frame Buffer Interface (FBIF)]{#DMA_from_Falcon_/_NvRISC-V_to_Frame_Buffer_Interface_(FBIF) .mw-headline} + +The Falcon (FAst Logic CONtroller) / NvRISC-V embedded controller emits +DMAs to the Frame Buffer Interface (FBIF) in order to interact with the +device\'s GMMU controller. + +User programs and VMs have their memory translated through the GMMU. + +Once created memory translations within a virtual machine\'s IO Virtual +Address (IOVA) will be protected by the device\'s GMMU controller. + +##### [Translation Tables]{#Translation_Tables_2 .mw-headline} + +###### [vmiop_gva]{#vmiop_gva .mw-headline} + +### [Display Surface Virtualization]{#Display_Surface_Virtualization_4 .mw-headline} + +## [amdgpu]{#amdgpu .mw-headline} + +## []{#References_.28Talks_.26_Reading_Material.29}[References (Talks & Reading Material)]{#References_(Talks_&_Reading_Material) .mw-headline} + +1. [Intel Graphics Programmer\'s Reference Manuals + (PRM)](https://01.org/linuxgraphics/documentation/hardware-specification-prms){.external + .text rel="nofollow"} +2. [i915: Hardware Contexts (and some bits about + batchbuffers)](https://bwidawsk.net/blog/2013/1/i915-hardware-contexts-and-some-bits-about-batchbuffers/){.external + .text rel="nofollow"} +3. [i915: The Global GTT Part + 1](https://bwidawsk.net/blog/2014/6/the-global-gtt-part-1/){.external + .text rel="nofollow"} +4. [i915: Aliasing PPGTT Part + 2](https://bwidawsk.net/blog/2014/6/aliasing-ppgtt-part-2/){.external + .text rel="nofollow"} +5. [i915: True PPGTT Part + 3](https://bwidawsk.net/blog/2014/7/true-ppgtt-part-3/){.external + .text rel="nofollow"} +6. [i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit + address space, GPU \"mirroring\", and yeah, something about relocs + too)](https://bwidawsk.net/blog/2014/7/future-ppgtt-part-4-dynamic-page-table-allocations-64-bit-address-space-gpu-mirroring-and-yeah-something-about-relocs-too/){.external + .text rel="nofollow"} +7. [i915: Security of the Intel Graphics Stack - Part 1 - + Introduction](https://igor-blue.github.io/2021/02/10/graphics-part1.html){.external + .text rel="nofollow"} +8. [i915: Security of the Intel Graphics Stack - Part 2 - FW \<-\> + GuC](https://igor-blue.github.io/2021/02/24/graphics-part2.html){.external + .text rel="nofollow"} +9. [i915: An Introduction to Intel GVT-g (with new + architecture)](https://01.org/sites/default/files/documentation/an_introduction_to_intel_gvt-g_for_external.pdf){.external + .text rel="nofollow"} +10. [lwn.net: Add udmabuf misc + device](https://lwn.net/Articles/758903/){.external .text + rel="nofollow"} +11. [Nvidia RISC-v + Story](https://riscv.org/wp-content/uploads/2016/07/Tue1100_Nvidia_RISCV_Story_V2.pdf){.external + .text rel="nofollow"} +12. [IOMMU + Introduction](https://terenceli.github.io/%E6%8A%80%E6%9C%AF/2019/08/04/iommu-introduction){.external + .text rel="nofollow"} +13. [Hardware and Compute Abstraction Layers For Accelerated Computing + Using Graphics Hardware and Conventional + CPUs](https://archive.ll.mit.edu/HPEC/agendas/proc07/Day3/10_Hensley_Abstract.pdf){.external + .text rel="nofollow"} +14. [nVidia GPU Introduction + (envytools)](https://envytools.readthedocs.io/en/latest/hw/intro.html){.external + .text rel="nofollow"} +15. [Delivering High Performance Remote Graphics With Nvidia GRID + Virtual + GPU](https://on-demand.gputechconf.com/gtc/2014/presentations/S4725-hi-perf-graphics-nvidia-grid-virtual-gpus.pdf){.external + .text rel="nofollow"} +16. [NVIDIA Multi-Instance + GPU](https://nehajoshi.dev/post/nvidia_mig_feature/){.external .text + rel="nofollow"} +17. [i915: Kaby Lake Intel Graphics Programmer\'s Reference Manual + \[Volume 5: Memory + Views\]](https://01.org/sites/default/files/documentation/intel-gfx-prm-osrc-kbl-vol05-memory_views.pdf){.external + .text rel="nofollow"} +18. [Lifecycle of a Triangle - Nvidia\'s logical + pipeline](https://developer.nvidia.com/content/life-triangle-nvidias-logical-pipeline){.external + .text rel="nofollow"} +19. [Nvidia Parallel Thread Execution + (PTX)](https://docs.nvidia.com/cuda/parallel-thread-execution/){.external + .text rel="nofollow"} +20. [i915/GEM + Crashcourse](https://blog.ffwll.ch/2013/01/i915gem-crashcourse-overview.html){.external + .text rel="nofollow"} +21. [drm: Add GEM (\"graphics execution manager\") to i915 + driver.](https://lwn.net/Articles/292583/){.external .text + rel="nofollow"} +::: + +::: printfooter +Retrieved from +\"[https://open-iov.org/index.php?title=GPU_Driver_Internals&oldid=23791](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html){dir="ltr"}\" +::: +::: + +::: {#catlinks .catlinks .catlinks-allhidden mw="interface"} +::: +::: +::: + +::: {#mw-navigation} +## Navigation menu + +::: {#mw-head} +### Personal tools {#p-personal-label .vector-menu-heading} + +::: vector-menu-content +- [[Log + in](https://open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Driver+Internals&returntoquery=oldid%3D23791 "You are encouraged to log in; however, it is not mandatory [o]"){accesskey="o"}]{#pt-login} +::: + +::: {#left-navigation} +### Namespaces {#p-namespaces-label .vector-menu-heading} + +::: vector-menu-content +- [[Page](index.php/GPU_Driver_Internals.html "View the content page [c]"){accesskey="c"}]{#ca-nstab-main} +- [[Discussion](https://open-iov.org/index.php?title=Talk:GPU_Driver_Internals&action=edit&redlink=1 "Discussion about the content page (page does not exist) [t]"){rel="discussion" + accesskey="t"}]{#ca-talk} +::: + +### Variants [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-variants-label .vector-menu-heading} + +::: vector-menu-content +::: +::: + +::: {#right-navigation} +### Views {#p-views-label .vector-menu-heading} + +::: vector-menu-content +- [[Read](index.php/GPU_Driver_Internals.html)]{#ca-view} +- [[View + source](index.php%3Ftitle=GPU_Driver_Internals&action=edit.html "This page is protected. + You can view its source [e]"){accesskey="e"}]{#ca-viewsource} +- [[View + history](index.php%3Ftitle=GPU_Driver_Internals&action=history.html "Past revisions of this page [h]"){accesskey="h"}]{#ca-history} +::: + +### More [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-cactions-label .vector-menu-heading} + +::: vector-menu-content +::: + +::: {#p-search .vector-search-box role="search"} +
+ +### Search + +::: {#simpleSearch search-loc="header-navigation"} +::: + +
+::: +::: +::: + +::: {#mw-panel} +::: {#p-logo role="banner"} +[](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page"){.mw-wiki-logo} +::: + +### Navigation {#p-navigation-label .vector-menu-heading} + +::: vector-menu-content +- [[Main + page](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page [z]"){accesskey="z"}]{#n-mainpage-description} +- [[Recent + changes](https://open-iov.org/index.php/Special:RecentChanges "A list of recent changes in the wiki [r]"){accesskey="r"}]{#n-recentchanges} +- [[Random + page](index.php/Special:Random.html "Load a random page [x]"){accesskey="x"}]{#n-randompage} +- [[Help about + MediaWiki](https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents)]{#n-help-mediawiki} +::: + +### Tools {#p-tb-label .vector-menu-heading} + +::: vector-menu-content +- [[What links + here](index.php/Special:WhatLinksHere/GPU_Driver_Internals.html "A list of all wiki pages that link here [j]"){accesskey="j"}]{#t-whatlinkshere} +- [[Related + changes](https://open-iov.org/index.php/Special:RecentChangesLinked/GPU_Driver_Internals "Recent changes in pages linked from this page [k]"){rel="nofollow" + accesskey="k"}]{#t-recentchangeslinked} +- [[Special + pages](index.php/Special:SpecialPages.html "A list of all special pages [q]"){accesskey="q"}]{#t-specialpages} +- [[Printable + version](javascript:print(); "Printable version of this page [p]"){rel="alternate" + accesskey="p"}]{#t-print} +- [[Permanent + link](index.php%3Ftitle=GPU_Driver_Internals&oldid=23791.html "Permanent link to this revision of the page")]{#t-permalink} +- [[Page + information](index.php%3Ftitle=GPU_Driver_Internals&action=info.html "More information about this page")]{#t-info} +::: +::: +::: + +- [This page was last edited on 19 June 2023, at + 17:53.]{#footer-info-lastmod} + +```{=html} + +``` +- [[Privacy + policy](https://open-iov.org/index.php/Open-IOV:Privacy_policy "Open-IOV:Privacy policy")]{#footer-places-privacy} +- [[About + Open-IOV](index.php/Open-IOV:About.html "Open-IOV:About")]{#footer-places-about} +- [[Disclaimers](https://open-iov.org/index.php/Open-IOV:General_disclaimer "Open-IOV:General disclaimer")]{#footer-places-disclaimer} + +```{=html} + +``` +- [[![Powered by + MediaWiki](resources/assets/poweredby_mediawiki_88x31.png){srcset="resources/assets/poweredby_mediawiki_132x47.png 1.5x, resources/assets/poweredby_mediawiki_176x62.png 2x" + width="88" height="31" + loading="lazy"}](https://www.mediawiki.org/)]{#footer-poweredbyico} diff --git a/wiki/GPU_Firmware.md b/wiki/GPU_Firmware.md new file mode 100644 index 0000000..f0f815d --- /dev/null +++ b/wiki/GPU_Firmware.md @@ -0,0 +1,484 @@ +::: {#mw-page-base .noprint} +::: + +::: {#mw-head-base .noprint} +::: + +::: {#content .mw-body role="main"} +[]{#top} + +::: {#siteNotice} +::: + +::: mw-indicators +::: + +# GPU Firmware {#firstHeading .firstHeading} + +::: {#bodyContent .vector-body} +::: {#siteSub .noprint} +From Open-IOV +::: + +::: {#contentSub} +::: {.mw-revision .warningbox} +::: {#mw-revision-info} +Revision as of 17:13, 9 April 2023 by +[Arthur](./index.php%3Ftitle=User:Arthur&action=edit&redlink=1.html "User:Arthur (page does not exist)"){.new +.mw-userlink} +[([talk](./index.php%3Ftitle=User_talk:Arthur&action=edit&redlink=1.html "User talk:Arthur (page does not exist)"){.new +.mw-usertoollinks-talk} \| +[contribs](index.php/Special:Contributions/Arthur.html "Special:Contributions/Arthur"){.mw-usertoollinks-contribs})]{.mw-usertoollinks} +[([[[→‎Firmware +Images](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Firmware_Images)]{.autocomment}]{dir="auto"})]{.comment} +::: + +::: {#mw-revision-nav} +([diff](https://open-iov.org/index.php?title=GPU_Firmware&diff=prev&oldid=23779 "GPU Firmware")) +[← Older +revision](https://open-iov.org/index.php?title=GPU_Firmware&direction=prev&oldid=23779 "GPU Firmware") +\| Latest revision (diff) \| Newer revision → (diff) +::: +::: +::: + +::: {#contentSub2} +::: + +::: {#jump-to-nav} +::: + +[Jump to +navigation](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#mw-head){.mw-jump-link} +[Jump to +search](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#searchInput){.mw-jump-link} + +::: {#mw-content-text .mw-body-content .mw-content-ltr lang="en" dir="ltr"} +::: mw-parser-output +GPUs have become highly complex systems containing a number of different +embedded controllers. This page will attempt to document embedded GPU +firmware and support for IO virtualization through various firmware +functions. + +> An absence of critical technical documentation has historically slowed +> growth and adoption of developer ecosystems for GPU virtualization. +> +> This +> [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/){.external +> .text rel="nofollow"} licensed content can either be used with +> attribution, or used as inspiration for new documentation, created by +> GPU vendors for public commercial distribution as developer +> documentation. +> +> Where possible, this documentation will clearly label dates and +> versions of observed-but-not-guaranteed behaviour vs. +> vendor-documented stable interfaces/behaviour with guarantees of +> forward or backward compatibility. + +::: {#toc .toc role="navigation" aria-labelledby="mw-toc-heading"} +::: {.toctitle lang="en" dir="ltr"} +## Contents {#mw-toc-heading} + +[]{.toctogglespan} +::: + +- [[1]{.tocnumber} + [Intel]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Intel) + - [[1.1]{.tocnumber} [Firmware + Images]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Firmware_Images) + - [[1.1.1]{.tocnumber} [Intel Firmware Support Package + (FSP)]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Intel_Firmware_Support_Package_(FSP)) + - [[1.1.1.1]{.tocnumber} [FSP + Configuration]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#FSP_Configuration) + - [[1.1.1.1.1]{.tocnumber} [Editing FSP + Configuration]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Editing_FSP_Configuration) + - [[1.1.1.2]{.tocnumber} [FSP Binary + Format]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#FSP_Binary_Format) + - [[1.1.2]{.tocnumber} [Known Firmware Package + Variations]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Known_Firmware_Package_Variations) + - [[1.2]{.tocnumber} [Embedded + Controllers]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Embedded_Controllers) + - [[1.2.1]{.tocnumber} + [GuC]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#GuC) + - [[1.2.1.1]{.tocnumber} [Hardware + Architecture]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Hardware_Architecture) + - [[1.2.1.2]{.tocnumber} [Software + Architecture]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Software_Architecture) + - [[1.2.1.2.1]{.tocnumber} [GuC Blob Checksum & Code + Signing]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#GuC_Blob_Checksum_&_Code_Signing) +- [[2]{.tocnumber} + [Nvidia]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Nvidia) + - [[2.1]{.tocnumber} [Firmware + Images]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Firmware_Images_2) + - [[2.2]{.tocnumber} [Embedded + Controllers]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Embedded_Controllers_2) + - [[2.2.1]{.tocnumber} [Falcon / + NV-RISCV]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#Falcon_/_NV-RISCV) + - [[2.2.2]{.tocnumber} + [GSP]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#GSP) + - [[2.2.2.1]{.tocnumber} [GSP Initialization & + Offload]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#GSP_Initialization_&_Offload) + - [[2.2.3]{.tocnumber} + [CMU]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#CMU) +- [[3]{.tocnumber} + [AMD]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#AMD) +- [[4]{.tocnumber} [References (Talks & Reading + Material)]{.toctext}](index.php%3Ftitle=GPU_Firmware&oldid=23779.html#References_(Talks_&_Reading_Material)) +::: + +## [Intel]{#Intel .mw-headline} + +### [Firmware Images]{#Firmware_Images .mw-headline} + +This section will cover firmware images used in Intel GPUs. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 1: The FSP Binary Layout from Intel® Firmware Support Package +External Architecture +Specification.](images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/300px-Screen_Shot_2022-11-18_at_4.14.32_PM.png){.thumbimage +decoding="async" width="300" height="261" +srcset="images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/450px-Screen_Shot_2022-11-18_at_4.14.32_PM.png 1.5x, images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/600px-Screen_Shot_2022-11-18_at_4.14.32_PM.png 2x"}](index.php/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html "Enlarge"){.internal} +::: + +Figure 1: The FSP Binary Layout from Intel® Firmware Support Package +External Architecture Specification. +[Source](https://cdrdv2.intel.com/v1/dl/getContent/736809){.external +.text rel="nofollow"} +::: +::: +::: + +#### []{#Intel_Firmware_Support_Package_.28FSP.29}[Intel Firmware Support Package (FSP)]{#Intel_Firmware_Support_Package_(FSP) .mw-headline} + +Much like CPUs Intel\'s GPUs also contain a Firmware Support Package +(FSP). + +The Coreboot project provides public domain information on the FSP +[here](https://doc.coreboot.org/soc/intel/fsp/index.html){.external +.text rel="nofollow"}. + +##### [FSP Configuration]{#FSP_Configuration .mw-headline} + +In the context of GPUs the FSP configures several functions of the +device. + +Those functions are as follows: + + ---------------------------------------------------------------------------------- ------------------------------ + FSP Parameter Possible Values + GFSP Status 0x00 + FIVR SSC Value \*.\*% + FIVR RFI Value \*.\*MHz + GT Subsystem Vendor ID 0x8086 + GT Subsystem Device ID 0x\*\* + HDA Subsystem Vendor ID 0x0000 + HDA Subsystem Device ID 0x0000 + P2SB Enable Yes/No + LMEBAR Max + GTMMADDR Prefetch Capability Prefetch Enabled + [Display Present](index.php/Merged_Drivers.html){.external .text rel="nofollow"} Enabled/Disabled + I2C For Third Party Devices Enabled/Disabled + I2C Device Address 1 0x0000 + I2C Device Address 2 0x0000 + I2C Bus Speed Standard mode (0 to 100Kbps) + ---------------------------------------------------------------------------------- ------------------------------ + + : GPU Firmware Support Package + +###### [Editing FSP Configuration]{#Editing_FSP_Configuration .mw-headline} + +The FSP configuration editor can be downloaded +[here](https://github.com/tianocore/edk2/tree/master/IntelFsp2Pkg/Tools/ConfigEditor){.external +.text rel="nofollow"} and it\'s user manual is available +[here](https://github.com/tianocore/edk2/blob/master/IntelFsp2Pkg/Tools/UserManuals/ConfigEditorUserManual.md){.external +.text rel="nofollow"}. + +##### [FSP Binary Format]{#FSP_Binary_Format .mw-headline} + +The FSP\'s binary layout is detailed within the [Intel® FSP External +Architecture Specification +v2.4](https://cdrdv2.intel.com/v1/dl/getContent/736809){.external .text +rel="nofollow"} on page 14. + +#### [Known Firmware Package Variations]{#Known_Firmware_Package_Variations .mw-headline} + +Some firmware packages may include an \*\*End of Manufacturing Flash +Protection Mode\*\* status of Protected or Unprotected. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 2: Firmware status information for an Intel DG2 +device.](images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/300px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png){.thumbimage +decoding="async" width="300" height="613" +srcset="images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/450px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png 1.5x, images/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png 2x"}](index.php/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html "Enlarge"){.internal} +::: + +Figure 2: Firmware status information for an Intel DG2 device. +::: +::: +::: + +Similar [SPI Write +Protection](https://eclypsium.com/2022/09/19/firmware-security-realizations-part-3-spi-write-protections/){.external +.text rel="nofollow"} functionality is made available through Intel CPUs +under [System Management Mode +(SMM)](https://en.wikipedia.org/wiki/System_Management_Mode "wikipedia:System Management Mode"){.extiw}. + +### [Embedded Controllers]{#Embedded_Controllers .mw-headline} + +This section will cover firmware images as they apply to various +embedded controllers within the Intel GPU. + +#### [GuC]{#GuC .mw-headline} + +The Graphics micro (µ) Controller (GuC) is an embedded controller +contained within Intel\'s embedded and discrete graphics (DG\*) series +GPUs. + +##### [Hardware Architecture]{#Hardware_Architecture .mw-headline} + +*The following section is supported by +[igor-blue.github.io](https://igor-blue.github.io/2021/02/10/graphics-part1.html){.external +.text rel="nofollow"} (see reference +[1](index.php/GPU_Firmware.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"}, +[2](index.php/GPU_Firmware.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"}):* + +*\"The GuC - an embedded +[i486](https://www.wikiwand.com/en/I486){.external .text rel="nofollow"} +core that supports graphics scheduling, power management and firmware +attestation.\"* + +##### [Software Architecture]{#Software_Architecture .mw-headline} + +*The following section is supported by +[igor-blue.github.io](https://igor-blue.github.io/2021/02/10/graphics-part1.html){.external +.text rel="nofollow"} (see reference +[1](index.php/GPU_Firmware.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"}, +[2](index.php/GPU_Firmware.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"}):* + +*\"The μOS kernel runs in 32-bit protected mode, with no paging and +old-style segments model (CS, DS, etc'). All code run in ring0. The OS +handles HW/SW exceptions and crashes, and supplies debugging and logging +services.\"* + +*\"It runs a single process - which initializes the system and then +waits for interrupts/events in a loop.\"* + +###### []{#GuC_Blob_Checksum_.26_Code_Signing}[GuC Blob Checksum & Code Signing]{#GuC_Blob_Checksum_&_Code_Signing .mw-headline} + +*\"The bootrom verifies the firmware with a digital signature using a +SHA256 hash + PKCSv2.1 RSA signature, and if the test passes copies it +to SRAM and starts executing.\"* + +## [Nvidia]{#Nvidia .mw-headline} + +### [Firmware Images]{#Firmware_Images_2 .mw-headline} + +This section will cover firmware images used in Nvidia GPUs. + +### [Embedded Controllers]{#Embedded_Controllers_2 .mw-headline} + +This section will cover firmware images as they apply to various +embedded controllers within the Nvidia GPU. + +#### []{#Falcon_.2F_NV-RISCV}[Falcon / NV-RISCV]{#Falcon_/_NV-RISCV .mw-headline} + +The Fast Logic CONtroller (Falcon) and Nvidia RISC-V +([NV-RISCV](https://riscv.org/wp-content/uploads/2016/07/Tue1100_Nvidia_RISCV_Story_V2.pdf){.external +.text rel="nofollow"}) processors run the NvOS. + +#### [GSP]{#GSP .mw-headline} + +The GPU System Processor (GSP) is an embedded controller used for +offload of the RM Core. + +The GSP runs [Library Operating System +(LibOS)](https://lwn.net/Articles/637658/){.external .text +rel="nofollow"}. + +##### []{#GSP_Initialization_.26_Offload}[GSP Initialization & Offload]{#GSP_Initialization_&_Offload .mw-headline} + +The [GSP is initialized multiple +times](index.php/GPU_Driver_Internals.html#Initialization_3){.external +.text rel="nofollow"} during the system\'s bring up and runtime. + +GSP offload may occur during: + +- Hardware bring up when a cached version of the RM Core is loaded + from SPI flash + +```{=html} + +``` +- During host driver bring up when the RM Core is offloaded by the + [OpenRM driver](index.php/OpenRM.html){.external .text + rel="nofollow"}. +- During guest driver bring up when the RM Core is offloaded. + + -------------------------------------------------------------------------------- ---------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Load Source Payload Notes + [SPI Flash](https://wiki.segger.com/SPI_Flash){.external .text rel="nofollow"} Cached RM Core Used as a fallback in case of no rm offload. + OpenRM RM Core This is the RM Core which was traditionally contained in the proprietary RM driver. + VGX Guest Guest RM Core Future OpenRM guests may accomplish RM offload via GSP stubs (controlled via [gspHeapSize](https://github.com/NVIDIA/open-gpu-kernel-modules/blob/758b4ee8189c5198504cb1c3c5bc29027a9118a3/src/common/sdk/nvidia/inc/ctrl/ctrla081.h#L102){.external .text rel="nofollow"}?). + -------------------------------------------------------------------------------- ---------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + : Possible GSP Offloads + +#### [CMU]{#CMU .mw-headline} + +## [AMD]{#AMD .mw-headline} + +## []{#References_.28Talks_.26_Reading_Material.29}[References (Talks & Reading Material)]{#References_(Talks_&_Reading_Material) .mw-headline} + +1. [Security of the Intel Graphics Stack - Part 1 - + Introduction](https://igor-blue.github.io/2021/02/10/graphics-part1.html){.external + .text rel="nofollow"} +2. [Security of the Intel Graphics Stack - Part 2 - FW \<-\> + GuC](https://igor-blue.github.io/2021/02/24/graphics-part2.html){.external + .text rel="nofollow"} +3. [Firmware Security Realizations Part 3: SPI Write + Protections](https://eclypsium.com/2022/09/19/firmware-security-realizations-part-3-spi-write-protections/){.external + .text rel="nofollow"} +4. [Intel® FSP: Firmware Solutions for the Internet of + Things](https://www.intel.com/content/www/us/en/intelligent-systems/intel-firmware-support-package/fsp-firmware-solutions-iot-video.html){.external + .text rel="nofollow"} +::: + +::: printfooter +Retrieved from +\"[https://open-iov.org/index.php?title=GPU_Firmware&oldid=23779](index.php%3Ftitle=GPU_Firmware&oldid=23779.html){dir="ltr"}\" +::: +::: + +::: {#catlinks .catlinks .catlinks-allhidden mw="interface"} +::: +::: +::: + +::: {#mw-navigation} +## Navigation menu + +::: {#mw-head} +### Personal tools {#p-personal-label .vector-menu-heading} + +::: vector-menu-content +- [[Log + in](https://open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Firmware&returntoquery=oldid%3D23779 "You are encouraged to log in; however, it is not mandatory [o]"){accesskey="o"}]{#pt-login} +::: + +::: {#left-navigation} +### Namespaces {#p-namespaces-label .vector-menu-heading} + +::: vector-menu-content +- [[Page](index.php/GPU_Firmware.html "View the content page [c]"){accesskey="c"}]{#ca-nstab-main} +- [[Discussion](https://open-iov.org/index.php?title=Talk:GPU_Firmware&action=edit&redlink=1 "Discussion about the content page (page does not exist) [t]"){rel="discussion" + accesskey="t"}]{#ca-talk} +::: + +### Variants [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-variants-label .vector-menu-heading} + +::: vector-menu-content +::: +::: + +::: {#right-navigation} +### Views {#p-views-label .vector-menu-heading} + +::: vector-menu-content +- [[Read](index.php/GPU_Firmware.html)]{#ca-view} +- [[View + source](index.php%3Ftitle=GPU_Firmware&action=edit.html "This page is protected. + You can view its source [e]"){accesskey="e"}]{#ca-viewsource} +- [[View + history](index.php%3Ftitle=GPU_Firmware&action=history.html "Past revisions of this page [h]"){accesskey="h"}]{#ca-history} +::: + +### More [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-cactions-label .vector-menu-heading} + +::: vector-menu-content +::: + +::: {#p-search .vector-search-box role="search"} +
+ +### Search + +::: {#simpleSearch search-loc="header-navigation"} +::: + +
+::: +::: +::: + +::: {#mw-panel} +::: {#p-logo role="banner"} +[](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page"){.mw-wiki-logo} +::: + +### Navigation {#p-navigation-label .vector-menu-heading} + +::: vector-menu-content +- [[Main + page](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page [z]"){accesskey="z"}]{#n-mainpage-description} +- [[Recent + changes](https://open-iov.org/index.php/Special:RecentChanges "A list of recent changes in the wiki [r]"){accesskey="r"}]{#n-recentchanges} +- [[Random + page](index.php/Special:Random.html "Load a random page [x]"){accesskey="x"}]{#n-randompage} +- [[Help about + MediaWiki](https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents)]{#n-help-mediawiki} +::: + +### Tools {#p-tb-label .vector-menu-heading} + +::: vector-menu-content +- [[What links + here](index.php/Special:WhatLinksHere/GPU_Firmware.html "A list of all wiki pages that link here [j]"){accesskey="j"}]{#t-whatlinkshere} +- [[Related + changes](https://open-iov.org/index.php/Special:RecentChangesLinked/GPU_Firmware "Recent changes in pages linked from this page [k]"){rel="nofollow" + accesskey="k"}]{#t-recentchangeslinked} +- [[Special + pages](index.php/Special:SpecialPages.html "A list of all special pages [q]"){accesskey="q"}]{#t-specialpages} +- [[Printable + version](javascript:print(); "Printable version of this page [p]"){rel="alternate" + accesskey="p"}]{#t-print} +- [[Permanent + link](index.php%3Ftitle=GPU_Firmware&oldid=23779.html "Permanent link to this revision of the page")]{#t-permalink} +- [[Page + information](index.php%3Ftitle=GPU_Firmware&action=info.html "More information about this page")]{#t-info} +::: +::: +::: + +- [This page was last edited on 9 April 2023, at + 17:13.]{#footer-info-lastmod} + +```{=html} + +``` +- [[Privacy + policy](https://open-iov.org/index.php/Open-IOV:Privacy_policy "Open-IOV:Privacy policy")]{#footer-places-privacy} +- [[About + Open-IOV](index.php/Open-IOV:About.html "Open-IOV:About")]{#footer-places-about} +- [[Disclaimers](https://open-iov.org/index.php/Open-IOV:General_disclaimer "Open-IOV:General disclaimer")]{#footer-places-disclaimer} + +```{=html} + +``` +- [[![Powered by + MediaWiki](resources/assets/poweredby_mediawiki_88x31.png){srcset="resources/assets/poweredby_mediawiki_132x47.png 1.5x, resources/assets/poweredby_mediawiki_176x62.png 2x" + width="88" height="31" + loading="lazy"}](https://www.mediawiki.org/)]{#footer-poweredbyico} diff --git a/wiki/GPU_SBOM.md b/wiki/GPU_SBOM.md new file mode 100644 index 0000000..b03a4d0 --- /dev/null +++ b/wiki/GPU_SBOM.md @@ -0,0 +1,258 @@ +::: {#mw-page-base .noprint} +::: + +::: {#mw-head-base .noprint} +::: + +::: {#content .mw-body role="main"} +[]{#top} + +::: {#siteNotice} +::: + +::: mw-indicators +::: + +# GPU Software Bill Of Materials (SBOM) {#firstHeading .firstHeading} + +::: {#bodyContent .vector-body} +::: {#siteSub .noprint} +From Open-IOV +::: + +::: {#contentSub} +::: {.mw-revision .warningbox} +::: {#mw-revision-info} +Revision as of 14:58, 13 June 2023 by +[Arthur](./index.php%3Ftitle=User:Arthur&action=edit&redlink=1.html "User:Arthur (page does not exist)"){.new +.mw-userlink} +[([talk](./index.php%3Ftitle=User_talk:Arthur&action=edit&redlink=1.html "User talk:Arthur (page does not exist)"){.new +.mw-usertoollinks-talk} \| +[contribs](index.php/Special:Contributions/Arthur.html "Special:Contributions/Arthur"){.mw-usertoollinks-contribs})]{.mw-usertoollinks} +[(Updated Nvidia VGX vGPU version to 15.2 in GPU SBOM.)]{.comment} +::: + +::: {#mw-revision-nav} +([diff](https://open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&diff=prev&oldid=23786 "GPU Software Bill Of Materials (SBOM)")) +[← Older +revision](https://open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&direction=prev&oldid=23786 "GPU Software Bill Of Materials (SBOM)") +\| Latest revision (diff) \| Newer revision → (diff) +::: +::: +::: + +::: {#contentSub2} +::: + +::: {#jump-to-nav} +::: + +[Jump to +navigation](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html#mw-head){.mw-jump-link} +[Jump to +search](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html#searchInput){.mw-jump-link} + +::: {#mw-content-text .mw-body-content .mw-content-ltr lang="en" dir="ltr"} +::: mw-parser-output +This page will keep a running list of components used to achieve GPU +Virtualization. + +> An absence of critical technical documentation has historically slowed +> growth and adoption of developer ecosystems for GPU virtualization. +> +> This +> [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/){.external +> .text rel="nofollow"} licensed content can either be used with +> attribution, or used as inspiration for new documentation, created by +> GPU vendors for public commercial distribution as developer +> documentation. +> +> Where possible, this documentation will clearly label dates and +> versions of observed-but-not-guaranteed behaviour vs. +> vendor-documented stable interfaces/behaviour with guarantees of +> forward or backward compatibility. + + ------------- ----------------------------------------------------------------------------------------------------------------------------------------------- ------------- ----------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------- ----------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + Vendor Component Description Version OSS or Blob Filesize Vendor Docs Release Date Interfaces / APIs Notes + Microsoft Indirect Display Driver (IDD) Driver [OSS](https://github.com/Microsoft/Windows-driver-samples/tree/main/video/IndirectDisplay){.external .text rel="nofollow"} [Indirect Display Driver Overview](https://learn.microsoft.com/en-us/windows-hardware/drivers/display/indirect-display-driver-model-overview){.external .text rel="nofollow"} [UMDF](https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/overview-of-the-umdf){.external .text rel="nofollow"}, [KMDF](https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/){.external .text rel="nofollow"} The Indirect Display Driver (IDD) enables GPUs to render graphics at arbitrary resolutions without a physical display connected on Windows OS systems. + RedHat vfio_pci Driver 6.2-rc1 [OSS](https://github.com/torvalds/linux/tree/master/drivers/vfio/pci){.external .text rel="nofollow"} in-kernel [RedHat](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/virtualization/chap-virtualization-pci_passthrough){.external .text rel="nofollow"}, [kernel.org](https://docs.kernel.org/driver-api/vfio.html){.external .text rel="nofollow"} 2022.12.15 [irqfd](index.php/Virtual_I/O_Internals.html#Instruction_Execution){.external .text rel="nofollow"}, [ioeventfd](index.php/Virtual_I/O_Internals.html#Instruction_Execution){.external .text rel="nofollow"}, [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external .text rel="nofollow"} Reference VFIO Stub driver used for discrete assignment of IO, and assignment of some SR-IOV-backed vGPU devices into virtual machines. This driver is commonly replaced with a vendor built VFIO interface with differing memory management and/or page pinning mechanisms which are specific to the vGPU software internals. + Mediated Core (mdev.ko) Driver 6.2-rc1 OSS 0.044 MB [kernel.org](https://docs.kernel.org/driver-api/vfio-mediated-device.html){.external .text rel="nofollow"} 2016.xx.xx [irqfd](index.php/Virtual_I/O_Internals.html#Instruction_Execution){.external .text rel="nofollow"}, [ioeventfd](index.php/Virtual_I/O_Internals.html#Instruction_Execution){.external .text rel="nofollow"}, [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external .text rel="nofollow"}, [Type 1 IOMMU](index.php/Virtual_I/O_Internals.html#Mediated_DMA_Translations){.external .text rel="nofollow"} The Mediated Core driver provides a common interface for mediated device management that can be used by drivers of different devices. It is an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment (based on VFIO). + guest communication daemon Daemon 0.1.0 [OSS](https://){.external .text rel="nofollow"} [](){.external .text rel="nofollow"} 2023.02.08 [Virtio-Serial](https://fedoraproject.org/wiki/Features/VirtioSerial){.external .text rel="nofollow"}, CLI Handles IO to and from guests and the host using Virtio-Serial to handle multiple different guest modules. + mdev management CLI 1.0 [OSS](https://){.external .text rel="nofollow"} 0.084 MB [](){.external .text rel="nofollow"} 2023.01.06 CLI, [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external .text rel="nofollow"}, [RMAPI](index.php/GPU_Driver_Internals.html#RM_API){.external .text rel="nofollow"}, [Mediated Core](index.php/Virtual_I/O_Internals.html#Mediated_Core){.external .text rel="nofollow"} Configures the the [nvidia-vgpu-mgr](index.php/GPU_Driver_Internals.html#nvidia-vgpu-mgr){.external .text rel="nofollow"} process. + Intel i915 SR-IOV Driver [5.15](https://github.com/intel/linux-intel-lts/tree/5.15/ADL-linux-ER){.external .text rel="nofollow"} OSS in-kernel Intel\'s open source GPU driver for [GuC](index.php/GPU_Firmware.html#GuC){.external .text rel="nofollow"}-equipped graphics accelerators. + [GuC](index.php/GPU_Firmware.html#GuC){.external .text rel="nofollow"} μOS Firmware Blob IOMMU Interrupts, Power Management Interrupts, [GTT](index.php/GPU_Driver_Internals.html#GTT_(Graphics_Translation_Table)){.external .text rel="nofollow"} Handles scheduling, and power management. + HuC [GTT](index.php/GPU_Driver_Internals.html#GTT_(Graphics_Translation_Table)){.external .text rel="nofollow"} Handles video encoding/decoding. + [Display Virtualization for Windows OS](index.php/GPU_Driver_Internals.html#Display_Surface_Virtualization_2){.external .text rel="nofollow"} Driver [791](https://github.com/intel/Display-Virtualization-for-Windows-OS/releases/){.external .text rel="nofollow"} [OSS](https://github.com/intel/Display-Virtualization-for-Windows-OS){.external .text rel="nofollow"} [github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt](https://github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt){.external .text rel="nofollow"} [udmabuf](https://github.com/ikwzm/udmabuf){.external .text rel="nofollow"}, [UMDF](https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/overview-of-the-umdf){.external .text rel="nofollow"}, [KMDF](https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/){.external .text rel="nofollow"} Intel\'s \'Display Virtualization for Windows OS\' provides a virtual pixel surface used for hardware graphics rendering using Microsoft\'s open source \'Indirect Display Driver (IDD)\'. Display virtualization for Windows OS makes use of display memory sharing primitives provided in-driver by the i915 host. + Nvidia [OpenRM](index.php/OpenRM.html "OpenRM") Driver 525.85.12 OSS [github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md](https://github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md){.external .text rel="nofollow"} 2023.01.31 Nvidia\'s open source GPU driver for [GSP](index.php/GPU_Firmware.html#GSP){.external .text rel="nofollow"}-equipped graphics accelerators. + [GSP](index.php/GPU_Firmware.html#GSP){.external .text rel="nofollow"} RM (uproc) Firmware Blob 2023.01.31 RPC Embedded firmware based on [LibOS](https://lwn.net/Articles/637658/){.external .text rel="nofollow"} containing the [RM Core](index.php/GPU_Driver_Internals.html#RM_Core){.external .text rel="nofollow"}. + Falcon/NvRISC (uproc) FBIF (Frame Buffer Interface) / GMMU Embedded firmware which handles many aspects of the device including configuring the GPU\'s GMMU controller. + nvidia-vgpud Daemon [v15.2](https://docs.nvidia.com/grid/15.0/whats-new-vgpu/index.html){.external .text rel="nofollow"} Blob 0.108 MB [docs.nvidia.com/grid](https://docs.nvidia.com/grid/index.html){.external .text rel="nofollow"} 2023.01.xx CLI, [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external .text rel="nofollow"}, [RMAPI](index.php/GPU_Driver_Internals.html#RM_API){.external .text rel="nofollow"}, [Mediated Core](index.php/Virtual_I/O_Internals.html#Mediated_Core){.external .text rel="nofollow"} Configures the the [nvidia-vgpu-mgr](index.php/GPU_Driver_Internals.html#nvidia-vgpu-mgr){.external .text rel="nofollow"} process. + nvidia-vgpu-mgr 0.132 MB 2023.01.xx [vmiop](index.php/GPU_Driver_Internals.html#vmiop){.external .text rel="nofollow"}, [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external .text rel="nofollow"}, [RMAPI](index.php/GPU_Driver_Internals.html#RM_API){.external .text rel="nofollow"}, [vRPC](index.php/GPU_Driver_Internals.html#Guest_kernel_(nvidia.ko)){.external .text rel="nofollow"}, pRPC, [Mediated Core](index.php/Virtual_I/O_Internals.html#Mediated_Core){.external .text rel="nofollow"} Handles IO to and from guest RM, host RM, and hardware. + libnvidia-vgpu.so Library 3.1 MB 2023.01.xx [vmiop](index.php/GPU_Driver_Internals.html#vmiop){.external .text rel="nofollow"}, [RMAPI](index.php/GPU_Driver_Internals.html#RM_API){.external .text rel="nofollow"}, [Mediated Core](index.php/Virtual_I/O_Internals.html#Mediated_Core){.external .text rel="nofollow"} Handles IO to and from guest RM, host RM, and hardware. Contains circular dependancies with [nvidia-vgpu-mgr](index.php/GPU_Driver_Internals.html#nvidia-vgpu-mgr){.external .text rel="nofollow"}. + nvidia-vgpu-vfio.ko Driver 0.108 MB 2023.01.xx [Type 1 IOMMU](index.php/Virtual_I/O_Internals.html#Mediated_DMA_Translations){.external .text rel="nofollow"}, [irqfd, ioeventfd](index.php/Virtual_I/O_Internals.html#Instruction_Execution){.external .text rel="nofollow"}, [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external .text rel="nofollow"}, [Mediated Core](index.php/Virtual_I/O_Internals.html#Mediated_Core){.external .text rel="nofollow"} Handles incremental memory mapping (non-page pinning per the standard vfio-pci driver). + ------------- ----------------------------------------------------------------------------------------------------------------------------------------------- ------------- ----------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------- ----------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + : Component Table + +## [More Information]{#More_Information .mw-headline} + +1. [Nvidia RISC-V + Story](https://riscv.org/wp-content/uploads/2016/07/Tue1100_Nvidia_RISCV_Story_V2.pdf){.external + .text rel="nofollow"} +2. [](){.external .text + rel="nofollow"} +3. [Intel Graphics Programmer\'s Reference Manuals + (PRM)](https://01.org/linuxgraphics/documentation/hardware-specification-prms){.external + .text rel="nofollow"} +4. [i915: Hardware Contexts (and some bits about + batchbuffers)](https://bwidawsk.net/blog/2013/1/i915-hardware-contexts-and-some-bits-about-batchbuffers/){.external + .text rel="nofollow"} +5. [i915: The Global GTT Part + 1](https://bwidawsk.net/blog/2014/6/the-global-gtt-part-1/){.external + .text rel="nofollow"} +6. [i915: Aliasing PPGTT Part + 2](https://bwidawsk.net/blog/2014/6/aliasing-ppgtt-part-2/){.external + .text rel="nofollow"} +7. [i915: True PPGTT Part + 3](https://bwidawsk.net/blog/2014/7/true-ppgtt-part-3/){.external + .text rel="nofollow"} +8. [i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit + address space, GPU \"mirroring\", and yeah, something about relocs + too)](https://bwidawsk.net/blog/2014/7/future-ppgtt-part-4-dynamic-page-table-allocations-64-bit-address-space-gpu-mirroring-and-yeah-something-about-relocs-too/){.external + .text rel="nofollow"} +9. [i915: Security of the Intel Graphics Stack - Part 1 - + Introduction](https://igor-blue.github.io/2021/02/10/graphics-part1.html){.external + .text rel="nofollow"} +10. [i915: Security of the Intel Graphics Stack - Part 2 - FW \<-\> + GuC](https://igor-blue.github.io/2021/02/24/graphics-part2.html){.external + .text rel="nofollow"} +11. [i915: An Introduction to Intel GVT-g (with new + architecture)](https://01.org/sites/default/files/documentation/an_introduction_to_intel_gvt-g_for_external.pdf){.external + .text rel="nofollow"} +::: + +::: printfooter +Retrieved from +\"[https://open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials\_(SBOM)&oldid=23786](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html){dir="ltr"}\" +::: +::: + +::: {#catlinks .catlinks .catlinks-allhidden mw="interface"} +::: +::: +::: + +::: {#mw-navigation} +## Navigation menu + +::: {#mw-head} +### Personal tools {#p-personal-label .vector-menu-heading} + +::: vector-menu-content +- [[Log + in](https://open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Software+Bill+Of+Materials+%28SBOM%29&returntoquery=oldid%3D23786 "You are encouraged to log in; however, it is not mandatory [o]"){accesskey="o"}]{#pt-login} +::: + +::: {#left-navigation} +### Namespaces {#p-namespaces-label .vector-menu-heading} + +::: vector-menu-content +- [[Page](index.php/GPU_Software_Bill_Of_Materials_(SBOM).html "View the content page [c]"){accesskey="c"}]{#ca-nstab-main} +- [[Discussion](https://open-iov.org/index.php?title=Talk:GPU_Software_Bill_Of_Materials_(SBOM)&action=edit&redlink=1 "Discussion about the content page (page does not exist) [t]"){rel="discussion" + accesskey="t"}]{#ca-talk} +::: + +### Variants [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-variants-label .vector-menu-heading} + +::: vector-menu-content +::: +::: + +::: {#right-navigation} +### Views {#p-views-label .vector-menu-heading} + +::: vector-menu-content +- [[Read](index.php/GPU_Software_Bill_Of_Materials_(SBOM).html)]{#ca-view} +- [[View + source](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&action=edit.html "This page is protected. + You can view its source [e]"){accesskey="e"}]{#ca-viewsource} +- [[View + history](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&action=history.html "Past revisions of this page [h]"){accesskey="h"}]{#ca-history} +::: + +### More [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-cactions-label .vector-menu-heading} + +::: vector-menu-content +::: + +::: {#p-search .vector-search-box role="search"} +
+ +### Search + +::: {#simpleSearch search-loc="header-navigation"} +::: + +
+::: +::: +::: + +::: {#mw-panel} +::: {#p-logo role="banner"} +[](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page"){.mw-wiki-logo} +::: + +### Navigation {#p-navigation-label .vector-menu-heading} + +::: vector-menu-content +- [[Main + page](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page [z]"){accesskey="z"}]{#n-mainpage-description} +- [[Recent + changes](https://open-iov.org/index.php/Special:RecentChanges "A list of recent changes in the wiki [r]"){accesskey="r"}]{#n-recentchanges} +- [[Random + page](index.php/Special:Random.html "Load a random page [x]"){accesskey="x"}]{#n-randompage} +- [[Help about + MediaWiki](https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents)]{#n-help-mediawiki} +::: + +### Tools {#p-tb-label .vector-menu-heading} + +::: vector-menu-content +- [[What links + here](index.php/Special:WhatLinksHere/GPU_Software_Bill_Of_Materials_(SBOM).html "A list of all wiki pages that link here [j]"){accesskey="j"}]{#t-whatlinkshere} +- [[Related + changes](https://open-iov.org/index.php/Special:RecentChangesLinked/GPU_Software_Bill_Of_Materials_(SBOM) "Recent changes in pages linked from this page [k]"){rel="nofollow" + accesskey="k"}]{#t-recentchangeslinked} +- [[Special + pages](index.php/Special:SpecialPages.html "A list of all special pages [q]"){accesskey="q"}]{#t-specialpages} +- [[Printable + version](javascript:print(); "Printable version of this page [p]"){rel="alternate" + accesskey="p"}]{#t-print} +- [[Permanent + link](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html "Permanent link to this revision of the page")]{#t-permalink} +- [[Page + information](index.php%3Ftitle=GPU_Software_Bill_Of_Materials_(SBOM)&action=info.html "More information about this page")]{#t-info} +::: +::: +::: + +- [This page was last edited on 13 June 2023, at + 14:58.]{#footer-info-lastmod} + +```{=html} + +``` +- [[Privacy + policy](https://open-iov.org/index.php/Open-IOV:Privacy_policy "Open-IOV:Privacy policy")]{#footer-places-privacy} +- [[About + Open-IOV](index.php/Open-IOV:About.html "Open-IOV:About")]{#footer-places-about} +- [[Disclaimers](https://open-iov.org/index.php/Open-IOV:General_disclaimer "Open-IOV:General disclaimer")]{#footer-places-disclaimer} + +```{=html} + +``` +- [[![Powered by + MediaWiki](resources/assets/poweredby_mediawiki_88x31.png){srcset="resources/assets/poweredby_mediawiki_132x47.png 1.5x, resources/assets/poweredby_mediawiki_176x62.png 2x" + width="88" height="31" + loading="lazy"}](https://www.mediawiki.org/)]{#footer-poweredbyico} diff --git a/wiki/GSP-570.144W-Firmware-Analysis.md b/wiki/GSP-570.144W-Firmware-Analysis.md new file mode 100644 index 0000000..d079b0b --- /dev/null +++ b/wiki/GSP-570.144W-Firmware-Analysis.md @@ -0,0 +1,305 @@ +# NVIDIA GSP 570.144W Firmware Analysis (TU102/TU104) + +## Binary Information +- **File**: `gsp-570.144.fwimage.bin` +- **Size**: 28.5 MB +- **Format**: ELF, RV64IMAC (RISC-V 64-bit) +- **Base Address**: 0x04000000 +- **MD5**: `13ce12a392a31eeb79a2e6ebd3a4a93a` + +## Architecture Overview + +### Memory Map +``` +0x04000000 - 0x05FFFFFF : Code + Read-only data (~32 MB) +0x04296040 : Global state structure (cRam0000000004296048) +0x0429B750 : Error/status registers +0x041DC350 : Stack canary / frame guard +0x429B000 - 0x429BFFF : Memory allocator arena (0x429B450 = alloc entry) +``` + +### Calling Convention (RISC-V RV64IMAC) +| Register | Purpose | +|----------|---------| +| s0 (x8) | Frame pointer | +| s1 (x9), s4 (x12), s10 (x20) | RA save locations | +| s1-s11 | Callee-saved (pushed to stack) | +| a0-a7 | Arguments / return values | +| sp | Stack pointer (grows down, frames 96-560 bytes) | + +--- + +## RPC System + +### 12 RPC Types (Jump Table at 0x059BFEB0) + +| Type | Name | Handler A | Handler B | Dispatcher | +|------|------|-----------|-----------|------------| +| 0x01 | ALLOC | — | — | Primary | +| 0x02 | FREE | — | — | Primary | +| 0x03 | MAP | 0x05766AB7 | 0x05778A37 | Secondary | +| 0x04 | UNMAP | 0x057669B7 | 0x05779937 | Primary + Secondary | +| 0x05 | PIN | 0x057664B7 | 0x0577A3B7 | Secondary | +| 0x06 | UNPIN | 0x057682B7 | 0x05779FB7 | Secondary | +| 0x07 | SCHEDULE | 0x05767F37 | 0x0575AEB7 | Primary + Secondary | +| 0x08 | YIELD | 0x0575AE37 | 0x05767337 | Secondary | +| 0x09 | NOTIFY | 0x0577C8B7 | 0x05767837 | Secondary | +| 0x0A | BAR_TRAP | 0x057675B7 | — | Secondary | +| 0x0B | MIGRATE | — | — | Primary | +| 0x0C | DEBUG | — | — | — | + +### Primary Dispatcher (0x057A1AC0) +``` +Entry: FUN_ram_057a1ac0(param_1, param_2, param_3, param_4, *out_id, *out_a, *out_b, *out_c) +``` +- Extracts RPC type from `param_1` +- Validates against max type (bgeu x12, x13 checks for types 11 and 13) +- MIGRATE (0x0B) branches at 0x057A1BDC and 0x057A1D54 +- Indexes into 32-entry jump table at **0x057A3AD8** + +#### Primary Dispatcher Sub-Command Jump Table (0x057A3AD8) + +| Subcmd | Target | Decompiled | Description | +|--------|--------|------------|-------------| +| 0 | 0x057A1DB4 | ✅ | Returns ID=0x40 | +| 1 | 0x057A1C18 | ✅ | | +| 2 | 0x057A39FC | ✅ | | +| 3 | 0x057A1BCC | ✅ | | +| 4 | 0x057A1EF4 | ✅ | | +| 5 | 0x057A1E94 | ✅ | | +| 6 | 0x057A3A28 | ✅ | | +| 7 | 0x057A3A60 | ✅ | | +| 8 | 0x057A1C6C | ✅ | | +| 9 | 0x057A3A48 | ✅ | | +| 10 | 0x057A1F6C | ✅ | | +| 11 | 0x057A3AC4 | ✅ | | +| 12 | 0x057A1E10 | ✅ | | +| 13 | 0x057A3A90 | ✅ | | +| 14 | 0x057A39BC | ✅ | | +| 15 | 0x057A3AAC | ✅ | | +| 16 | 0x057A3A78 | ✅ | | +| 17 | 0x057A1CCC | ✅ | | +| 18 | 0x057A39E0 | ✅ | | +| 19 | 0x057A1FA8 | ✅ | | +| 20 | 0x057A2094 | ✅ | | +| 21 | 0x057A2074 | ✅ | | +| 22 | 0x057A2044 | ✅ | | +| 23 | 0x057A20D4 | ✅ | | +| 24 | 0x057A20B4 | ✅ | | +| 25 | 0x057A1FC8 | ✅ | | +| 26 | 0x057A2008 | ✅ | | +| 27 | 0x057A1FE8 | ✅ | | +| 28 | 0x057A2024 | ✅ | | +| 29 | 0x057A219C | ✅ | | +| 30 | 0x057A20FC | ✅ | | +| 31 | 0x057A214C | ✅ | | + +**Pattern**: Each sub-command returns a constant ID in `*out_id` (e.g., 0x10, 0x14, 0x40) and echoes input params to output pointers. + +### Secondary Dispatcher (0x04ED39DC) +- Branch-based dispatch for ALL 11 RPC types +- 141 KB decompiled — handles MAP, UNMAP, PIN, UNPIN, SCHEDULE, YIELD, NOTIFY, BAR_TRAP +- Entry: 0x04ED34B8 (PIN handler from secondary) + +### Specialized Main Handlers + +| Function | Address | Size | Role | +|----------|---------|------|------| +| `rpc_alloc_main` | 0x057E94EC | 40 KB | Core ALLOC implementation | +| `rpc_schedule_main` | 0x051EFBF4 | 1.8 KB | Core SCHEDULE implementation | +| `rpc_bar_trap_handler` | 0x04CB8188 | 40 KB | BAR1 emulation | +| `rpc_pin_handler` | 0x04ED34B8 | — | PIN from secondary dispatcher | + +--- + +## BAR Emulation (RPC 0x0A) + +### Handler: 0x04CB8188 (40 KB) +**Strings Referenced**: +- `BAR1` at 0x0406570E, 0x04085DE0 +- `Bar1Rest` at 0x040656DA +- `ForceBarAccess` at 0x040656F2 +- `Bar1Aperture` at 0x04065722 + +**Key Operations**: +- Memory allocation via `UNK_ram_058A1A9C` at arena 0x429B450 +- Buffer management with 0x429B428 (cache/flush) +- Error codes: 0x51 (OOM), 0x1E (timeout), 0x1D, 0x1F, 0x25, 0x37, 0x56 +- Uses `ebreak` for fatal errors with logging at 0x05AB7DA0 +- Stack canary check against 0x041DC350 + +**Integration Point for vGPU-IO**: +```c +// Register BAR trap handler at 0x04CB8188 +// Monitor BAR1, Bar1Rest, ForceBarAccess, Bar1Aperture registers +// Emulate BAR1 aperture/size for guest VF +``` + +--- + +## WPR Management + +### Handlers: 0x04F00B0C, 0x04F00C78 (62 KB each) + +**String References (60 locations)**: +- `WPR_WRITE_COMPLETE`, `WPR_READ_COMPLETE` +- `WPR_WRITE_TIMEOUT`, `WPR_READ_TIMEOUT` +- `NV_WPR_WRITE_COMPLETE`, `NV_WPR_READ_COMPLETE` +- `NV_WPR_WRITE_TIMEOUT`, `NV_WPR_READ_TIMEOUT` + +**Key Operations**: +- VBIOS parsing (checks for `0xAA55`, `0x57464F4E` "WFON", `0x5746564E` "WFVN") +- Memory allocation at 0x429B450 +- DMA/copy via `UNK_ram_0588F9C4`, `UNK_ram_05AEC86C` +- State machine with completion/timeout handling +- Error codes: 0x1E-0x25, 0x37, 0x51, 0x56, 0xFFFF + +**Integration Point for vGPU-IO**: +```c +// Hook WPR completion callbacks from string reference locations +// Implement NV_WPR_WRITE/READ_COMPLETE/TIMEOUT notifications +// Manage WPR regions for guest VF memory isolation +``` + +--- + +## Migration Protocol (RPC 0x0B) + +### Dual Jump Tables + +#### Table 1: 0x04179ED8 (Primary dispatcher MIGRATE branch at 0x057A1BDC) +| Index | Target | Decompiled | +|-------|--------|------------| +| 0 | 0x057A2344 | ✅ Returns ID=0x14, reads flag at `in_t1+0x7F9` | +| 1 | 0x057A2320 | ✅ | +| 2 | 0x057A230C | ✅ | +| 3 | 0x057A22F8 | ✅ Returns ID=0x10 | +| 4 | 0x057A2388 | ✅ | +| 5 | 0x057A23D8 | ✅ | +| 6 | 0x057A23AC | ✅ | +| 7 | 0x057A2478 | ✅ | +| 8 | 0x057A2428 | ✅ | +| 9 | 0x057A2454 | ✅ | +| 10 | 0x057A2404 | ✅ | +| 11 | 0x057A2364 | ✅ | +| 12 | 0x057A1F3C | (dup) | +| 13 | 0x057A299C | | +| 14 | 0x057A1F3C | (dup) | +| 15 | 0x057A1F3C | (dup) | + +#### Table 2: 0x04179FBC (Primary dispatcher MIGRATE branch at 0x057A1D5C) +| Index | Target | Decompiled | +|-------|--------|------------| +| 0 | 0x057A257C | ✅ | +| 1 | 0x057A25E4 | ✅ | +| 2 | 0x057A24EC | ✅ | +| 3 | 0x057A2608 | ✅ | +| 4 | 0x057A2534 | ✅ | +| 5 | 0x057A25C0 | ✅ | +| 6 | 0x057A24A4 | ✅ | +| 7 | 0x057A259C | ✅ | +| 8 | 0x057A2510 | ✅ | +| 9 | 0x057A2558 | ✅ | +| 10 | 0x057A24C8 | ✅ | +| 11 | 0x057A262C | ✅ | +| 12 | 0x057A345C | ✅ | +| 13 | 0x057A36D8 | ✅ | +| 14 | 0x057A35D8 | ✅ | +| 15 | 0x057A3658 | ✅ | + +**Pattern**: Migration sub-commands follow same descriptor pattern as primary dispatcher — return constant ID, echo params. + +--- + +## Entry Point & Boot Sequence + +### 0x04009000 (573 bytes) +- Initializes global state at 0x04296040 +- Sets up stack canary at 0x041DC350 +- Configures memory allocator arena at 0x429B450 +- Registers RPC dispatchers +- Jumps to main scheduler loop + +--- + +## Decompiled Output Directory + +``` +$OPEN_IOV_ROOT/firmware/570-GSP/decompiled/ +├── entry_ram_04009000.c # Boot entry +├── FUN_ram_04cb8188_ram_04cb8188.c # BAR trap handler (40 KB) +├── FUN_ram_04cc58f8_ram_04cc58f8.c # Secondary dispatcher (141 KB) +├── FUN_ram_04d00a18_ram_04d00a18.c # ALLOC-dominant (142 KB) +├── FUN_ram_04ed39dc_ram_04ed39dc.c # Secondary dispatcher (141 KB) +├── FUN_ram_04f00b0c_ram_04f00b0c.c # WPR handler 1 (62 KB) +├── FUN_ram_04f00c78_ram_04f00c78.c # WPR handler 2 (62 KB) +├── FUN_ram_051efbf4_ram_051efbf4.c # SCHEDULE main (1.8 KB) +├── FUN_ram_054a7de0_ram_054a7de0.c # ALLOC-dominant (67 KB) +├── FUN_ram_05723ef4_ram_05723ef4.c # Tertiary dispatcher (13 KB) +├── FUN_ram_057a1ac0_ram_057a1ac0.c # Primary dispatcher (558 B) +├── FUN_ram_057a1bcc_ram_057a1bcc.c ... # 32 sub-commands (~550 B each) +├── FUN_ram_057e94ec_ram_057e94ec.c # ALLOC main (40 KB) +├── FUN_ram_059be7f4_ram_059be7f4.c # RPC jump table (4.9 KB) +├── FUN_ram_057664b7_ram_057664b7.c ... # MAP/PIN/UNPIN/SCHED/YIELD/NOTIFY handlers +└── FUN_ram_057a22f8_ram_057a22f8.c ... # 28 migration handlers +``` + +--- + +## vGPU-IO Integration Checklist + +### Memory Management (ALLOC/FREE/MAP/UNMAP) +- [ ] Implement kernel RPC client calling 0x057A1AC0 +- [ ] Parse sub-command descriptors from 0x057A3AD8 jump table +- [ ] Hook ALLOC main at 0x057E94EC for vGPU memory carve-out + +### Page Pinning (PIN/UNPIN) +- [ ] Call secondary dispatcher PIN at 0x04ED34B8 +- [ ] Implement UNPIN via 0x057682B7 / 0x05779FB7 + +### Scheduling (SCHEDULE/YIELD) +- [ ] Use 0x05767F37 / 0x0575AEB7 / 0x051EFBF4 for vCPU scheduling +- [ ] Implement YIELD at 0x0575AE37 / 0x05767337 + +### BAR Emulation (BAR_TRAP) +- [ ] Register handler at 0x04CB8188 +- [ ] Emulate BAR1/Bar1Rest/ForceBarAccess/Bar1Aperture for VF +- [ ] Monitor 0x429B450 allocator for BAR backing store + +### WPR Management +- [ ] Hook completion callbacks from string refs (0x04F00B0C, 0x04F00C78) +- [ ] Implement NV_WPR_* notification forwarding to guest +- [ ] Manage WPR regions per-VF for isolation + +### Migration (MIGRATE) +- [ ] Implement dual jump table dispatch (0x04179ED8, 0x04179FBC) +- [ ] Handle 28 migration sub-commands +- [ ] Coordinate with guest VF live migration protocol + +--- + +## Tools & Scripts + +| Script | Purpose | +|--------|---------| +| `DecompileFunctions.java` | Ghidra headless decompilation | +| `trace_all_subsystems.py` | Binary analysis: WPR/BAR/Migration strings, jump tables | +| `gsp-fwimage-570.144/` | Ghidra project directory | + +### Ghidra Usage +```bash +/snap/ghidra/current/ghidra/support/analyzeHeadless \ + /path/to/project gsp-analysis \ + -import gsp-570.144.fwimage.bin \ + -noanalysis \ + -postScript DecompileFunctions.java \ + 0xADDRESS1,0xADDRESS2,... +``` + +--- + +## References +- Handoff: `$OPEN_IOV_ROOT/../Handoff-vGPU-IO.md` +- RPC Map: `$OPEN_IOV_ROOT/firmware/570-GSP/RPC_HANDLER_MAP.md` +- Final Report: `$OPEN_IOV_ROOT/firmware/570-GSP/FINAL_REPORT.md` +- Analysis Results: `$OPEN_IOV_ROOT/firmware/570-GSP/analysis_results.json` \ No newline at end of file diff --git a/wiki/GSP-RPC-Emulation.md b/wiki/GSP-RPC-Emulation.md new file mode 100644 index 0000000..2e6849a --- /dev/null +++ b/wiki/GSP-RPC-Emulation.md @@ -0,0 +1,227 @@ +# GSP vGPU RPC Emulation + +## Overview + +Open-IOV includes **emulation mode** that allows operation with unmodified consumer/OpenRM GSP firmware by emulating missing vGPU RPC handlers locally in kernel and userspace. + +## Problem + +The NVIDIA GSP firmware on consumer drivers (550.163.01) and OpenRM lacks the vGPU-specific RPC handlers that exist only in the GRID host driver firmware: + +| Handler | Address | Size | Purpose | +|---------|---------|------|---------| +| BAR Trap | 0x04CB8188 | 40KB | BAR1/ForceBarAccess/Aperture | +| WPR Handler 1 | 0x04F00B0C | 62KB | Write/Read Protect Regions | +| WPR Handler 2 | 0x04F00C78 | 62KB | Write/Read Protect Regions | +| Migration | 0x04179ED8/0x04179FBC | - | Live migration | + +Without these handlers, VF creation times out at BAR configuration (RPC to 0x04CB8188). + +## Solution: Emulation Mode + +Emulation mode intercepts vGPU RPC calls and handles them locally instead of sending to GSP: + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ Emulation Architecture │ +├─────────────────────────────────────────────────────────────────┤ +│ │ +│ Userspace App (libiov.so) │ +│ │ │ +│ ▼ │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ Kernel IOCTL │────▶│ Emulation Layer │ │ +│ │ Handler │ │ (kernel) │ │ +│ └─────────────────┘ └────────┬────────┘ │ +│ │ │ +│ ┌───────────────┼───────────────┐ │ +│ ▼ ▼ ▼ │ +│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ +│ │ BAR Emu │ │ WPR Emu │ │ Mem Emu │ │ +│ │ (kernel) │ │ (kernel) │ │ (kernel) │ │ +│ └──────────┘ └──────────┘ └──────────┘ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌──────────────────────────────────────────┐ │ +│ │ Userspace Emulator (libiov.so) │ │ +│ │ rpc_emu_bar_*(), rpc_emu_wpr_*() │ │ +│ └──────────────────────────────────────────┘ │ +│ │ +└─────────────────────────────────────────────────────────────────┘ +``` + +## Auto-Detection (Default Behavior) + +**Emulation mode is ON by default** and auto-detects at driver load: + +1. Driver initializes RPC communication with GSP +2. Sends test `BAR_TRAP` RPC (non-destructive READ) +3. **If GSP responds** (ret=0) → vGPU handlers present → **emulation disabled** +4. **If GSP times out/errors** (ret=-ETIMEDOUT/-EIO/-ENODEV) → handlers missing → **emulation enabled** + +``` +dmesg output: + gsp-vgpu: Auto-detecting GSP vGPU RPC handler support... + gsp-vgpu: GSP lacks vGPU RPC handlers (ret=-110) - ENABLING emulation mode + # or + gsp-vgpu: GSP has vGPU RPC handlers - DISABLING emulation mode +``` + +## Module Parameters + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `emulation_mode` | bool | 1 (ON) | Current state (read-only, shows auto-detected value) | +| `emulation_override` | bool | 0 (auto) | Override: 1=force emulation ON, 0=force emulation OFF | + +```bash +# Default: auto-detect +sudo insmod gsp-vgpu.ko firmware_name=gsp-570.144.fwimage.bin + +# Force emulation ON (testing with GRID GSP) +sudo insmod gsp-vgpu.ko firmware_name=gsp-570.144.fwimage.bin emulation_override=1 + +# Force emulation OFF (requires GRID GSP) +sudo insmod gsp-vgpu.ko firmware_name=gsp-570.144.fwimage.bin emulation_override=0 +``` + +## Emulated RPC Handlers + +### Kernel Emulation (`driver/`) + +| RPC Type | Handler | Emulation | +|----------|---------|-----------| +| `GSP_RPC_ALLOC` (0x01) | `gsp_vf_mem_alloc()` | Synthetic handles/VAs from local counter | +| `GSP_RPC_PIN` (0x05) | `gsp_vf_mem_pin()` | Synthetic DMA addresses from local counter | +| `GSP_RPC_MAP` (0x03) | `gsp_vf_mem_map()` | Identity map (return requested VA) | +| `GSP_RPC_BAR_TRAP` (0x0A) | `gsp_bar_trap_handler()` | Local aperture/force_access state | +| `GSP_RPC_MAP` (WPR) | `gsp_vf_wpr_protect()` | Local WPR region list | +| `GSP_RPC_UNMAP` (WPR) | `gsp_vf_wpr_unprotect()` | Local WPR region removal | + +### Userspace Emulation (`userspace/lib/rpc_emulator.c`) + +| Function | Purpose | +|----------|---------| +| `rpc_emu_bar_config()` | Local aperture offset/size + backing store | +| `rpc_emu_bar_force_access()` | Local force_access state | +| `rpc_emu_bar_save/restore()` | Migration state serialization | +| `rpc_emu_wpr_protect_write/read()` | Local WPR region tracking | +| `rpc_emu_wpr_unprotect()` | Local WPR region removal | +| `rpc_emu_wpr_set_timeout()` | Local timeout tracking | +| `rpc_emu_wpr_check_access()` | Access violation detection | + +## Emulation Data Structures + +### BAR State (per VF) +```c +struct gsp_bar_state { + uint64_t aperture_offset; // BAR1 aperture base + uint64_t aperture_size; // BAR1 aperture size (max 256KB) + bool force_access; // ForceBarAccess enabled + uint32_t force_vf; // VF holding force access + void *backing_store; // Emulated BAR memory + size_t backing_size; // Backing store size +}; +``` + +### WPR Region List (per VF) +```c +struct gsp_wpr_region { + struct list_head list; + uint64_t base; // Region base address + uint64_t size; // Region size + uint32_t flags; // GSP_WPR_WRITE/READ/EXECUTE + uint32_t vf_id; // Owning VF + void (*completion_cb)(...); // Write/read complete callback + void (*timeout_cb)(...); // Timeout callback + uint64_t timeout_ns; // Timeout in nanoseconds +}; +``` + +### Userspace Emulator State +```c +struct emu_bar_state { + uint64_t aperture_offset; + uint64_t aperture_size; + bool force_access; + uint32_t force_vf; + void *backing_store; + size_t backing_size; + pthread_mutex_t lock; +}; + +struct emu_wpr_state { + struct emu_wpr_region *regions; // Linked list + pthread_mutex_t lock; +}; +``` + +## Fallback Logic + +Userspace library (`libiov.so`) implements fallback: + +```c +vgpu_error_t vgpu_bar_config(vgpu_vf_t vf, uint64_t offset, uint64_t size) { + // 1. Try kernel IOCTL (sends RPC to GSP) + ret = ioctl(fd, GSP_IOCTL_BAR_CONFIG, &args); + + // 2. If GSP lacks handlers (ENOTSUP/ETIMEDOUT/EIO), use emulator + if (ret < 0 && dev->emulation_enabled && + (errno == ENOTSUP || errno == ETIMEDOUT || errno == EIO)) { + return rpc_emu_bar_config(vf->id, offset, size); + } + + return map_errno(errno); +} +``` + +## Limitations + +| Feature | Emulation Status | Notes | +|---------|-----------------|-------| +| BAR Aperture Config | ✅ Full | Local state + backing store | +| ForceBarAccess | ✅ Full | Per-VF exclusive access | +| BAR Save/Restore | ✅ Full | Migration support | +| WPR Write Protect | ✅ Full | Region tracking + access check | +| WPR Read Protect | ✅ Full | Region tracking + access check | +| WPR Timeout | ✅ Partial | Timeout stored, callbacks not wired | +| Memory Alloc | ✅ Basic | Synthetic handles/VAs | +| Memory Pin | ✅ Basic | Synthetic DMA addresses | +| Memory Map | ✅ Basic | Identity mapping | +| Migration | ⚠️ Partial | BAR/WPR state only | +| Scheduling | ❌ No | Returns success, no actual scheduling | +| Notifications | ❌ No | No async event delivery | + +## Testing Emulation + +```bash +# 1. Load driver (auto-enables emulation on consumer GSP) +sudo insmod driver/gsp-vgpu.ko firmware_name=gsp-570.144.fwimage.bin + +# 2. Verify emulation enabled in dmesg +dmesg -T | grep -i emulation +# gsp-vgpu: GSP lacks vGPU RPC handlers (ret=-110) - ENABLING emulation mode + +# 3. Run example - should complete without timeouts +sudo LD_LIBRARY_PATH=userspace/lib ./userspace/examples/example_vgpu /dev/gsp-vgpu + +# 4. Check debugfs for emulated state +cat /sys/kernel/debug/gsp-vgpu/vfs/vf1/bar_state +cat /sys/kernel/debug/gsp-vgpu/vfs/vf1/wpr_regions +``` + +## Future Work + +- [ ] Wire WPR timeout callbacks to kernel timers +- [ ] Implement emulated scheduling with work queues +- [ ] Add async notification support via eventfd +- [ ] Complete migration state for WPR regions +- [ ] Performance optimization (batch RPC emulation) +- [ ] Conformance tests vs GRID GSP behavior + +## Related Documentation + +- [BAR Emulation Specification](BAR-Emulation-Specification.md) +- [WPR Management](WPR-Management.md) +- [RPC Message Format](RPC-Message-Format.md) +- [Integration Guide](vGPU-IO-Integration-Guide.md) \ No newline at end of file diff --git a/wiki/Glossary.md b/wiki/Glossary.md new file mode 100644 index 0000000..2c61a83 --- /dev/null +++ b/wiki/Glossary.md @@ -0,0 +1,163 @@ +# Glossary + +## Terms & Abbreviations + +### General +| Term | Definition | +|------|------------| +| **GSP** | GPU System Processor - NVIDIA's on-GPU RISC-V microcontroller | +| **vGPU** | Virtual GPU - Partitioned GPU for multi-tenant workloads | +| **VF** | Virtual Function - Single vGPU instance with dedicated resources | +| **PF** | Physical Function - Host GPU managing VFs (SR-IOV) | +| **IOV** | I/O Virtualization - SR-IOV implementation | +| **RPC** | Remote Procedure Call - GSP-host communication protocol | +| **BAR** | Base Address Register - PCIe memory-mapped I/O window | +| **WPR** | Write/Read Protect Region - Memory isolation mechanism | +| **SR-IOV** | Single Root I/O Virtualization - PCIe virtualization standard | + +### Firmware Architecture +| Term | Definition | +|------|------------| +| **RV64IMAC** | RISC-V 64-bit ISA with Integer, Multiply, Atomic, Compressed extensions | +| **Dispatcher** | Central RPC routing function (primary/secondary) | +| **Jump Table** | Array of function pointers for sub-command dispatch | +| **Sub-Command** | Specific operation within an RPC type | +| **Descriptor** | Return structure with ID and echoed parameters | +| **Entry Point** | Firmware boot address (0x04009000) | +| **Frame Guard** | Stack canary at 0x041DC350 | + +### Memory Management +| Term | Definition | +|------|------------| +| **VRAM** | Video RAM - GPU local memory | +| **Sysmem** | System Memory - Host DRAM | +| **Page Table** | GPU virtual-to-physical mapping tables | +| **Pinning** | Locking pages for DMA access | +| **Bounce Buffer** | Intermediate buffer for data transfer | +| **Aperture** | Mappable BAR window size | +| **Backing Store** | Memory backing emulated BAR regions | + +### RPC Types +| RPC | Name | Purpose | +|-----|------|---------| +| 0x01 | **ALLOC** | Allocate GPU memory | +| 0x02 | **FREE** | Free GPU memory | +| 0x03 | **MAP** | Map memory to VF address space | +| 0x04 | **UNMAP** | Unmap memory from VF | +| 0x05 | **PIN** | Pin pages for DMA | +| 0x06 | **UNPIN** | Unpin pages | +| 0x07 | **SCHEDULE** | VF scheduling control | +| 0x08 | **YIELD** | Voluntary yield | +| 0x09 | **NOTIFY** | Event notification | +| 0x0A | **BAR_TRAP** | BAR access emulation | +| 0x0B | **MIGRATE** | Live VF migration | +| 0x0C | **DEBUG** | Debug interface | + +### Migration +| Term | Definition | +|------|------------| +| **Pre-copy** | Iterative page transfer while VF runs | +| **Post-copy** | Start VF on destination, fetch pages on demand | +| **Quiesce** | Pause VF for consistent state snapshot | +| **Dirty Page** | Page modified since last transfer | +| **Cutover** | Switch execution from source to destination | +| **Token** | Opaque migration context handle | + +### BAR Emulation +| Term | Definition | +|------|------------| +| **BAR1** | Primary 32-bit BAR for register access | +| **Bar1Rest** | BAR1 state restoration | +| **ForceBarAccess** | Hypervisor bypass of VF permissions | +| **Aperture** | Configurable BAR window size/offset | + +### WPR (Write/Read Protect Region) +| Term | Definition | +|------|------------| +| **Write Protect** | Trap on write access to region | +| **Read Protect** | Trap on read access to region | +| **NV_WPR** | NVIDIA-specific WPR extensions | +| **Completion** | Successful trap handling | +| **Timeout** | Trap handling exceeded time limit | + +### Hardware Registers +| Register | Purpose | +|----------|---------| +| **Doorbell** | Host→GSP notification (PCIe BAR0 + 0x1000) | +| **Message Ring** | Shared memory for RPC messages | +| **Cache Manager** | 0x429B428 - Flush/invalidate | +| **Allocator Arena** | 0x429B450 - Memory allocation | +| **Global Error Flag** | 0x04296048 - Global error state | +| **Stack Canary** | 0x041DC350 - Frame integrity | + +### Tools & Scripts +| Tool | Purpose | +|------|---------| +| **analyzeHeadless** | Ghidra headless analyzer | +| **DecompileFunctions.java** | Ghidra script for batch decompilation | +| **trace_all_subsystems.py** | Binary analysis script | +| **RPC_HANDLER_MAP.md** | Complete RPC address map | +| **FINAL_REPORT.md** | Full analysis report | + +### Debugging +| Term | Definition | +|------|------------| +| **ebreak** | RISC-V breakpoint instruction (fatal in FW) | +| **String Ref** | Cross-reference to string literal | +| **XRef** | Cross-reference (code/data) | +| **Pcode** | Ghidra's intermediate representation | +| **VBIOS** | Video BIOS - firmware for GPU initialization | + +### Calling Convention (RISC-V) +| Register | ABI Name | Purpose | +|----------|----------|---------| +| x0 | zero | Hardwired zero | +| x1 | ra | Return address | +| x2 | sp | Stack pointer | +| x3 | gp | Global pointer | +| x4 | tp | Thread pointer | +| x5-7 | t0-t2 | Temporaries | +| x8 | s0/fp | Frame pointer | +| x9 | s1 | Callee-saved (RA save) | +| x10-11 | a0-a1 | Arguments/returns | +| x12 | s4 | Callee-saved (RA save) | +| x13-17 | a2-a6 | Arguments | +| x18-27 | s2-s11 | Callee-saved | +| x28-31 | t3-t6 | Temporaries | + +### Firmware Sections (ELF) +| Section | Purpose | +|---------|---------| +| `.text` | Executable code | +| `.rodata` | Read-only data | +| `.data` | Initialized data | +| `.bss` | Zero-initialized data | +| `.section_task_rm_*` | Task-specific sections | + +### Migration Phases +| Phase | Description | +|-------|-------------| +| **QUERY** | Check migratability | +| **PREPARE** | Quiesce, snapshot | +| **TRANSFER** | Iterative page copy | +| **COMMIT** | Final sync, cutover | +| **CLEANUP** | Release resources | + +## File Naming Conventions + +### Decompiled Output +``` +FUN_ram_
_ram_
.c +``` +- `FUN_ram_057A1AC0_ram_057A1AC0.c` = Function at 0x057A1AC0 + +### Ghidra Projects +``` +gsp-/ +``` +- `gsp-subcmds`, `gsp-rpc-handlers`, `gsp-bar-fns`, etc. + +## References +- RISC-V ISA: https://riscv.org/technical/specifications/ +- SR-IOV Spec: https://pcisig.com/specifications/iov/ +- Ghidra: https://ghidra-sre.org/ \ No newline at end of file diff --git a/wiki/Migration-Protocol.md b/wiki/Migration-Protocol.md new file mode 100644 index 0000000..4fbc879 --- /dev/null +++ b/wiki/Migration-Protocol.md @@ -0,0 +1,395 @@ +# Migration Protocol (RPC 0x0B) + +## Overview +The MIGRATE RPC (type 0x0B) implements live migration for vGPU virtual functions. It uses **dual jump tables** for two-phase migration operations, accessed via the primary dispatcher at 0x057A1AC0. + +## Key Addresses + +### Migration Jump Tables + +#### Table 1: 0x04179ED8 (Primary MIGRATE branch at 0x057A1BDC) +| Index | Target | Decompiled | Description | +|-------|--------|------------|-------------| +| 0 | 0x057A2344 | ✅ | Phase 1: Prepare - returns ID 0x14, checks flag at +0x7F9 | +| 1 | 0x057A2320 | ✅ | Phase 1: Prepare variant | +| 2 | 0x057A230C | ✅ | Phase 1: Prepare variant | +| 3 | 0x057A22F8 | ✅ | Phase 1: Prepare - returns ID 0x10 | +| 4 | 0x057A2388 | ✅ | Phase 1: Prepare variant | +| 5 | 0x057A23D8 | ✅ | Phase 1: Prepare variant | +| 6 | 0x057A23AC | ✅ | Phase 1: Prepare variant | +| 7 | 0x057A2478 | ✅ | Phase 1: Prepare variant | +| 8 | 0x057A2428 | ✅ | Phase 1: Prepare variant | +| 9 | 0x057A2454 | ✅ | Phase 1: Prepare variant | +| 10 | 0x057A2404 | ✅ | Phase 1: Prepare variant | +| 11 | 0x057A2364 | ✅ | Phase 1: Prepare variant | +| 12 | 0x057A1F3C | (dup) | Duplicate entry | +| 13 | 0x057A299C | — | Phase 2: Transfer | +| 14 | 0x057A1F3C | (dup) | Duplicate entry | +| 15 | 0x057A1F3C | (dup) | Duplicate entry | + +#### Table 2: 0x04179FBC (Primary MIGRATE branch at 0x057A1D5C) +| Index | Target | Decompiled | Description | +|-------|--------|------------|-------------| +| 0 | 0x057A257C | ✅ | Phase 2: Transfer | +| 1 | 0x057A25E4 | ✅ | Phase 2: Transfer | +| 2 | 0x057A24EC | ✅ | Phase 2: Transfer | +| 3 | 0x057A2608 | ✅ | Phase 2: Transfer | +| 4 | 0x057A2534 | ✅ | Phase 2: Transfer | +| 5 | 0x057A25C0 | ✅ | Phase 2: Transfer | +| 6 | 0x057A24A4 | ✅ | Phase 2: Transfer | +| 7 | 0x057A259C | ✅ | Phase 2: Transfer | +| 8 | 0x057A2510 | ✅ | Phase 2: Transfer | +| 9 | 0x057A2558 | ✅ | Phase 2: Transfer | +| 10 | 0x057A24C8 | ✅ | Phase 2: Transfer | +| 11 | 0x057A262C | ✅ | Phase 2: Transfer | +| 12 | 0x057A345C | ✅ | Phase 3: Commit | +| 13 | 0x057A36D8 | ✅ | Phase 3: Commit | +| 14 | 0x057A35D8 | ✅ | Phase 3: Commit | +| 15 | 0x057A3658 | ✅ | Phase 3: Commit | + +## Migration Phases + +### Phase 0: Discovery (Pre-migration) +```c +// Query VF migratability +int gsp_migrate_query(struct gsp_vf *vf, struct migrate_query *out) { + migrate_payload_t payload = { + .phase = MIGRATE_PHASE_QUERY, + .subcmd = 0, + .src_vf = vf->id, + .dst_vf = 0, + }; + return gsp_rpc_send(vf->gsp, RPC_MIGRATE, &payload, sizeof(payload), out, sizeof(*out)); +} +``` + +### Phase 1: Prepare (Table 1, indices 0-11) +**Goal**: Quiesce VF, prepare memory state for transfer + +```c +// Subcmd 3 (0x057A22F8) - Returns ID 0x10 +int migrate_prepare_quiesce(vf_id) { + // 1. Pause VF scheduling + // 2. Flush pending commands + // 3. Pin all VF memory + // 4. Return quiesce token +} + +// Subcmd 0 (0x057A2344) - Returns ID 0x14, checks flag at in_t1+0x7F9 +int migrate_prepare_snapshot(vf_id, *token) { + // 1. Snapshot VF register state + // 2. Snapshot BAR configurations + // 3. Snapshot WPR regions + // 4. Snapshot page tables + // 5. Return snapshot handle +} +``` + +### Phase 2: Transfer (Table 1 index 13, Table 2 indices 0-11) +**Goal**: Transfer memory pages to destination + +```c +// Table 2, subcmd 0 (0x057A257C) +int migrate_transfer_pages(vf_id, page_list, *progress) { + // 1. Iterate page list + // 2. For each page: + // a. Copy via DMA (0x0588F9C4) + // b. Verify checksum + // c. Mark page dirty if modified + // 3. Return bytes transferred +} + +// Table 2, subcmd 11 (0x057A262C) - Dirty page tracking +int migrate_track_dirty(vf_id, *dirty_bitmap) { + // Return bitmap of pages dirtied since last transfer +} +``` + +### Phase 3: Commit (Table 2 indices 12-15) +**Goal**: Final synchronization, cutover to destination + +```c +// Subcmd 12 (0x057A345C) +int migrate_commit_finalize(vf_id, dst_vf_id) { + // 1. Final dirty page transfer + // 2. Transfer register state + // 3. Activate destination VF + // 4. Release source VF resources + // 5. Notify completion +} + +// Subcmd 13 (0x057A36D8) +int migrate_commit_verify(vf_id, *verify_result) { + // 1. Verify memory integrity + // 2. Verify register state + // 3. Verify device state + // 4. Return PASS/FAIL +} +``` + +### Phase 4: Cleanup (Post-migration) +```c +int migrate_cleanup(src_vf_id) { + // 1. Release pinned memory + // 2. Free snapshot buffers + // 3. Remove WPR regions + // 4. Destroy migration context +} +``` + +## Migration Message Format + +```c +typedef struct { + uint32_t phase; // MIGRATE_PHASE_* + uint32_t subcmd; // Sub-command index (0-15 per table) + uint64_t src_vf; // Source VF ID + uint64_t dst_vf; // Destination VF ID + uint64_t data_ptr; // Data buffer (page list, bitmap, etc.) + uint64_t data_size; // Buffer size + uint32_t flags; // MIGRATE_LIVE, MIGRATE_POSTCOPY, etc. + uint32_t reserved; + uint64_t token; // Opaque migration token +} __attribute__((packed)) migrate_payload_t; + +#define MIGRATE_PHASE_QUERY 0 +#define MIGRATE_PHASE_PREPARE 1 +#define MIGRATE_PHASE_TRANSFER 2 +#define MIGRATE_PHASE_COMMIT 3 +#define MIGRATE_PHASE_CLEANUP 4 + +#define MIGRATE_FLAG_LIVE (1<<0) // Live migration +#define MIGRATE_FLAG_POSTCOPY (1<<1) // Post-copy mode +#define MIGRATE_FLAG_AUTO_COMMIT (1<<2) // Auto-commit after transfer +#define MIGRATE_FLAG_VERIFY (1<<3) // Verify integrity +``` + +## Sub-Command Descriptors (Returned by Handlers) + +All migration handlers follow the primary dispatcher pattern: + +```c +typedef struct { + uint32_t subcmd_id; // Constant: 0x10, 0x14, etc. + uint8_t echo_flags_b; // Copy of input flags_b + uint8_t echo_flags_a; // Copy of input flags_a + uint8_t echo_flags_c; // Copy of input flags_c +} migrate_descriptor_t; +``` + +**Known Subcmd IDs**: +| Subcmd | ID | Phase | +|--------|-----|-------| +| 0x057A22F8 (Table1[3]) | 0x10 | Prepare | +| 0x057A2344 (Table1[0]) | 0x14 | Prepare | +| Others | TBD | Transfer/Commit | + +## vGPU-IO Integration + +### Migration State Machine +```c +typedef enum { + MIG_STATE_IDLE = 0, + MIG_STATE_QUERY, + MIG_STATE_PREPARE, + MIG_STATE_TRANSFER, + MIG_STATE_COMMIT, + MIG_STATE_CLEANUP, + MIG_STATE_FAILED, + MIG_STATE_COMPLETED +} mig_state_t; + +struct gsp_migration { + struct gsp_vf *vf; + mig_state_t state; + uint64_t token; + uint64_t dst_vf; + struct migrate_progress progress; + struct completion comp; + struct mutex lock; +}; +``` + +### Migration Coordinator +```c +int gsp_migration_start(struct gsp_vf *vf, uint64_t dst_vf) { + struct gsp_migration *mig = kzalloc(sizeof(*mig), GFP_KERNEL); + vf->migration = mig; + mig->vf = vf; + mig->dst_vf = dst_vf; + mig->state = MIG_STATE_QUERY; + + // Phase 0: Query + struct migrate_query qry; + gsp_migrate_query(vf, &qry); + if (!qry.migratable) return -EINVAL; + + // Phase 1: Prepare + mig->state = MIG_STATE_PREPARE; + migrate_payload_t prep = { + .phase = MIGRATE_PHASE_PREPARE, + .subcmd = 3, // Quiesce + .src_vf = vf->id, + .dst_vf = dst_vf, + }; + migrate_descriptor_t desc; + gsp_rpc_send(vf->gsp, RPC_MIGRATE, &prep, sizeof(prep), &desc, sizeof(desc)); + mig->token = desc.subcmd_id; // Use returned token + + // Phase 2: Transfer (iterative) + mig->state = MIG_STATE_TRANSFER; + while (!gsp_migration_transfer_iter(mig)) { + msleep(10); // Throttle + if (signal_pending(current)) break; + } + + // Phase 3: Commit + mig->state = MIG_STATE_COMMIT; + migrate_payload_t commit = { + .phase = MIGRATE_PHASE_COMMIT, + .subcmd = 12, + .src_vf = vf->id, + .dst_vf = dst_vf, + .token = mig->token, + .flags = MIGRATE_FLAG_VERIFY, + }; + gsp_rpc_send(vf->gsp, RPC_MIGRATE, &commit, sizeof(commit), NULL, 0); + + // Phase 4: Cleanup + mig->state = MIG_STATE_CLEANUP; + gsp_migration_cleanup(mig); + + mig->state = MIG_STATE_COMPLETED; + return 0; +} +``` + +### Transfer Iteration +```c +bool gsp_migration_transfer_iter(struct gsp_migration *mig) { + migrate_payload_t xfer = { + .phase = MIGRATE_PHASE_TRANSFER, + .subcmd = 0, + .src_vf = mig->vf->id, + .dst_vf = mig->dst_vf, + .data_ptr = (uint64_t)mig->progress.page_list, + .data_size = mig->progress.page_count * sizeof(uint64_t), + .token = mig->token, + }; + + struct migrate_progress prog; + int ret = gsp_rpc_send(mig->vf->gsp, RPC_MIGRATE, + &xfer, sizeof(xfer), &prog, sizeof(prog)); + + if (ret) return true; // Error = done + + mig->progress.bytes_transferred += prog.bytes_transferred; + mig->progress.pages_transferred += prog.pages_transferred; + mig->progress.dirty_pages = prog.dirty_pages; + + // Check if more dirty pages to transfer + if (prog.dirty_pages > 0 && !(mig->flags & MIGRATE_FLAG_POSTCOPY)) { + return false; // Continue iterating + } + + return true; // Transfer complete +} +``` + +### Post-Copy Mode +```c +int gsp_migration_postcopy(struct gsp_migration *mig) { + // Enable post-copy on destination + migrate_payload_t pc = { + .phase = MIGRATE_PHASE_TRANSFER, + .subcmd = 11, // Dirty tracking + .src_vf = mig->vf->id, + .dst_vf = mig->dst_vf, + .flags = MIGRATE_FLAG_POSTCOPY, + .token = mig->token, + }; + + // Page fault handler on destination + gsp_page_fault_handler = gsp_migration_page_fault; + + return gsp_rpc_send(mig->vf->gsp, RPC_MIGRATE, &pc, sizeof(pc), NULL, 0); +} +``` + +## Integration with BAR/WPR + +### BAR State Migration +```c +int gsp_migration_bar_save(struct gsp_migration *mig) { + // Save BAR1 aperture, force access state + struct bar_save_msg bar_save = { + .vf_id = mig->vf->id, + .bar = 1, + }; + return gsp_rpc_send(mig->vf->gsp, RPC_BAR_TRAP, + BAR_SUBCMD_SAVE, &bar_save, sizeof(bar_save), + mig->bar_state_buf, &mig->bar_state_size); +} + +int gsp_migration_bar_restore(struct gsp_migration *mig) { + // Restore BAR1 on destination + struct bar_restore_msg bar_restore = { + .vf_id = mig->dst_vf, + .bar = 1, + .data = mig->bar_state_buf, + .data_size = mig->bar_state_size, + }; + return gsp_rpc_send(mig->vf->gsp, RPC_BAR_TRAP, + BAR_SUBCMD_RESTORE, &bar_restore, sizeof(bar_restore)); +} +``` + +### WPR Region Migration +```c +int gsp_migration_wpr_save(struct gsp_migration *mig) { + // Save WPR regions for VF + migrate_payload_t wpr = { + .phase = MIGRATE_PHASE_PREPARE, + .subcmd = 4, // WPR snapshot + .src_vf = mig->vf->id, + .dst_vf = mig->dst_vf, + .token = mig->token, + }; + return gsp_rpc_send(mig->vf->gsp, RPC_MIGRATE, &wpr, sizeof(wpr), NULL, 0); +} +``` + +## Error Handling + +| Phase | Error | Recovery | +|-------|-------|----------| +| Prepare | EBUSY | Wait, retry | +| Prepare | ENOMEM | Reduce snapshot size | +| Transfer | ETIMEDOUT | Checkpoint, retry | +| Transfer | EIO | Failover to post-copy | +| Commit | EINVAL | Rollback to source | +| Commit | ENOSPC | Expand destination | + +## Debugging + +### Migration Trace Points +```c +trace_gsp_mig_phase(vf_id, phase, subcmd, token); +trace_gsp_mig_transfer(vf_id, pages, bytes, dirty); +trace_gsp_mig_commit(vf_id, status, verify); +trace_gsp_mig_error(vf_id, phase, error); +``` + +### GSP Log Strings +Search for migration-related strings in firmware: +- Migration phase markers +- Page transfer progress +- Commit verification results + +--- + +## Reference +- Primary Dispatcher MIGRATE branches: 0x057A1BDC, 0x057A1D54 +- Jump Table 1: 0x04179ED8 (16 entries) +- Jump Table 2: 0x04179FBC (16 entries) +- Decompiled handlers: 28 functions in decompiled/ \ No newline at end of file diff --git a/wiki/README.md b/wiki/README.md new file mode 100644 index 0000000..a7fee86 --- /dev/null +++ b/wiki/README.md @@ -0,0 +1,21 @@ +# vGPU-IO Wiki + +## Documentation Index + +### Core Analysis +- [GSP 570.144W Firmware Analysis](GSP-570.144W-Firmware-Analysis.md) - Complete firmware analysis +- [RPC Message Format](RPC-Message-Format.md) - Wire protocol specification +- [BAR Emulation Specification](BAR-Emulation-Specification.md) - BAR1/Bar1Rest/ForceBarAccess +- [WPR Management](WPR-Management.md) - Write/Read Protect Region handling +- [Migration Protocol](Migration-Protocol.md) - Live migration RPC 0x0B +- [GSP RPC Emulation](GSP-RPC-Emulation.md) - Emulation mode for consumer/OpenRM GSP + +### Integration Guides +- [vGPU-IO Integration Guide](vGPU-IO-Integration-Guide.md) - Kernel driver implementation +- [Kernel RPC Client](Kernel-RPC-Client.md) - Calling convention & message building +- [Testing & Validation](Testing-and-Validation.md) - Verification procedures + +### Reference +- [Address Reference](Address-Reference.md) - All key addresses in one table +- [Error Codes](Error-Codes.md) - GSP error code reference +- [Glossary](Glossary.md) - Terms and abbreviations \ No newline at end of file diff --git a/wiki/RPC-Message-Format.md b/wiki/RPC-Message-Format.md new file mode 100644 index 0000000..e627871 --- /dev/null +++ b/wiki/RPC-Message-Format.md @@ -0,0 +1,316 @@ +# GSP RPC Message Format Specification + +## Overview +The GSP firmware uses a dispatcher-based RPC system with two dispatchers: +- **Primary** (0x057A1AC0): ALLOC, FREE, MAP, UNMAP, PIN, UNPIN, SCHEDULE, YIELD, NOTIFY, BAR_TRAP, MIGRATE, DEBUG +- **Secondary** (0x04ED39DC): Branch-based dispatch for all 11 types + +## Primary Dispatcher Call Convention + +### Entry Point +``` +FUN_ram_057a1ac0( + uint32_t rpc_type, // param_1: RPC type (0x01-0x0C) + uint8_t flags_a, // param_2 + uint8_t flags_b, // param_3 + uint8_t flags_c, // param_4 + uint32_t *out_subcmd_id,// param_5: Returns sub-command ID + uint8_t *out_a, // param_6: Echoes flags_b + uint8_t *out_b, // param_7: Echoes flags_a + uint8_t *out_c // param_8: Echoes flags_c +) -> int64_t +``` + +### RPC Type to Sub-Command Mapping +The primary dispatcher validates RPC type, then indexes into the 32-entry jump table at **0x057A3AD8**. + +| RPC Type | Name | Subcmd Range | Notes | +|----------|------|--------------|-------| +| 0x01 | ALLOC | 0-31 | Uses 0x057E94EC main | +| 0x02 | FREE | 0-31 | | +| 0x03 | MAP | — | Uses secondary dispatcher | +| 0x04 | UNMAP | 0-31 | Primary + secondary | +| 0x05 | PIN | — | Uses secondary dispatcher | +| 0x06 | UNPIN | — | Uses secondary dispatcher | +| 0x07 | SCHEDULE | 0-31 | Uses 0x051EFBF4 main | +| 0x08 | YIELD | — | Uses secondary dispatcher | +| 0x09 | NOTIFY | — | Uses secondary dispatcher | +| 0x0A | BAR_TRAP | — | Uses 0x04CB8188 | +| 0x0B | MIGRATE | 0-15 x2 | Dual jump tables | +| 0x0C | DEBUG | — | Unimplemented | + +### Sub-Command Descriptor (Returned by Jump Table Handlers) +Each sub-command handler at the jump table returns: +```c +typedef struct { + uint32_t subcmd_id; // Constant ID (e.g., 0x10, 0x14, 0x40) + uint8_t echo_flags_b; // Copy of input flags_b + uint8_t echo_flags_a; // Copy of input flags_a + uint8_t echo_flags_c; // Copy of input flags_c +} __attribute__((packed)) subcmd_descriptor_t; +``` + +**Example: Subcmd 3 (0x057A1BCC)** +```c +// Returns ID = 0x10 +*out_subcmd_id = 0x10; +*out_a = flags_b; +*out_b = flags_a; +*out_c = flags_c; +return 0; +``` + +**Example: Subcmd 0 (0x057A1DB4)** +```c +// Returns ID = 0x40 +*out_subcmd_id = 0x40; +*out_a = flags_b; +*out_b = flags_a; +*out_c = flags_c; +return 0; +``` + +## Secondary Dispatcher Call Convention + +### Entry Point +``` +FUN_ram_04ed39dc(rpc_message_t *msg) -> int64_t +``` + +### Message Structure (Inferred) +```c +typedef struct { + uint32_t rpc_type; // 0x01-0x0B + uint32_t sub_type; // Sub-operation code + uint64_t payload_ptr; // Pointer to RPC-specific payload + uint32_t payload_size; // Size of payload + uint32_t flags; // Control flags + uint64_t context; // Opaque context + uint32_t sequence; // Sequence number + uint32_t reserved; +} __attribute__((packed)) rpc_message_t; +``` + +### Branch-Based Dispatch +Secondary dispatcher uses `bgeu`/`bltu` branches on `rpc_type` register: +```assembly +# Pseudocode +if (rpc_type >= 0x0C) goto error; +switch(rpc_type): + case 0x03: call MAP_handler_A; + case 0x04: call UNMAP_handler_A; + case 0x05: call PIN_handler_A (0x04ED34B8); + case 0x06: call UNPIN_handler_A; + case 0x07: call SCHEDULE_handler_A; + case 0x08: call YIELD_handler_A; + case 0x09: call NOTIFY_handler_A; + case 0x0A: call BAR_TRAP_handler (0x057675B7); +``` + +## RPC-Specific Payloads + +### ALLOC (0x01) - Via 0x057E94EC +```c +typedef struct { + uint64_t size; // Allocation size in bytes + uint32_t type; // Memory type (VRAM, sysmem, etc.) + uint32_t alignment; // Alignment requirement + uint64_t va_hint; // Virtual address hint + uint32_t flags; // CACHE_COHERENT, UNCACHED, etc. + uint32_t pid; // Process ID + uint32_t vf_id; // VF ID (for vGPU) + uint32_t reserved; + uint64_t *out_handle; // Output: allocation handle + uint64_t *out_va; // Output: mapped virtual address + uint64_t *out_pa; // Output: physical address +} alloc_payload_t; +``` + +### MAP (0x03) - Handlers 0x05766AB7 / 0x05778A37 +```c +typedef struct { + uint64_t handle; // Allocation handle from ALLOC + uint64_t va; // Target virtual address + uint64_t size; // Map size + uint32_t prot; // PROT_READ|PROT_WRITE|PROT_EXEC + uint32_t flags; // MAP_FIXED, MAP_SHARED, etc. + uint32_t vf_id; // Target VF + uint32_t reserved; +} map_payload_t; +``` + +### PIN (0x05) - Handler 0x04ED34B8 +```c +typedef struct { + uint64_t handle; // Allocation handle + uint64_t offset; // Offset within allocation + uint64_t size; // Size to pin + uint32_t vf_id; // Target VF + uint32_t flags; // PIN_WRITE, PIN_READ, PIN_LONGTERM + uint64_t *out_dma_addr; // Output: DMA address for device +} pin_payload_t; +``` + +### SCHEDULE (0x07) - Via 0x051EFBF4 / 0x05767F37 +```c +typedef struct { + uint32_t vf_id; // VF to schedule + uint32_t priority; // Scheduling priority + uint64_t time_slice_ns; // Time slice in nanoseconds + uint32_t flags; // PREEMPTIBLE, REALTIME, etc. + uint32_t reserved; +} schedule_payload_t; +``` + +### BAR_TRAP (0x0A) - Handler 0x04CB8188 +```c +typedef struct { + uint32_t bar_index; // BAR number (0-5) + uint32_t trap_type; // READ, WRITE, ATOMIC + uint64_t offset; // Offset within BAR + uint64_t value; // Value for writes + uint32_t size; // Access size (1,2,4,8) + uint32_t vf_id; // Trapping VF + uint64_t *out_value; // Output: read value +} bar_trap_payload_t; +``` + +### MIGRATE (0x0B) - Dual Jump Tables +```c +typedef struct { + uint32_t phase; // 0=prepare, 1=transfer, 2=commit, 3=cleanup + uint32_t subcmd; // Sub-command index (0-15 for each table) + uint64_t src_vf; // Source VF + uint64_t dst_vf; // Destination VF + uint64_t data_ptr; // Migration data buffer + uint64_t data_size; // Buffer size + uint32_t flags; // LIVE, POSTCOPY, etc. + uint32_t reserved; +} migrate_payload_t; +``` + +## Wire Format (Host → GSP) + +### Message Header (64 bytes) +```c +typedef struct { + uint32_t magic; // 0x47535052 ("GSPR") + uint32_t version; // Protocol version (1) + uint32_t rpc_type; // 0x01-0x0C + uint32_t sequence; // Monotonic sequence + uint64_t timestamp_ns; // Submission timestamp + uint32_t payload_size; // Size of payload + uint32_t flags; // MSG_SYNC, MSG_ASYNC, MSG_NOREPLY + uint64_t correlation_id;// For async matching + uint64_t reserved[3]; // Padding to 64 bytes +} __attribute__((packed)) rpc_header_t; +``` + +### Complete Message +``` ++------------------+ +| rpc_header_t | 64 bytes ++------------------+ +| payload (varies) | payload_size bytes ++------------------+ +| padding to 256B | (alignment) ++------------------+ +``` + +## Response Format + +### Synchronous Response +```c +typedef struct { + int64_t status; // 0 = success, negative = error + uint32_t rpc_type; // Echo of request + uint32_t sequence; // Echo of request + uint64_t timestamp_ns; // Completion timestamp + uint32_t payload_size; // Response payload size + uint32_t reserved; +} __attribute__((packed)) rpc_response_header_t; +``` + +### Error Codes +| Code | Name | Description | +|------|------|-------------| +| 0 | OK | Success | +| -1 (0xFFFF) | EPERM | Permission denied | +| -2 (0xFFFE) | ENOENT | Not found | +| -3 (0xFFFD) | EINVAL | Invalid argument | +| -6 (0xFFFA) | ENODEV | No such device | +| -12 (0xFFF4) | ENOMEM | Out of memory | +| -16 (0xFFEE) | EBUSY | Resource busy | +| -22 (0xFFEA) | EINVAL | Invalid argument | +| -28 (0xFFE4) | ENOSPC | No space left | +| -37 (0xFFDB) | ENOLCK | No locks available | +| -56 (0xFFC8) | EBADMSG | Bad message | +| -84 (0xFFAC) | EOVERFLOW | Value too large | +| -90 (0xFFA6) | ENOSTR | Not a stream | +| -91 (0xFFA5) | ENODATA | No data available | +| -94 (0xFFA2) | ENOSR | Out of streams resources | +| -97 (0xFF9F) | EPROTO | Protocol error | +| -111 (0xFF91) | ETIMEDOUT | Connection timed out | + +## Kernel Client Implementation + +### Message Builder +```c +static int gsp_rpc_send(gsp_client_t *client, uint32_t rpc_type, + void *payload, size_t payload_size, + void *response, size_t *response_size) { + rpc_header_t hdr = { + .magic = 0x47535052, + .version = 1, + .rpc_type = rpc_type, + .sequence = atomic_inc(&client->seq), + .timestamp_ns = ktime_get_ns(), + .payload_size = payload_size, + .flags = MSG_SYNC, + }; + + // Build complete message + uint8_t msg[256]; + memcpy(msg, &hdr, sizeof(hdr)); + memcpy(msg + 64, payload, payload_size); + + // Submit to GSP doorbell + return gsp_doorbell_ring(client->gsp, msg, sizeof(msg)); +} +``` + +### Doorbell Mechanism +```c +// GSP doorbell register (PCIe BAR0 + offset) +#define GSP_DOORBELL_OFFSET 0x1000 + +static void gsp_doorbell_ring(gsp_device_t *gsp, void *msg, size_t len) { + // Copy message to shared memory ring + // Ring GSP doorbell + writel(1, gsp->bar0 + GSP_DOORBELL_OFFSET); +} +``` + +## Async Completion + +### Notification Mechanism +```c +typedef struct { + uint32_t rpc_type; + uint32_t sequence; + int64_t status; + uint64_t timestamp_ns; + uint32_t payload_size; + uint32_t reserved; +} async_completion_t; + +// Delivered via MSI-X or GSP notification queue +``` + +--- + +## Reference +- Primary Dispatcher: 0x057A1AC0 +- Secondary Dispatcher: 0x04ED39DC +- Jump Table: 0x057A3AD8 (32 entries) +- RPC Type Jump Table: 0x059BFEB0 (12 types) \ No newline at end of file diff --git a/wiki/Virtual_IO_Internals.md b/wiki/Virtual_IO_Internals.md new file mode 100644 index 0000000..d97344e --- /dev/null +++ b/wiki/Virtual_IO_Internals.md @@ -0,0 +1,1736 @@ +::: {#mw-page-base .noprint} +::: + +::: {#mw-head-base .noprint} +::: + +::: {#content .mw-body role="main"} +[]{#top} + +::: {#siteNotice} +::: + +::: mw-indicators +::: + +# Virtual I/O Internals {#firstHeading .firstHeading} + +::: {#bodyContent .vector-body} +::: {#siteSub .noprint} +From Open-IOV +::: + +::: {#contentSub} +::: {.mw-revision .warningbox} +::: {#mw-revision-info} +Revision as of 17:54, 19 June 2023 by +[Arthur](./index.php%3Ftitle=User:Arthur&action=edit&redlink=1.html "User:Arthur (page does not exist)"){.new +.mw-userlink} +[([talk](./index.php%3Ftitle=User_talk:Arthur&action=edit&redlink=1.html "User talk:Arthur (page does not exist)"){.new +.mw-usertoollinks-talk} \| +[contribs](index.php/Special:Contributions/Arthur.html "Special:Contributions/Arthur"){.mw-usertoollinks-contribs})]{.mw-usertoollinks} +[([[[→‎References (Talks & Reading +Material)](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#References_(Talks_&_Reading_Material))]{.autocomment}]{dir="auto"})]{.comment} +::: + +::: {#mw-revision-nav} +([diff](https://open-iov.org/index.php?title=Virtual_I/O_Internals&diff=prev&oldid=23792 "Virtual I/O Internals")) +[← Older +revision](https://open-iov.org/index.php?title=Virtual_I/O_Internals&direction=prev&oldid=23792 "Virtual I/O Internals") +\| Latest revision (diff) \| Newer revision → (diff) +::: +::: +::: + +::: {#contentSub2} +::: + +::: {#jump-to-nav} +::: + +[Jump to +navigation](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#mw-head){.mw-jump-link} +[Jump to +search](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#searchInput){.mw-jump-link} + +::: {#mw-content-text .mw-body-content .mw-content-ltr lang="en" dir="ltr"} +::: mw-parser-output +The following document details the internals of a **VFIO (Virtual +Function I/O)** driven **Shared** **I/O Device.** + +> An absence of critical technical documentation has historically slowed +> growth and adoption of developer ecosystems for GPU virtualization. +> +> This +> [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/){.external +> .text rel="nofollow"} licensed content can either be used with +> attribution, or used as inspiration for new documentation, created by +> GPU vendors for public commercial distribution as developer +> documentation. +> +> Where possible, this documentation will clearly label dates and +> versions of observed-but-not-guaranteed behaviour vs. +> vendor-documented stable interfaces/behaviour with guarantees of +> forward or backward compatibility. + +This article places emphasis on the **Virtual GPU (vGPU)** use case +however these concepts apply generically to virtualization of I/O +devices (TPUs, NICs, storage peripherals, ect..). + + -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- --------------------------------------------- + Mdev Mode SR-IOV Mode SIOV Mode + No hardware assistance needed. Hardware assistance needed. Hardware assistance needed. + Host requires insight about guest workload. Host ignorance of guest workload. Host requires insight about guest workload. + Error reporting. No guest driver error reporting. Error reporting. + In depth dynamic monitoring. Basic dynamic monitoring. In depth dynamic monitoring. + Software defined MMU guest separation. Firmware defined MMU guest separation. Firmware defined MMU guest separation. + Requires deferred instructions to be supported by host software (support libraries). Guest is ignorant of host supported software such as support libraries. + Routing interrupts. Routing interrupts. Routing interrupts. + Device reset. Device reset. Device reset. + Enable/Disable device. Enable/Disable device. Enable/Disable device. + Support for multiple scheduling techniques. Support for multiple scheduling techniques. Support for multiple scheduling techniques. + Single PCI requester ID. Multiple PCI requester IDs. Multiple PCI requester IDs. + -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- --------------------------------------------- + + : Comparison of Assistance Modes + +::: {#toc .toc role="navigation" aria-labelledby="mw-toc-heading"} +::: {.toctitle lang="en" dir="ltr"} +## Contents {#mw-toc-heading} + +[]{.toctogglespan} +::: + +- [[1]{.tocnumber} [All + Modes]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#All_Modes) + - [[1.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Knowledge_Resources_Used) + - [[1.2]{.tocnumber} [Binding VFIO + devices]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Binding_VFIO_devices) + - [[1.3]{.tocnumber} [Programming the + IOMMU]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Programming_the_IOMMU) + - [[1.4]{.tocnumber} [VFIO Memory Mapped + IO]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#VFIO_Memory_Mapped_IO) + - [[1.5]{.tocnumber} [Getting the VFIO Group File + Descriptor]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Getting_the_VFIO_Group_File_Descriptor) + - [[1.6]{.tocnumber} [VFIO device file + descriptor]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#VFIO_device_file_descriptor) + - [[1.7]{.tocnumber} [VFIO + Interrupts]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#VFIO_Interrupts) + - [[1.7.1]{.tocnumber} + [IRQs]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#IRQs) + - [[1.7.1.1]{.tocnumber} [Get Device + Info]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Get_Device_Info) + - [[1.7.1.2]{.tocnumber} [Get Region + Info]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Get_Region_Info) + - [[1.7.1.3]{.tocnumber} [Get IRQ + Info]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Get_IRQ_Info) + - [[1.7.1.4]{.tocnumber} [Set + IRQs]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Set_IRQs) + - [[1.8]{.tocnumber} [Device + Decomposure/Recomposure]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Device_Decomposure/Recomposure) + - [[1.9]{.tocnumber} [Memory Management Unit + (MMU)]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Memory_Management_Unit_(MMU)) + - [[1.9.1]{.tocnumber} [MMIO Isolation (Platform + MMU)]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#MMIO_Isolation_(Platform_MMU)) + - [[1.9.2]{.tocnumber} [VRAM Isolation (GPU + GMMU)]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#VRAM_Isolation_(GPU_GMMU)) + - [[1.9.3]{.tocnumber} [Platform MMIO \<-\> GPU Shadow + Pages]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Platform_MMIO_%3C-%3E_GPU_Shadow_Pages) + - [[1.10]{.tocnumber} [VFIO Quirks (region + traps)]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#VFIO_Quirks_(region_traps)) + - [[1.11]{.tocnumber} [Known IOMMU + Issues]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Known_IOMMU_Issues) +- [[2]{.tocnumber} [Mdev + Mode]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Mdev_Mode) + - [[2.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Knowledge_Resources_Used_2) + - [[2.2]{.tocnumber} [Mediated + Core]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Mediated_Core) + - [[2.3]{.tocnumber} [Device + Initialization]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Device_Initialization) + - [[2.3.1]{.tocnumber} [Registering VFIO MDEV as a + driver]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Registering_VFIO_MDEV_as_a_driver) + - [[2.3.2]{.tocnumber} [Registering PCIE Device with the + Mediated + Core]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Registering_PCIE_Device_with_the_Mediated_Core) + - [[2.3.3]{.tocnumber} [Registering Mediated Callbacks + (CBs)]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Registering_Mediated_Callbacks_(CBs)) + - [[2.3.4]{.tocnumber} [Creating a Mediated Device via + mdev-sysfsdev + API]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Creating_a_Mediated_Device_via_mdev-sysfsdev_API) + - [[2.3.5]{.tocnumber} [QEMU adds VFIO device to IOMMU + container-group]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#QEMU_adds_VFIO_device_to_IOMMU_container-group) + - [[2.3.6]{.tocnumber} [QEMU passes mdev device file + descriptor to + VM]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#QEMU_passes_mdev_device_file_descriptor_to_VM) + - [[2.4]{.tocnumber} [Instruction + Execution]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Instruction_Execution) + - [[2.4.1]{.tocnumber} [IRQ + remapping]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#IRQ_remapping) + - [[2.4.2]{.tocnumber} [Interrupt + Injection]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Interrupt_Injection) + - [[2.5]{.tocnumber} [Memory + Management]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Memory_Management) + - [[2.5.1]{.tocnumber} [Region + Passthrough]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Region_Passthrough) + - [[2.5.1.1]{.tocnumber} [Emulated + Regions]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Emulated_Regions) + - [[2.5.1.2]{.tocnumber} [Passthrough + Regions]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Passthrough_Regions) + - [[2.5.1.3]{.tocnumber} [Region + Access]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Region_Access) + - [[2.5.2]{.tocnumber} [EPT Page + Violations]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#EPT_Page_Violations) + - [[2.5.3]{.tocnumber} [Mediated DMA + Translations]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Mediated_DMA_Translations) + - [[2.6]{.tocnumber} + [Scheduling]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Scheduling) + - [[2.7]{.tocnumber} [Kernel + API]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Kernel_API) + - [[2.8]{.tocnumber} [Sample + Code]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Sample_Code) + - [[2.8.1]{.tocnumber} + [Compilation]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Compilation) + - [[2.8.2]{.tocnumber} [Loading Kernel + Modules]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Loading_Kernel_Modules) + - [[2.8.3]{.tocnumber} [Unloading Kernel + Modules]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Unloading_Kernel_Modules) + - [[2.8.4]{.tocnumber} [Additional + Documentation]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Additional_Documentation) + - [[2.9]{.tocnumber} [Mdev Mode + Requirements]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Mdev_Mode_Requirements) +- [[3]{.tocnumber} [SR-IOV + Mode]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#SR-IOV_Mode) + - [[3.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Knowledge_Resources_Used_3) + - [[3.2]{.tocnumber} [Instruction + Execution]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Instruction_Execution_2) + - [[3.3]{.tocnumber} [Memory + Management]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Memory_Management_2) + - [[3.4]{.tocnumber} + [Scheduling]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Scheduling_2) + - [[3.5]{.tocnumber} [SR-IOV Mode + Requirements]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#SR-IOV_Mode_Requirements) +- [[4]{.tocnumber} [SIOV + Mode]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#SIOV_Mode) + - [[4.1]{.tocnumber} [Knowledge Resources + Used]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Knowledge_Resources_Used_4) + - [[4.2]{.tocnumber} [Memory + Management]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Memory_Management_3) + - [[4.2.1]{.tocnumber} [IOMMU Aware Mediated + Device]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#IOMMU_Aware_Mediated_Device) + - [[4.2.2]{.tocnumber} [Shared Hardware + Workqueues]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#Shared_Hardware_Workqueues) + - [[4.3]{.tocnumber} [SIOV Mode + Requirements]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#SIOV_Mode_Requirements) +- [[5]{.tocnumber} [References (Talks & Reading + Material)]{.toctext}](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html#References_(Talks_&_Reading_Material)) +::: + +## [All Modes]{#All_Modes .mw-headline} + +This section will cover concepts which apply both to [Mdev +Mode](index.php/Mediated_Device_Internals.html#Mdev_Mode){.external +.text rel="nofollow"}, [SR-IOV +Mode](index.php/Mediated_Device_Internals.html#SR-IOV_Mode){.external +.text rel="nofollow"} & [SIOV +Mode](index.php/Mediated_Device_Internals.html#SIOV_Mode){.external +.text rel="nofollow"}. + +### [Knowledge Resources Used]{#Knowledge_Resources_Used .mw-headline} + +This section is supported by significant contributions in open source by +Alex Williamson. + +See references 2, 14, & 22 in the [References (Talks & Reading +Material)](index.php/Virtual_IO_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} section. + +### [Binding VFIO devices]{#Binding_VFIO_devices .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![](images/thumb/9/9e/Vfio-pci_driver_bindings.png/300px-Vfio-pci_driver_bindings.png){.thumbimage +decoding="async" width="300" height="218" +srcset="images/thumb/9/9e/Vfio-pci_driver_bindings.png/450px-Vfio-pci_driver_bindings.png 1.5x, images/thumb/9/9e/Vfio-pci_driver_bindings.png/600px-Vfio-pci_driver_bindings.png 2x"}](index.php/File:Vfio-pci_driver_bindings.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Vfio-pci_driver_bindings.png.html "Enlarge"){.internal} +::: + +**Figure 1:** VFIO group nodes are unit of ownership that VFIO uses. See +slides from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![](images/thumb/3/33/IOCTL_set_VFIO_container.png/300px-IOCTL_set_VFIO_container.png){.thumbimage +decoding="async" width="300" height="242" +srcset="images/thumb/3/33/IOCTL_set_VFIO_container.png/450px-IOCTL_set_VFIO_container.png 1.5x, images/thumb/3/33/IOCTL_set_VFIO_container.png/600px-IOCTL_set_VFIO_container.png 2x"}](index.php/File:IOCTL_set_VFIO_container.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:IOCTL_set_VFIO_container.png.html "Enlarge"){.internal} +::: + +**Figure 2:** IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places +the VFIO Group inside the VFIO Container. See slides from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![](images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/300px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png){.thumbimage +decoding="async" width="300" height="214" +srcset="images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/450px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png 1.5x, images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/600px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png 2x"}](index.php/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html "Enlarge"){.internal} +::: + +**Figure 3:** Using interrupts IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, +&MAP), IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) to map memory and +pin pages. See slides from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![](images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/300px-Ioctl-VFIO_GROUP_GET_FD.png){.thumbimage +decoding="async" width="300" height="204" +srcset="images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/450px-Ioctl-VFIO_GROUP_GET_FD.png 1.5x, images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/600px-Ioctl-VFIO_GROUP_GET_FD.png 2x"}](index.php/File:Ioctl-VFIO_GROUP_GET_FD.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Ioctl-VFIO_GROUP_GET_FD.png.html "Enlarge"){.internal} +::: + +**Figure 4:** Using interrupt IOCTL(GROUP2, VFIO_GROUP_GET_FD, +\"0000:01:00.0\") to obtain the VFIO Group file descriptor. See slides +from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 1:** Binding devices to the vfio-pci driver results in VFIO +group nodes. + +Opening the file \"/dev/vfio/vfio\" creates a VFIO Container. + +**Figure 2:** The interrupt routine +**`IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER)`** places the VFIO +group inside the VFIO container. + +### [Programming the IOMMU]{#Programming_the_IOMMU .mw-headline} + +When this has been done +**`IOCTL(CONTAINER, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU)`** can then be +used to set an IOMMU type for the container which places it in a user +interactable state. + +Once this IOMMU type state has been set and the VFIO container has been +made interactable additional VFIO groups may be added to the container +without requiring that the group\'s IOMMU type be set again as newly +added groups automatically inherit the container\'s IOMMU context. + +### [VFIO Memory Mapped IO]{#VFIO_Memory_Mapped_IO .mw-headline} + +**Figure 3:** Once the VFIO Groups have been placed inside the VFIO +container and the IOMMU type has been set the user may then map and +unmap which will automatically inserts Memory Mapped IO (MMIO) entries +into the IOMMU as well as pin/unpin pages as necessary. This can be +accomplished using **`IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP)`** for +map/pin and **`IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP)`** for +unmap/unpin. + +### [Getting the VFIO Group File Descriptor]{#Getting_the_VFIO_Group_File_Descriptor .mw-headline} + +**Figure 4:** Once the device has been bound to a VFIO driver, set in a +VFIO container, the VFIO container has it\'s IOMMU type set, and a +memory map/page pin of the VFIO device has been completed a file +descriptor can then be obtained for the device. This file descriptor can +be used for interrupts (ioctls), to probe for information about the BAR +regions, and configure the IRQs. + +### [VFIO device file descriptor]{#VFIO_device_file_descriptor .mw-headline} + +VFIO device file descriptors are divided into regions and each region is +mapped into a device resource. Region count and info (file offset, +allowable access, ect..) can be discovered through interrupt (IOCTL). +Each file descriptor region corresponding to a PCI resource is +represented as a file offset. + +In the case of RPC Mode this structure is emulated whereas in SR-IOV +Mode the structure is mapped to a real PCI resource. + + --------------------------------------------------- + 00:00.0 VGA compatible controller + Region 0 Bar0 (Config Space) starts at offset 0 + Region 1 Bar1 (MSI - Message Signaled Interrupts) + Region 2 Bar2 (MSIX) + Region 3 Bar3 + Region 4 Bar4 + Region 5 Bar5 (IO port space) + Expansion ROM + --------------------------------------------------- + + : BAR regions in a VGA PCI device. + +Below is what the file offsets looks like internally for each BAR region +starting from address 0 and growing with the addition of former regions +as you progress through the file. + + --------------------- ------------------- ------------------- ----------------------- ------ + \<- File Offset -\> + 0 -\> A A -\> (A+B) (A+B) -\> (A+B+C) (A+B+C) -\> (A+B+C+D) \... + Region 0 (size A) Region 1 (size B) Region 2 (size C) Region 3 (size D) \... + --------------------- ------------------- ------------------- ----------------------- ------ + + : VFIO representation of PCI BAR regions offsets. + +### [VFIO Interrupts]{#VFIO_Interrupts .mw-headline} + +Guests communicate with the host via VFIO Interrupt Requests +([IRQs](https://infogalactic.com/info/Interrupt_request_(PC_architecture)){.external +.text rel="nofollow"}). These are sent via an irqfd (IRQ [File +Descriptor](https://infogalactic.com/info/File_descriptor){.external +.text rel="nofollow"}). Similarly, the host receives these interrupts +via +[eventfd](https://man7.org/linux/man-pages/man2/eventfd.2.html){.external +.text rel="nofollow"} (Event File Descriptor). The resulting data can be +returned via a +[callback](https://infogalactic.com/info/Callback_(computer_programming)){.external +.text rel="nofollow"}. + +#### [IRQs]{#IRQs .mw-headline} + +Device properties discovered via interrupt (IOCTL). + +##### [Get Device Info]{#Get_Device_Info .mw-headline} + + ------------------------- ------------- ---------------------------- + VFIO_DEVICE_GET_INFO + struct vfio_device_info + argz + flags + VFIO_DEVICE_FLAGS_PCI + VFIO_DEVICE_FLAGS_PLATFORM + VFIO_DEVICE_FLAGS_RESET + num_irqs + num_regions + ------------------------- ------------- ---------------------------- + +The IRQ **`VFIO_DEVICE_GET_INFO`** can provide information to +distinguish between PCI and platform devices as well as the number of +regions and IRQs for a particular device. + +The upstream API can be read **[here +(vfio.h)](https://github.com/torvalds/linux/blob/47700948a4abb4a5ae13ef943ff682a7f327547a/include/uapi/linux/vfio.h#L194){.external +.text rel="nofollow"}**. + +**Sample mdev code** to service this request can be found +**[here](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L470){.external +.text rel="nofollow"}**, and +**[here](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L522){.external +.text rel="nofollow"}**. + +##### [Get Region Info]{#Get_Region_Info .mw-headline} + + ----------------------------- ------------ ----------------------------- + VFIO_DEVICE_GET_REGION_INFO + struct vfio_region_info + argz + cap_offset + flags + VFIO_REGION_INFO_FLAG_CAPS + VFIO_REGION_INFO_FLAG_MMAP + VFIO_REGION_INFO_FLAG_READ + VFIO_REGION_INFO_FLAG_WRITE + index + offset + size + ----------------------------- ------------ ----------------------------- + +Once the interrupt user knows the number of regions within a VFIO device +they can use IRQ **`VFIO_DEVICE_GET_REGION_INFO`** to probe each region +for additional information. This interrupt will return information such +as if it can be read from or written to, if the device supports MMAP, as +well as what the offset and size of the region is within the VFIO file +descriptor. + +The upstream API can be read [**here +(vfio.h)**](https://github.com/torvalds/linux/blob/47700948a4abb4a5ae13ef943ff682a7f327547a/include/uapi/linux/vfio.h#L240){.external +.text rel="nofollow"}. + +**Sample mdev code** to service this request can be found +[**here**](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L425){.external +.text rel="nofollow"}, and +[**here**](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L545){.external +.text rel="nofollow"}. + +##### [Get IRQ Info]{#Get_IRQ_Info .mw-headline} + + -------------------------- ------- -------------------------- + VFIO_DEVICE_GET_IRQ_INFO + struct vfio_irq_info + argz + count + flags + VFIO_IRQ_INFO_AUTOMASKED + VFIO_IRQ_INFO_EVENTFD + VFIO_IRQ_INFO_MASKABLE + VFIO_IRQ_INFO_NORESIZE + index + -------------------------- ------- -------------------------- + +**`VFIO_DEVICE_GET_IRQ_INFO`** is used to retrieve information about a +device IRQ. + +**`VFIO_IRQ_INFO_AUTOMASKED`** is used to mask interrupts when they +occur to protect the host. + +The upstream API can be read **[here +(vfio.h)](https://github.com/torvalds/linux/blob/47700948a4abb4a5ae13ef943ff682a7f327547a/include/uapi/linux/vfio.h#L480){.external +.text rel="nofollow"}** + +**Sample mdev code** to service this request can be found +[**here**](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L463){.external +.text rel="nofollow"}, and +[**here**](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L570){.external +.text rel="nofollow"}. + +##### [Set IRQs]{#Set_IRQs .mw-headline} + + ---------------------- ---------- ----------------------------- + VFIO_DEVICE_SET_IRQS + struct vfio_irq_set + argz + count + data\[\] + flags + VFIO_IRQ_SET_ACTION_MASK + VFIO_IRQ_SET_ACTION_TRIGGER + VFIO_IRQ_SET_ACTION_UNMASK + VFIO_IRQ_SET_DATA_BOOL + VFIO_IRQ_SET_DATA_EVENTFD + VFIO_IRQ_SET_DATA_NONE + index + start + ---------------------- ---------- ----------------------------- + +**`VFIO_DEVICE_SET_IRQS`** is used to setup IRQs. Actions can be +configured such as trigger which is when the device triggers an +interrupt (IOCTL), masking and unmasking actions can be set. Bool and +None data types are used for loopback testing of the device. Start and +index may be used to modify subregions. + +The upstream API can be read **[here +(vfio.h)](https://github.com/torvalds/linux/blob/47700948a4abb4a5ae13ef943ff682a7f327547a/include/uapi/linux/vfio.h#L524){.external +.text rel="nofollow"}**. + +### []{#Device_Decomposure.2FRecomposure}[Device Decomposure/Recomposure]{#Device_Decomposure/Recomposure .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 5: Device Decomposure and Recomposure via +VFIO.](images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/300px-Device_Decomposure_and_Recomposure_via_VFIO.png){.thumbimage +decoding="async" width="300" height="147" +srcset="images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/450px-Device_Decomposure_and_Recomposure_via_VFIO.png 1.5x, images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/600px-Device_Decomposure_and_Recomposure_via_VFIO.png 2x"}](index.php/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html "Enlarge"){.internal} +::: + +**Figure 5:** Device Decomposure and Recomposure via VFIO. See slides +from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 5:** Virtual Function IO (VFIO) devices are deconstructed in +userspace into a set of VFIO primitives (MMIO pages, VFIO/IOMMU Groups, +VFIO IRQs, File Descriptors). Recomposure of these devices occurs upon +assignment of a Virtual Function (VF) to a QEMU virtual machine. + +### []{#Memory_Management_Unit_.28MMU.29}[Memory Management Unit (MMU)]{#Memory_Management_Unit_(MMU) .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +::: {.MediaTransformError style="width: 300px; height: 275px; display:inline-block;"} +Error creating thumbnail: File missing +::: + +::: thumbcaption +::: magnify +[](index.php/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html "Enlarge"){.internal} +::: + +**Figure 6:** MMU - GMMU IOVA translation/isolation. +::: +::: +::: + +**Figure 6:** This section will touch upon the mechanisms used for +enforcement of Host Physical Address (HPA) to Guest Physical Address +(GPA) isolation. + +#### []{#MMIO_Isolation_.28Platform_MMU.29}[MMIO Isolation (Platform MMU)]{#MMIO_Isolation_(Platform_MMU) .mw-headline} + +The platform\'s CPU communicates with the GPU by reading/writing to and +from pinned MMIO pages in [Random Access Memory +(RAM)](https://infogalactic.com/info/Random-access_memory){.external +.text rel="nofollow"}. MMIO pages within the RAM are subject to IO +Virtual Address (IOVA) translations by the platform\'s discrete MMU +controller which is programmed by the CPU. These IOVA translations serve +as a mechanism to enforce HPA to GPA isolation in the context of the +platform. + +#### []{#VRAM_Isolation_.28GPU_GMMU.29}[VRAM Isolation (GPU GMMU)]{#VRAM_Isolation_(GPU_GMMU) .mw-headline} + +The GPU core performs virtualized operations by reading/writing to and +from shadow page tables in onboard [Video Random Access Memory +(VRAM)](https://en.wikipedia.org/wiki/Video_random_access_memory "wikipedia:Video random access memory"){.extiw}. +Shadow pages within the VRAM are subject to IO Virtual Address (IOVA) +translations by the GPU\'s discrete GPU MMU controller (GMMU) which is +programmed by the Embedded CPU (GPU co-processor). These IOVA +translations serve as a mechanism to enforce HPA to GPA isolation in the +context of the virtual GPUs and multi-process isolation in single user +environments. + +#### []{#Platform_MMIO_.3C-.3E_GPU_Shadow_Pages}[Platform MMIO \<-\> GPU Shadow Pages]{#Platform_MMIO_<->_GPU_Shadow_Pages .mw-headline} + +In the context of VFIO pinned MMIO pages in RAM act as an interface to +communicate with VRAM shadow pages allowing GPU drivers on the platform +to send instructions to the GPU. When the GPU or Platform alters memory +contained in a shadow page or pinned MMIO page the change is mirrored in +the corresponding IO Virtual Address (IOVA). For example if shadow page +0 is changed by the GPU this change is mirrored in MMIO page 0 on the +platform (the reverse example also applies). When communications occur +between the platform and GPU the information first moves through the +MMU/GMMU and is then written to RAM/VRAM. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 7: A depiction of region overlays within a VFIO file +descriptor.](images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/300px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png){.thumbimage +decoding="async" width="300" height="268" +srcset="images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/450px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png 1.5x, images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/600px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png 2x"}](index.php/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html "Enlarge"){.internal} +::: + +**Figure 7:** A depiction of region overlays within a VFIO file +descriptor. See slides from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +### []{#VFIO_Quirks_.28region_traps.29}[VFIO Quirks (region traps)]{#VFIO_Quirks_(region_traps) .mw-headline} + +**Figure 7:** Regions of the PCI BAR require emulation (slow path) via +emulated traps (known as quirks). These regions are primarily in PCI +configuration space. QEMU may overlap a region overlay which when +read/written to/from triggers a VM-exit to trap and emulate the region +in order that appropriate translations may occur (such as those +concerned with IO Virtual Address - IOVA). + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Peer-to-Peer DMA Isolation under +IOMMU](images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/300px-Screen_Shot_2022-05-06_at_10.46.59_AM.png){.thumbimage +decoding="async" width="300" height="224" +srcset="images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/450px-Screen_Shot_2022-05-06_at_10.46.59_AM.png 1.5x, images/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png 2x"}](index.php/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html "Enlarge"){.internal} +::: + +**Figure 8:** Peer-to-Peer DMA Isolation under IOMMU. See slides from: +[\[2\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +### [Known IOMMU Issues]{#Known_IOMMU_Issues .mw-headline} + +**DMA Aliasing** + +- Not all devices generate unique IDs. +- Not all devices generate IDs they should.\ + +**DMA Isolation** + +- **Figure 8:** Peer-to-Peer DMA Isolation. In many circumstances IO + Virtual Address (IOVA) translations do not occur properly in the + context of DMA peering. Transactions that occur through the IOMMU + are unaffected. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 0: Approches to GPU +Virtualization.](images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/300px-Figure_0-_Approches_to_GPU_Virtualization..png){.thumbimage +decoding="async" width="300" height="153" +srcset="images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/450px-Figure_0-_Approches_to_GPU_Virtualization..png 1.5x, images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/600px-Figure_0-_Approches_to_GPU_Virtualization..png 2x"}](index.php/File:Figure_0-_Approches_to_GPU_Virtualization..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Figure_0-_Approches_to_GPU_Virtualization..png.html "Enlarge"){.internal} +::: + +**Figure 0:** Approaches to GPU Virtualization. See slides from: +[\[61\]](index.php/Virtual_I/O_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +## [Mdev Mode]{#Mdev_Mode .mw-headline} + +**Mdev Mode (VFIO Mediated Device)** is a method of virtualizing I/O +devices enabling full API capabilities without the requirement for +hardware assistance. + +### [Knowledge Resources Used]{#Knowledge_Resources_Used_2 .mw-headline} + +This section is supported by significant contributions in open source by +Neo Jia, Kirti Wankhede, Kevin Tian, Yiying Zhang, David Cowperthwaite, +Kun Tian, Yaozu Dong, Tina Zhang, Gerd Hoffmann, & Zhi Wang. + +See references 1, 7, 8, 17, 18, 19, 70 in the [References (Talks & +Reading +Material)](index.php/Virtual_IO_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} section. + +### [Mediated Core]{#Mediated_Core .mw-headline} + +The mediated device framework made 3 major changes to the VFIO driver. + +- **1: [Mediated core module + (new)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/vfio/mdev/mdev_core.c){.external + .text rel="nofollow"}**\ + -Mediated bus driver, create mediated device.\ + -Physical device interface for vendor callbacks.\ + -Generic Mediated device management user interface (sysfs). +- **2: [Mediated device module + (new)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/vfio/mdev/mdev_driver.c){.external + .text rel="nofollow"}**\ + -Manage created mediated device, fully compatible with VFIO user API + (UAPI). +- **3: [VFIO IOMMU driver + (enhancement)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/vfio/vfio_iommu_type1.c){.external + .text rel="nofollow"}**\ + -VFIO IOMMU API Type1 compatible, easy to extend to non-Type1. + +The full list of these changes can be seen in the [**lists.gnu.org +Qemu-devel** mailing list +archive](https://lists.gnu.org/archive/html/qemu-devel/2016-10/msg03922.html){.external +.text rel="nofollow"}. + +### [Device Initialization]{#Device_Initialization .mw-headline} + +This section will deal with how an Mdev driver is initialized. + +**Sample mdev code** for device initialization can be found +**[here](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L229){.external +.text rel="nofollow"}**. + +#### [Registering VFIO MDEV as a driver]{#Registering_VFIO_MDEV_as_a_driver .mw-headline} + +VFIO Mdev must be registered as a driver. This register event occurs +between the Mdev Driver Register Interface and the VFIO MDEV interface. + +#### [Registering PCIE Device with the Mediated Core]{#Registering_PCIE_Device_with_the_Mediated_Core .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Registering the mediated +device.](images/thumb/7/75/Mdev-gpu.png/300px-Mdev-gpu.png){.thumbimage +decoding="async" width="300" height="208" +srcset="images/thumb/7/75/Mdev-gpu.png/450px-Mdev-gpu.png 1.5x, images/thumb/7/75/Mdev-gpu.png/600px-Mdev-gpu.png 2x"}](index.php/File:Mdev-gpu.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Mdev-gpu.png.html "Enlarge"){.internal} +::: + +**Figure 9:** Registering the mediated device. This step may be +accomplished via the vendor driver or via +[GVM/Mdev-GPU](){.external .text +rel="nofollow"} for drivers which do not include support for Mdev +functionality and/or do not support arbitrary Mdev types. +::: +::: +::: + +**Figure 9:** The vendor driver must register with the Mediated Core\'s +Device Register Interface. The example shown uses the [GVM +Project](){.external .text rel="nofollow"}\'s +[Mdev-GPU](){.external .text +rel="nofollow"} component to accomplish this step on behalf of the +vendor driver. + +#### []{#Registering_Mediated_Callbacks_.28CBs.29}[Registering Mediated Callbacks (CBs)]{#Registering_Mediated_Callbacks_(CBs) .mw-headline} + +**Figure 9:** The vendor driver must now register Mediated Callbacks +which it expects to receive from Mdev devices. The example shown uses +the [GVM Project](){.external .text +rel="nofollow"}\'s +[Mdev-GPU](){.external .text +rel="nofollow"} component to accomplish this step on behalf of the +vendor driver. + +#### [Creating a Mediated Device via mdev-sysfsdev API]{#Creating_a_Mediated_Device_via_mdev-sysfsdev_API .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![](images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/300px-Echoing_a_UUID_into_the_sysfsdev_API.png){.thumbimage +decoding="async" width="300" height="235" +srcset="images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/450px-Echoing_a_UUID_into_the_sysfsdev_API.png 1.5x, images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/600px-Echoing_a_UUID_into_the_sysfsdev_API.png 2x"}](index.php/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html "Enlarge"){.internal} +::: + +**Figure 10:** Echoing a UUID into the mdev-sysfsdev API. This +functionality is included in +[mdevctl](https://github.com/mdevctl/mdevctl){.external .text +rel="nofollow"} and in [](){.external .text +rel="nofollow"}. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 10:** The user of an mdev capable device driver may echo values +such as a UUID into the mdev-sysfsdev interface to create a unique +mediated device. UUIDs must be unique per mdev device within a host. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 10: QEMU creates VFIO-mdev IOMMU binding and acquires mdev +file +descriptor.](images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/300px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png){.thumbimage +decoding="async" width="300" height="231" +srcset="images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/450px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png 1.5x, images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/600px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png 2x"}](index.php/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html "Enlarge"){.internal} +::: + +**Figure 11:** QEMU creates VFIO-mdev IOMMU binding and acquires mdev +file descriptor. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +#### [QEMU adds VFIO device to IOMMU container-group]{#QEMU_adds_VFIO_device_to_IOMMU_container-group .mw-headline} + +**Figure 11:** When starting a QEMU process with a VFIO-mdev attached +QEMU calls the VFIO API to add the VFIO device to an IOMMU +container/group. QEMU then runs the IOCTL to obtain a file descriptor +for the device. + +#### [QEMU passes mdev device file descriptor to VM]{#QEMU_passes_mdev_device_file_descriptor_to_VM .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 11: QEMU presenting the VFIO file descriptor into the virtual +machine.](images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/300px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png){.thumbimage +decoding="async" width="300" height="234" +srcset="images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/450px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png 1.5x, images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/600px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png 2x"}](index.php/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html "Enlarge"){.internal} +::: + +**Figure 12:** QEMU presenting the VFIO file descriptor into the virtual +machine. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 12:** Once QEMU has obtained the VFIO file descriptor for the +Mdev device via IOCTL it is then QEMU\'s job to present the file +descriptor into the virtual machine so that the mdev may be used by the +guest. + +### [Instruction Execution]{#Instruction_Execution .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![](images/thumb/a/aa/Ioeventfd-and-irqfd.png/300px-Ioeventfd-and-irqfd.png){.thumbimage +decoding="async" width="300" height="215" +srcset="images/thumb/a/aa/Ioeventfd-and-irqfd.png/450px-Ioeventfd-and-irqfd.png 1.5x, images/thumb/a/aa/Ioeventfd-and-irqfd.png/600px-Ioeventfd-and-irqfd.png 2x"}](index.php/File:Ioeventfd-and-irqfd.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Ioeventfd-and-irqfd.png.html "Enlarge"){.internal} +::: + +**Figure 13:** A simple diagram of signalling from host to guest (via +irqfd) & guest to host (via ioeventfd) From +[blog.allenx](http://blog.allenx.org/2015/07/05/kvm-irqfd-and-ioeventfd){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 13:** Mdev Mode moves instruction information across a virtual +function (VF) device using [Remote Procedure +Calls](https://infogalactic.com/info/Remote_procedure_call){.external +.text rel="nofollow"} generally by way of [software +interrupt](https://infogalactic.com/info/Interrupt){.external .text +rel="nofollow"} +([IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external +.text rel="nofollow"}). Signals to and from the guest and the host GPU +driver may be passed over file descriptors such as the [Interrupt +Request File Descriptor +(irqfd)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=721eecbf4fe995ca94a9edec0c9843b1cc0eaaf3){.external +.text rel="nofollow"} and [IO Event File Descriptor +(ioeventfd)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d34e6b175e61821026893ec5298cc8e7558df43a){.external +.text rel="nofollow"}. The irqfd may be used to signal from the host +into the guest whereas the ioeventfd may be used to signal from the +guest into the host. Guest GPU instructions which would normally +serialize as pRPCs (physical Remote Procedure Calls) are instead +serialized from the guest as vRPCs (virtual Remote Procedure Calls) +which are executed by the host mediated driver. + +#### [IRQ remapping]{#IRQ_remapping .mw-headline} + +Interrupt Requests (IRQs) must be remapped (trapped for virtualized +execution) to protect the host from sensitive instructions which may +affect global memory state. + +#### [Interrupt Injection]{#Interrupt_Injection .mw-headline} + +**\--** + +**\--Researching\--** + +**\--** + +### [Memory Management]{#Memory_Management .mw-headline} + +Mdev memory management is handled by vendor driver software. + +#### [Region Passthrough]{#Region_Passthrough .mw-headline} + +Guests may be presented with emulated memory regions or via passthrough +regions or a mixture of the two such as in the case of passthrough +regions with BAR 0 configuration space emulation while other regions are +passthrough\'d. + +##### [Emulated Regions]{#Emulated_Regions .mw-headline} + +Emulated memory regions use indirect emulated communication requiring a +VM-exit (slow). These regions are often used for virtual PCI config +space such as [in this sample +code](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/c0adb9957c0b22bfdbc18395e81dd2b476addac5/mdpy.c#L112){.external +.text rel="nofollow"}. + +##### [Passthrough Regions]{#Passthrough_Regions .mw-headline} + +Passthrough memory regions use direct communication requiring no VM-exit +(fast). + +##### [Region Access]{#Region_Access .mw-headline} + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 13: QEMU gets region info via VFIO UAPI from vendor driver +through vfio-mdev and Mediated +CBs](images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/300px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png){.thumbimage +decoding="async" width="300" height="236" +srcset="images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/450px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png 1.5x, images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/600px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png 2x"}](index.php/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html "Enlarge"){.internal} +::: + +**Figure 14:** QEMU gets region info via VFIO UAPI from vendor driver +through vfio-mdev and Mediated CBs. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 14:** QEMU gets region information via VFIO User API (UAPI) +from the vendor driver through VFIO-mdev and Mediated Callbacks. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +::: {.MediaTransformError style="width: 300px; height: 238px; display:inline-block;"} +Error creating thumbnail: File missing +::: + +::: thumbcaption +::: magnify +[](index.php/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html "Enlarge"){.internal} +::: + +**Figure 15:** Guest driver accessing Mdev MMIO space backed by mdev +file descriptor triggers EPT violation. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 15:** The guest\'s vendor driver accesses the Mdev MMIO trapped +region backed by a mdev file descriptor (fd) which triggers an Extended +Page Table (EPT) violation. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 15: KVM services EPT violation and forwards to QEMU VFIO PCI +driver.](images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/300px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png){.thumbimage +decoding="async" width="300" height="235" +srcset="images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/450px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png 1.5x, images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/600px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png 2x"}](index.php/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html "Enlarge"){.internal} +::: + +**Figure 16:** KVM services EPT violation and forwards to QEMU VFIO PCI +driver. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 16:** KVM services EPT violation and forwards to QEMU VFIO PCI +driver. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Figure 16: QEMU convert request from KVM to Read/Write acess to Mdev +file +descriptor.](images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/300px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png){.thumbimage +decoding="async" width="300" height="235" +srcset="images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/450px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png 1.5x, images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/600px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png 2x"}](index.php/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html "Enlarge"){.internal} +::: + +**Figure 17:** QEMU convert request from KVM to Read/Write acess to Mdev +file descriptor. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 17:** QEMU convert request from KVM to R/W access to Mdev file +descriptor. + +#### [EPT Page Violations]{#EPT_Page_Violations .mw-headline} + +Guest [Memory Mapped IO +(MMIO)](https://infogalactic.com/info/Memory-mapped_I/O){.external .text +rel="nofollow"} trips Extended Page Table (EPT) violations which are +trapped by the host MMU. KVM services EPT violations and forwards to +QEMU VFIO PCI driver. QEMU then converts the request from KVM to R/W +access to the [Mdev File Descriptor +(FD)](https://infogalactic.com/info/File_descriptor){.external .text +rel="nofollow"}. Reads and writes are then handled by the host GPU +device driver via mediated [callbacks +(CBs)](https://infogalactic.com/info/Callback_(computer_programming)){.external +.text rel="nofollow"} and +[VFIO-mdev](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/vfio-mediated-device.rst){.external +.text rel="nofollow"}. + +#### [Mediated DMA Translations]{#Mediated_DMA_Translations .mw-headline} + +**\--** + +**\--Researching\--** + +**\--** + +Because memory is not statically allocated by the vendor driver under +the mediated device framework there is no requirement to make use of +traditional VFIO pinned pages (via the vfio-pci module) rather MMIO +memory can be mapped at runtime incrementally. As a result non-standard +mediated device vfio stub modules may be used. + +**Figure 18:** Memory regions get added by QEMU. + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Memory Regions Added by +QEMU](images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/300px-Memory_Regions_Added_by_QEMU.png){.thumbimage +decoding="async" width="300" height="225" +srcset="images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/450px-Memory_Regions_Added_by_QEMU.png 1.5x, images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/600px-Memory_Regions_Added_by_QEMU.png 2x"}](index.php/File:Memory_Regions_Added_by_QEMU.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Memory_Regions_Added_by_QEMU.png.html "Enlarge"){.internal} +::: + +**Figure 18:** Memory Regions Added by QEMU. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 19:** QEMU calls VFIO_DMA_MAP via Memory listener. (not just +guest physical memory but also device memory will be added through this +memory listener) + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![QEMU calls VFIO DMA MAP via Memory +listener](images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/300px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png){.thumbimage +decoding="async" width="300" height="237" +srcset="images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/450px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png 1.5x, images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/600px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png 2x"}](index.php/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html "Enlarge"){.internal} +::: + +**Figure 19:** QEMU calls VFIO DMA MAP via Memory listener. See slides +from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +::: {.thumb .tright} +::: {.thumbinner style="width:302px;"} +[![Type 1 IOMMU Tracks +VA-GFN](images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/300px-Type_1_IOMMU_Tracks_VA-GFN.png){.thumbimage +decoding="async" width="300" height="237" +srcset="images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/450px-Type_1_IOMMU_Tracks_VA-GFN.png 1.5x, images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/600px-Type_1_IOMMU_Tracks_VA-GFN.png 2x"}](index.php/File:Type_1_IOMMU_Tracks_VA-GFN.png.html){.image} + +::: thumbcaption +::: magnify +[](index.php/File:Type_1_IOMMU_Tracks_VA-GFN.png.html "Enlarge"){.internal} +::: + +**Figure 20:** Type 1 IOMMU Tracks \. See slides from: +[\[1\]](index.php/Mediated_Device_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} +::: +::: +::: + +**Figure 20:** Type 1 IOMMU tracks \. We +build a table to list the QEMU VAs and track the their mapping relation +to Guest Frame Numbers (GFNs). + +### [Scheduling]{#Scheduling .mw-headline} + +Scheduling is handled by the host mdev driver. + +### [Kernel API]{#Kernel_API .mw-headline} + +Kernel documentation used for implementing a VFIO Mediated Device may be +found at +[kernel.org](https://www.kernel.org/doc/html/latest/driver-api/vfio-mediated-device.html){.external +.text rel="nofollow"}. + +### [Sample Code]{#Sample_Code .mw-headline} + +Sample code for various mdev implementations may be found below: + +**Mediated Virtual PCI Display Host Device:** + +1. [mdpy.c](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/master/mdpy.c){.external + .text rel="nofollow"} +2. [mdpy-fb.c](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/master/mdpy-fb.c){.external + .text rel="nofollow"} +3. [mbochs.c](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/master/mbochs.c){.external + .text rel="nofollow"}. + +**Serial PCI Port-based Mediated Device:** + +1. [mtty.c](https://github.com/Open-IOV/VFIO-Mdev_Samples/blob/master/mtty.c){.external + .text rel="nofollow"}. + +###### [Compilation]{#Compilation .mw-headline} + +To compile the kernel modules linked above you should have your +distro\'s equivalent of the build-essential package installed. The +included Makefile should provide all that is necessary to successfully +compile the kernel modules. You can type the following command to +compile the modules from within the directory: + +`make` + +When the make operation has been completed successfully the directory +will now contain .ko files. These files are the binary kernel modules. + +###### [Loading Kernel Modules]{#Loading_Kernel_Modules .mw-headline} + +Now that you have compiled the kernel modules you may load them via the +insmod command. + +For example to load the **mtty.ko** module run the following command +from within the directory where you built the modules: + +`insmod mtty.ko` + +###### [Unloading Kernel Modules]{#Unloading_Kernel_Modules .mw-headline} + +To unload any of the kernel modules you may make use of the rmmod +command. + +For example to unload the **mtty.ko** module run the following command: + +`rmmod mtty.ko` + +###### [Additional Documentation]{#Additional_Documentation .mw-headline} + +An additional guide explaining how to make use of the mtty.c sample code +may be found at [line +308](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/vfio-mediated-device.rst?h=driver-core-next&id=7de3697e9cbd4bd3d62bafa249d57990e1b8f294#n308){.external +.text rel="nofollow"} of the kernel.org VFIO Mediated Device +documentation. + +### [Mdev Mode Requirements]{#Mdev_Mode_Requirements .mw-headline} + +Driver Support. + +Software HPA\<-\>GPA Boundary Enforcement. + +## [SR-IOV Mode]{#SR-IOV_Mode .mw-headline} + +**SR-IOV Mode (Single Root I/O Virtualization)** involves hardware +assisted virtualization on I/O peripherals. + +### [Knowledge Resources Used]{#Knowledge_Resources_Used_3 .mw-headline} + +This section is supported by significant contributions in open source by +Zheng Xiao, Jerry Jiang, & Ken Xue. + +See reference 6 in the [References (Talks & Reading +Material)](index.php/Virtual_IO_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} section. + +### [Instruction Execution]{#Instruction_Execution_2 .mw-headline} + +SR-IOV communicates instructions from a virtual function (VF) directly +to the [PCI +BAR](https://infogalactic.com/info/PCI_configuration_space){.external +.text rel="nofollow"}. + +### [Memory Management]{#Memory_Management_2 .mw-headline} + +Guests are presenting with passthrough memory regions by the device +firmware. + +### [Scheduling]{#Scheduling_2 .mw-headline} + +Scheduling may be handled by the host mdev driver and/or the device +firmware. + +### [SR-IOV Mode Requirements]{#SR-IOV_Mode_Requirements .mw-headline} + +Driver Support. + +Device SR-IOV support. + +Firmware HPA\<-\>GPA Boundary Enforcement. + +## [SIOV Mode]{#SIOV_Mode .mw-headline} + +**SIOV (Scalable I/O Virtualization)** involves the combination of +concepts form both [SR-IOV +Mode](index.php/Mediated_Device_Internals.html#SR-IOV_Mode){.external +.text rel="nofollow"} and [Mdev +Mode](index.php/Mediated_Device_Internals.html#Mdev_Mode){.external +.text rel="nofollow"} as well as novel concepts like shared IOMMU aware +buffers and offloading of PCI config space VM-exits (slow path) to a +discrete controller. + +**Revision 1.0 of the SIOV specification** can be read on the [Open +Compute Project +website](https://www.opencompute.org/documents/ocp-scalable-io-virtualization-technical-specification-revision-1-v1-2-pdf){.external +.text rel="nofollow"}. + +### [Knowledge Resources Used]{#Knowledge_Resources_Used_4 .mw-headline} + +This section is supported by significant contributions in open source by +Kevin Tian, Tina Zhang, Xin Zeng, Yi Liu. + +See references 3, 4, 5, 16, 17, 18, 19, 20, 21 in the [References (Talks +& Reading +Material)](index.php/Virtual_IO_Internals.html#References_(Talks_&_Reading_Material)){.external +.text rel="nofollow"} section. + +### [Memory Management]{#Memory_Management_3 .mw-headline} + +Enhancements to [Intel +VT-d](https://edc.intel.com/content/www/us/en/design/ipla/software-development-platforms/client/platforms/alder-lake-desktop/12th-generation-intel-core-processors-datasheet-volume-1-of-2/002/intel-virtualization-technology-for-directed-i-o/){.external +.text rel="nofollow"} introduce new \'Scalable Mode\' to allow the +platform to assign more granular IOMMU allocations to mediated devices +([mdev memory +management](index.php/Mediated_Device_Internals.html#Memory_Management){.external +.text rel="nofollow"}). This change is referred to as an IOMMU Aware +Mediated Device. + +#### [IOMMU Aware Mediated Device]{#IOMMU_Aware_Mediated_Device .mw-headline} + +SIOV made several changes to the VFIO driver, Intel IOMMU, and Mediated +Device Framework. + +The full list of these changes can be seen in the [mailing list archive +on **lwn.net** under **(vfio/mdev: IOMMU aware mediated +device)**](https://lwn.net/ml/linux-kernel/20190222021927.13132-1-baolu.lu@linux.intel.com/){.external +.text rel="nofollow"}. + +#### [Shared Hardware Workqueues]{#Shared_Hardware_Workqueues .mw-headline} + +SIOV makes use of Shared Hardware Workqueues which may be accessed by +processes or Virtual Machines. + +[According to +**kernel.org**](https://www.kernel.org/doc/html/latest/x86/sva.html){.external +.text rel="nofollow"}: *\"In order to allow the hardware to distinguish +the context for which work is being executed in the hardware by SWQ +interface, SIOV uses Process Address Space ID (PASID), which is a 20-bit +number defined by the PCIe SIG. PASID value is encoded in all +transactions from the device. This allows the IOMMU to track I/O on a +per-PASID granularity in addition to using the PCIe Resource Identifier +(RID) which is the Bus/Device/Function.\"* + +### [SIOV Mode Requirements]{#SIOV_Mode_Requirements .mw-headline} + +Driver Support. + +Device SIOV support. + +Firmware HPA\<-\>GPA Boundary Enforcement. + +## []{#References_.28Talks_.26_Reading_Material.29}[References (Talks & Reading Material)]{#References_(Talks_&_Reading_Material) .mw-headline} + +1. [\[2016\] vGPU on KVM - A VFIO Based Framework by Neo Jia & Kirti + Wankhede](https://www.youtube.com/watch?v=Xs0TJU_sIPc){.external + .text rel="nofollow"} - + [slides](https://www.linux-kvm.org/images/5/59/02x03-Neo_Jia_and_Kirti_Wankhede-vGPU_on_KVM-A_VFIO_based_Framework.pdf){.external + .text rel="nofollow"} +2. [\[2016\] An Introduction to PCI Device Assignment with VFIO by Alex + Williamson](https://www.youtube.com/watch?v=WFkdTFTOTpA){.external + .text rel="nofollow"} - + [slides](http://events17.linuxfoundation.org/sites/events/files/slides/An%20Introduction%20to%20PCI%20Device%20Assignment%20with%20VFIO%20-%20Williamson%20-%202016-08-30_0.pdf){.external + .text rel="nofollow"} +3. [\[2017\] Scalable I/O Virtualization by Kevin + Tian](https://events19.linuxfoundation.cn/wp-content/uploads/2017/11/Intel%C2%AE-Scalable-I_O-Virtualization_Kevin-Tian.pdf){.external + .text rel="nofollow"} +4. [\[2019\] Bring a Scalable IOV Capable Device into Linux World by + Xin Zeng & Yi + Liu](https://www.youtube.com/watch?v=G6D-jaCs6sc){.external .text + rel="nofollow"} - + [slides](https://static.sched.com/hosted_files/kvmforum2019/5e/Bring%20a%20scalable%20IOV%20capable%20device%20into%20Linux%20-%20KVM%202019.pdf){.external + .text rel="nofollow"} +5. [Scalable I/O Virtualization Revision + 1.0](https://www.opencompute.org/documents/ocp-scalable-io-virtualization-technical-specification-revision-1-v1-2-pdf){.external + .text rel="nofollow"} +6. [\[2018\] Live Migration Support for GPU with SRIOV by Zheng Xiao, + Jerry Jiang & Ken + Xue](https://www.youtube.com/watch?v=_tB3EbFDcRQ){.external .text + rel="nofollow"} - + [slides](https://events19.linuxfoundation.org/wp-content/uploads/2017/12/Live-Migration-Support-for-GPU-with-SRIOV-Challenges-and-Solution-Zheng-Xiao-Alibaba-Cloud-Jerry-Jiang-Ken-Xue-AMD.pdf){.external + .text rel="nofollow"} +7. [\[2017\] Intel GVT-g: From Production to Upstream - Zhi Wang, + Intel](https://www.youtube.com/watch?v=UODxW1opfn0){.external .text + rel="nofollow"} +8. [\[2016\] Qemu Graphics Update 2016 by Gerd + Hoffmann](https://www.youtube.com/watch?v=DKYvQ3FdFeo){.external + .text rel="nofollow"} +9. [IOCTL](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/ioctl.rst){.external + .text rel="nofollow"} +10. [eventfd](https://man7.org/linux/man-pages/man2/eventfd.2.html){.external + .text rel="nofollow"} - + [root/virt/kvm/eventfd.c](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/virt/kvm/eventfd.c){.external + .text rel="nofollow"} +11. (kernel diff:: [KVM: + irqfd](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=721eecbf4fe995ca94a9edec0c9843b1cc0eaaf3){.external + .text rel="nofollow"}) +12. (kernel diff:: [KVM: add ioeventfd + support](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d34e6b175e61821026893ec5298cc8e7558df43a){.external + .text rel="nofollow"}) +13. [KVM irqfd & + ioeventfd](https://web.archive.org/web/20220120223711/http://blog.allenx.org/2015/07/05/kvm-irqfd-and-ioeventfd){.external + .text rel="nofollow"} +14. [VFIO - Virtual Function + I/O](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/vfio.rst){.external + .text rel="nofollow"} - + [root/virt/kvm/vfio.c](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/virt/kvm/vfio.c){.external + .text rel="nofollow"} +15. [VFIO Mediated + Devices](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/vfio-mediated-device.rst){.external + .text rel="nofollow"} +16. [IOMMU Aware Mediated + Device](https://lwn.net/ml/linux-kernel/20190222021927.13132-1-baolu.lu@linux.intel.com/){.external + .text rel="nofollow"} +17. [Hardware-Assisted Mediated Pass-Through with VFIO by Kevin + Tian](https://www.youtube.com/watch?v=95KSKrZM8oQ){.external .text + rel="nofollow"} +18. [\[2017\] Generic Buffer Sharing Mechanism for Mediated Devices by + Tina Zhang](https://www.youtube.com/watch?v=cHMLBcHplhk){.external + .text rel="nofollow"} +19. [\[2019\] Toward a Virtualization World Built on Mediated + Pass-Through - Kevin + Tian](https://www.youtube.com/watch?v=KWRKx_uxUDI){.external .text + rel="nofollow"} +20. [Auxiliary + Bus](https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/auxiliary_bus.rst?h=driver-core-next&id=7de3697e9cbd4bd3d62bafa249d57990e1b8f294){.external + .text rel="nofollow"} +21. [Shared Virtual + Addressing](https://www.kernel.org/doc/html/latest/x86/sva.html){.external + .text rel="nofollow"} +22. [vfio.blogspot.com](https://vfio.blogspot.com/){.external .text + rel="nofollow"} +23. [XenGT by Kevin + Tian](https://01.org/sites/default/files/xengt.pdf){.external .text + rel="nofollow"} +24. [VMWare Academic Publications: GPU Virtualization by Micah Dowty & + Jeremy + Sugerman](https://web.archive.org/web/20130721094438/http://labs.vmware.com/academic/publications/gpu-virtualization){.external + .text rel="nofollow"} +25. [PCI SIG I/O + Virtualization](https://pcisig.com/specifications/iov){.external + .text rel="nofollow"} +26. [VMGL by the University of Toronto Computer Science + Department](https://web.archive.org/web/20120108034526/http://sysweb.cs.toronto.edu/vmgl){.external + .text rel="nofollow"} +27. [Kepler VGX + Hypervisor](https://web.archive.org/web/20120518125815/http://www.nvidia.com/object/vgx-hypervisor.html){.external + .text rel="nofollow"} +28. [Intel Virtualization Technology for Directed I/O (VT-d): Enhancing + Intel platforms for efficient virtualization of I/O + devices](https://web.archive.org/web/20090218010221/http://software.intel.com/en-us/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices){.external + .text rel="nofollow"} +29. [DMA-Mapping.txt (Dynamic DMA + Mapping)](https://lwn.net/2001/0712/a/dma-interface.php3){.external + .text rel="nofollow"} +30. [KVM MMU Virtualization by Xiao + Guangrong](https://events.static.linuxfound.org/slides/2011/linuxcon-japan/lcj2011_guangrong.pdf){.external + .text rel="nofollow"} +31. [OSDEV: PCI](https://wiki.osdev.org/PCI){.external .text + rel="nofollow"} +32. [Down to the TLP: How PCI express devices talk (Part + I)](http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-1){.external + .text rel="nofollow"} +33. [Down to the TLP: How PCI express devices talk (Part + II)](http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-2){.external + .text rel="nofollow"} +34. [Intel ACRN: Enabling SR-IOV + Virtualization](https://projectacrn.github.io/latest/tutorials/sriov_virtualization.html){.external + .text rel="nofollow"} +35. [Kernel.org + sysfs-bus-pci](https://docs.kernel.org/admin-guide/abi-testing.html#abi-file-testing-sysfs-bus-pci){.external + .text rel="nofollow"} +36. [Linux Kernel Labs: Memory + Mapping](https://linux-kernel-labs.github.io/refs/heads/master/labs/memory_mapping.html){.external + .text rel="nofollow"} +37. [Inside Windows Page Frame Number (PFN) - Part + 1](https://rayanfam.com/topics/inside-windows-page-frame-number-part1/){.external + .text rel="nofollow"} +38. [Direct Rendering Infrastructure + (DRI)](https://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure){.external + .text rel="nofollow"} +39. [DRI User + Guide](https://dri.sourceforge.net/doc/DRIuserguide.html){.external + .text rel="nofollow"} +40. [Linux Kernel Labs: IO + Virtualization](https://linux-kernel-labs.github.io/refs/heads/master/lectures/virt.html#i-o-virtualization){.external + .text rel="nofollow"} +41. [Gallium3D: Main + Page](https://dri.freedesktop.org/doxygen/gallium/){.external .text + rel="nofollow"} +42. [Gallium3D + Wiki](https://web.archive.org/web/20080107043445/http://www.tungstengraphics.com/wiki/index.php/Gallium3D){.external + .text rel="nofollow"} +43. [Gallium3D talk from XDS + 2007](https://web.archive.org/web/20090219182518/http://www.tungstengraphics.com/wiki/files/gallium3d-xds2007.pdf){.external + .text rel="nofollow"} +44. [Memory Management High Level Design + (ARCN)](https://projectacrn.github.io/latest/developer-guides/hld/hv-memmgt.html){.external + .text rel="nofollow"} +45. [Block Architecture Diagrams for Geforce + series](https://web.archive.org/web/20080111122628/http://www.digit-life.com/articles2/gffx/nv40-part1-a.html){.external + .text rel="nofollow"} +46. [Block diagrams for 40 series instruction + format](http://freenv.svn.sourceforge.net/viewvc/freenv/doc/shaderinsnformat/bitdiagen/){.external + .text rel="nofollow"} +47. [PCI Configuration + Space](https://en.wikipedia.org/wiki/PCI_configuration_space "wikipedia:PCI configuration space"){.extiw} +48. [GPU virtual memory in WDDM + 2.0](https://learn.microsoft.com/en-us/windows-hardware/drivers/display/gpu-virtual-memory-in-wddm-2-0){.external + .text rel="nofollow"} +49. [Intel Graphics Programmer\'s Reference Manuals + (PRM)](https://01.org/linuxgraphics/documentation/hardware-specification-prms){.external + .text rel="nofollow"} +50. [i915: Hardware Contexts (and some bits about + batchbuffers)](https://bwidawsk.net/blog/2013/1/i915-hardware-contexts-and-some-bits-about-batchbuffers/){.external + .text rel="nofollow"} +51. [i915: The Global GTT Part + 1](https://bwidawsk.net/blog/2014/6/the-global-gtt-part-1/){.external + .text rel="nofollow"} +52. [i915: Aliasing PPGTT Part + 2](https://bwidawsk.net/blog/2014/6/aliasing-ppgtt-part-2/){.external + .text rel="nofollow"} +53. [i915: True PPGTT Part + 3](https://bwidawsk.net/blog/2014/7/true-ppgtt-part-3/){.external + .text rel="nofollow"} +54. [i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit + address space, GPU \"mirroring\", and yeah, something about relocs + too)](https://bwidawsk.net/blog/2014/7/future-ppgtt-part-4-dynamic-page-table-allocations-64-bit-address-space-gpu-mirroring-and-yeah-something-about-relocs-too/){.external + .text rel="nofollow"} +55. [i915: Security of the Intel Graphics Stack - Part 1 - + Introduction](https://igor-blue.github.io/2021/02/10/graphics-part1.html){.external + .text rel="nofollow"} +56. [i915: Security of the Intel Graphics Stack - Part 2 - FW \<-\> + GuC](https://igor-blue.github.io/2021/02/24/graphics-part2.html){.external + .text rel="nofollow"} +57. [A deep dive into QEMU: PCI slave + devices](https://airbus-seclab.github.io/qemu_blog/pci_slave.html){.external + .text rel="nofollow"} +58. [Debugging QEMU Guests with GDB (start & stop, examine state like + registers & memory, set breakpoints & + watchpoints)](https://qemu-project.gitlab.io/qemu/system/gdb.html){.external + .text rel="nofollow"} +59. [IOMMU + Introduction](https://terenceli.github.io/%E6%8A%80%E6%9C%AF/2019/08/04/iommu-introduction){.external + .text rel="nofollow"} +60. [Arch Wiki: Intel + Graphics](https://wiki.archlinux.org/title/intel_graphics){.external + .text rel="nofollow"} +61. [An Introduction to Intel Graphics Virtualization Technology (legacy + GVT-g) by Zhi + Wang](https://01.org/sites/default/files/documentation/an_introduction_to_intel_gvt-g_for_external.pdf){.external + .text rel="nofollow"} +62. [Kernel.org: vfio iommu type1: Add support for mediated + devices](https://patchwork.kernel.org/project/qemu-devel/patch/1478293856-8191-11-git-send-email-kwankhede@nvidia.com/){.external + .text rel="nofollow"} +63. [Hardware and Compute Abstraction Layers For Accelerated Computing + Using Graphics Hardware and Conventional + CPUs](https://archive.ll.mit.edu/HPEC/agendas/proc07/Day3/10_Hensley_Abstract.pdf){.external + .text rel="nofollow"} +64. [More Shadow Walker: The Progression of TLB-Splitting on + x86](https://www.blackhat.com/docs/us-14/materials/us-14-Torrey-MoRE-Shadow-Walker-The-Progression-Of-TLB-Splitting-On-x86.pdf){.external + .text rel="nofollow"} +65. [MMU Virtualization Via Intel EPT: Technical + Details](https://revers.engineering/mmu-ept-technical-details/){.external + .text rel="nofollow"} +66. [Alex Williamson Github: VFIO Development (tree + next)](https://github.com/awilliam/linux-vfio/tree/next){.external + .text rel="nofollow"} +67. [GPU PMU: performance monitoring with perf + event](https://events.static.linuxfound.org/slides/2011/linuxcon-japan/lcj2011_linming.pdf){.external + .text rel="nofollow"} +68. [Remote Procedure Call + (RPC)](https://book.systemsapproach.org/e2e/rpc.html){.external + .text rel="nofollow"} +69. [Virtual Open Systems: API + Remoting](http://www.virtualopensystems.com/en/products/api-remoting/){.external + .text rel="nofollow"} +70. [A Full GPU Virtualization Solution with Mediated Pass-Through by + Yiying Zhang, David Cowperthwaite, Kun Tian, and Yaozu + Dong](https://www.usenix.org/conference/atc14/technical-sessions/presentation/tian){.external + .text rel="nofollow"} - + [\[Paper\]](https://www.usenix.org/system/files/conference/atc14/atc14-paper-tian.pdf){.external + .text rel="nofollow"} - + [\[Video\]](https://www.youtube.com/watch?v=vvYmDQKZ6MQ){.external + .text rel="nofollow"} - [\[Slides + 1\]](https://www.usenix.org/sites/default/files/conference/protected-files/atc14_slides_tian.pdf){.external + .text rel="nofollow"} - [\[Slides + 2\]](https://cseweb.ucsd.edu/~yiying/cse291j-winter20/reading/GPU-Virtualization.pdf){.external + .text rel="nofollow"} +71. [\[2014\] KvmGT: A Full GPU Virtualization Solution by Jike + Song](https://www.youtube.com/watch?v=-iuIu7_GuEo){.external .text + rel="nofollow"} +72. [docs.kernel.org: DRM Memory + Management](https://docs.kernel.org/gpu/drm-mm.html){.external .text + rel="nofollow"} +73. [docs.kernel.org: PCI Bus + Subsystem](https://docs.kernel.org/PCI/index.html){.external .text + rel="nofollow"} +74. [openglbook.com: What is + OpenGL?](https://openglbook.com/chapter-0-preface-what-is-opengl.html){.external + .text rel="nofollow"} +75. [\[2020\] Getting pixels on screen: introduction to Kernel Mode + Setting (KMS) by Simon + Ser](https://yewtu.be/watch?v=haes4_Xnc5Q){.external .text + rel="nofollow"} - + [slides](https://fs.emersion.fr/protected/presentations/present.html?src=kms-foss-north/index.md#1){.external + .text rel="nofollow"} +76. [Dynamic Mediation for Live Migration + VFIO-PCI](https://sdic.sjtu.edu.cn/wp-content/uploads/2019/12/Mediated-Pass-Through-MPT-NVIDIA-vGPU.pptx){.external + .text rel="nofollow"} +77. [DRM Management Via + CGroups](https://lwn.net/Articles/746127/){.external .text + rel="nofollow"} +78. [DRM: Add GEM (\"graphics execution manager\") to i915 + driver.](https://lwn.net/Articles/292583/){.external .text + rel="nofollow"} +::: + +::: printfooter +Retrieved from +\"[https://open-iov.org/index.php?title=Virtual_I/O_Internals&oldid=23792](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html){dir="ltr"}\" +::: +::: + +::: {#catlinks .catlinks .catlinks-allhidden mw="interface"} +::: +::: +::: + +::: {#mw-navigation} +## Navigation menu + +::: {#mw-head} +### Personal tools {#p-personal-label .vector-menu-heading} + +::: vector-menu-content +- [[Log + in](https://open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+I%2FO+Internals&returntoquery=oldid%3D23792 "You are encouraged to log in; however, it is not mandatory [o]"){accesskey="o"}]{#pt-login} +::: + +::: {#left-navigation} +### Namespaces {#p-namespaces-label .vector-menu-heading} + +::: vector-menu-content +- [[Page](index.php/Virtual_I/O_Internals.html "View the content page [c]"){accesskey="c"}]{#ca-nstab-main} +- [[Discussion](https://open-iov.org/index.php?title=Talk:Virtual_I/O_Internals&action=edit&redlink=1 "Discussion about the content page (page does not exist) [t]"){rel="discussion" + accesskey="t"}]{#ca-talk} +::: + +### Variants [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-variants-label .vector-menu-heading} + +::: vector-menu-content +::: +::: + +::: {#right-navigation} +### Views {#p-views-label .vector-menu-heading} + +::: vector-menu-content +- [[Read](index.php/Virtual_I/O_Internals.html)]{#ca-view} +- [[View + source](index.php%3Ftitle=Virtual_I%252FO_Internals&action=edit.html "This page is protected. + You can view its source [e]"){accesskey="e"}]{#ca-viewsource} +- [[View + history](index.php%3Ftitle=Virtual_I%252FO_Internals&action=history.html "Past revisions of this page [h]"){accesskey="h"}]{#ca-history} +::: + +### More [expanded]{.vector-menu-checkbox-expanded} [collapsed]{.vector-menu-checkbox-collapsed} {#p-cactions-label .vector-menu-heading} + +::: vector-menu-content +::: + +::: {#p-search .vector-search-box role="search"} +
+ +### Search + +::: {#simpleSearch search-loc="header-navigation"} +::: + +
+::: +::: +::: + +::: {#mw-panel} +::: {#p-logo role="banner"} +[](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page"){.mw-wiki-logo} +::: + +### Navigation {#p-navigation-label .vector-menu-heading} + +::: vector-menu-content +- [[Main + page](images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html "Visit the main page [z]"){accesskey="z"}]{#n-mainpage-description} +- [[Recent + changes](https://open-iov.org/index.php/Special:RecentChanges "A list of recent changes in the wiki [r]"){accesskey="r"}]{#n-recentchanges} +- [[Random + page](index.php/Special:Random.html "Load a random page [x]"){accesskey="x"}]{#n-randompage} +- [[Help about + MediaWiki](https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents)]{#n-help-mediawiki} +::: + +### Tools {#p-tb-label .vector-menu-heading} + +::: vector-menu-content +- [[What links + here](index.php/Special:WhatLinksHere/Virtual_I/O_Internals.html "A list of all wiki pages that link here [j]"){accesskey="j"}]{#t-whatlinkshere} +- [[Related + changes](https://open-iov.org/index.php/Special:RecentChangesLinked/Virtual_I/O_Internals "Recent changes in pages linked from this page [k]"){rel="nofollow" + accesskey="k"}]{#t-recentchangeslinked} +- [[Special + pages](index.php/Special:SpecialPages.html "A list of all special pages [q]"){accesskey="q"}]{#t-specialpages} +- [[Printable + version](javascript:print(); "Printable version of this page [p]"){rel="alternate" + accesskey="p"}]{#t-print} +- [[Permanent + link](index.php%3Ftitle=Virtual_I%252FO_Internals&oldid=23792.html "Permanent link to this revision of the page")]{#t-permalink} +- [[Page + information](index.php%3Ftitle=Virtual_I%252FO_Internals&action=info.html "More information about this page")]{#t-info} +::: +::: +::: + +- [This page was last edited on 19 June 2023, at + 17:54.]{#footer-info-lastmod} + +```{=html} + +``` +- [[Privacy + policy](https://open-iov.org/index.php/Open-IOV:Privacy_policy "Open-IOV:Privacy policy")]{#footer-places-privacy} +- [[About + Open-IOV](index.php/Open-IOV:About.html "Open-IOV:About")]{#footer-places-about} +- [[Disclaimers](https://open-iov.org/index.php/Open-IOV:General_disclaimer "Open-IOV:General disclaimer")]{#footer-places-disclaimer} + +```{=html} + +``` +- [[![Powered by + MediaWiki](resources/assets/poweredby_mediawiki_88x31.png){srcset="resources/assets/poweredby_mediawiki_132x47.png 1.5x, resources/assets/poweredby_mediawiki_176x62.png 2x" + width="88" height="31" + loading="lazy"}](https://www.mediawiki.org/)]{#footer-poweredbyico} diff --git a/wiki/WPR-Management.md b/wiki/WPR-Management.md new file mode 100644 index 0000000..dbbe5b1 --- /dev/null +++ b/wiki/WPR-Management.md @@ -0,0 +1,288 @@ +# WPR (Write/Read Protect Region) Management + +## Overview +WPR (Write Protect Region / Read Protect Region) provides memory isolation for vGPU by protecting guest memory regions from unauthorized access. The GSP firmware implements WPR through two handlers at **0x04F00B0C** and **0x04F00C78** (62 KB each). + +## Key Addresses + +| Handler | Address | Size | Role | +|---------|---------|------|------| +| WPR Handler 1 | 0x04F00B0C | 62 KB | Primary WPR management | +| WPR Handler 2 | 0x04F00C78 | 62 KB | Secondary/timeout handling | +| String Table | 60 locations | — | Completion/timeout strings | + +## String References (60 Total) + +### Completion Events +``` +WPR_WRITE_COMPLETE 0x5E478F8 +WPR_READ_COMPLETE 0x5E478E0 +NV_WPR_WRITE_COMPLETE 0x5E478C8 +NV_WPR_READ_COMPLETE 0x5E478B0 +``` + +### Timeout Events +``` +WPR_WRITE_TIMEOUT 0x5E47898 +WPR_READ_TIMEOUT 0x5E47880 +NV_WPR_WRITE_TIMEOUT 0x5E47868 +NV_WPR_READ_TIMEOUT 0x5E47850 +``` + +## WPR State Machine + +### Handler 1: 0x04F00B0C (Primary) + +```c +typedef enum { + WPR_STATE_IDLE = 0, + WPR_STATE_WRITE_PENDING = 1, + WPR_STATE_READ_PENDING = 2, + WPR_STATE_COMPLETE = 3, + WPR_STATE_TIMEOUT = 4, + WPR_STATE_ERROR = 0xFFFF +} wpr_state_t; + +typedef struct { + uint64_t region_base; // Protected region base + uint64_t region_size; // Region size (page-aligned) + uint32_t vf_id; // Owning VF + uint32_t flags; // WPR_WRITE | WPR_READ | WPR_EXECUTE + wpr_state_t state; + uint64_t timeout_ns; // Operation timeout + void *completion_cb; // Callback on complete + void *timeout_cb; // Callback on timeout +} wpr_region_t; +``` + +### Operation Flow + +#### Write Protect +``` +1. VF requests WPR_WRITE on region [base, base+size) +2. Handler validates alignment (4KB) and permissions +3. Programs MMU/IOMMU write-protect bits +4. Starts timeout timer (configurable) +5. On GPU write attempt: + a. Trap to GSP via page fault + b. Check if VF owns region + c. If allowed: emulate write, return OK + d. If denied: trigger WPR_WRITE_COMPLETE/NV_WPR_WRITE_COMPLETE +6. On timeout: trigger WPR_WRITE_TIMEOUT/NV_WPR_WRITE_TIMEOUT +``` + +#### Read Protect +``` +1. VF requests WPR_READ on region +2. Programs MMU/IOMMU read-protect bits +3. On GPU read attempt: + a. Trap to GSP + b. Return zero/poison data or emulate + c. Trigger WPR_READ_COMPLETE/NV_WPR_READ_COMPLETE +4. On timeout: trigger WPR_READ_TIMEOUT/NV_WPR_READ_TIMEOUT +``` + +## VBIOS Parsing (Handler 2: 0x04F00C78) + +The WPR handlers parse VBIOS structures for legacy compatibility: + +```c +int parse_vbios_for_wpr(void *vbios_ptr, size_t size) { + // Search for signatures: + // 0xAA55 - Standard VBIOS signature + // 0x57464F4E ("WFON") - WPR enable + // 0x5746564E ("WFVN") - WPR version + + for (offset = 0; offset < size; offset += 0x1000) { + uint32_t sig = *(uint32_t*)(vbios_ptr + offset); + + if (sig == 0xAA55) { + // Check for WPR structures + parse_wpr_tables(vbios_ptr + offset); + } + else if (sig == 0x57464F4E || sig == 0x5746564E) { + // WPR enabled in VBIOS + wpr_vbios_enabled = true; + wpr_vbios_offset = offset; + } + } +} +``` + +## Integration with GSP Subsystems + +### Memory Allocator (0x429B450) +```c +// Allocate WPR metadata structures +wpr_region_t *wpr_alloc_region() { + return UNK_ram_058A1A9C(0x429B450, sizeof(wpr_region_t)); +} + +// Allocate bounce buffers for emulation +void *wpr_alloc_bounce(size_t size) { + return UNK_ram_058A1A9C(0x429B450, size); +} +``` + +### DMA/Copy Engine (0x0588F9C4, 0x05AEC86C) +```c +// Copy data for WPR emulation +int wpr_emulate_access(wpr_region_t *rgn, void *dst, void *src, size_t size) { + return UNK_ram_0588F9C4(dma_engine, src, dst, size); +} +``` + +### Logging (0x05AB7DA0) +```c +// Log WPR events +void wpr_log_event(const char *event_str, uint32_t vf_id, uint64_t addr) { + UNK_ram_05AB7DA0(1, &event_str); // Log string + UNK_ram_05AB7DA0(2, &vf_id); // Log VF ID + UNK_ram_05AB7DA0(3, &addr); // Log address +} +``` + +## vGPU-IO Integration + +### Kernel WPR API +```c +struct gsp_wpr_ops { + int (*protect_write)(struct gsp_device *gsp, + uint32_t vf_id, + uint64_t base, uint64_t size); + int (*protect_read)(struct gsp_device *gsp, + uint32_t vf_id, + uint64_t base, uint64_t size); + int (*unprotect)(struct gsp_device *gsp, + uint32_t vf_id, + uint64_t base); + int (*set_timeout)(struct gsp_device *gsp, + uint32_t vf_id, + uint64_t timeout_ns); + int (*register_callback)(struct gsp_device *gsp, + uint32_t vf_id, + enum wpr_event_type type, + void (*cb)(struct wpr_event *)); +}; + +static const struct gsp_wpr_ops gsp_wpr_ops = { + .protect_write = gsp_wpr_write_protect, + .protect_read = gsp_wpr_read_protect, + .unprotect = gsp_wpr_unprotect, + .set_timeout = gsp_wpr_set_timeout, + .register_callback = gsp_wpr_register_callback, +}; +``` + +### VF WPR Lifecycle +```c +// VF initialization: register WPR regions +int gsp_vf_wpr_init(struct gsp_vf *vf) { + // Protect VF's page tables + gsp_wpr_ops.protect_write(vf->gsp, vf->id, + vf->pt_base, vf->pt_size); + + // Protect VF's command buffers + gsp_wpr_ops.protect_write(vf->gsp, vf->id, + vf->cmd_base, vf->cmd_size); + + // Set default timeout (10ms) + gsp_wpr_ops.set_timeout(vf->gsp, vf->id, 10000000); + + // Register completion callbacks + gsp_wpr_ops.register_callback(vf->gsp, vf->id, + WPR_EVENT_WRITE_COMPLETE, + vf_wpr_write_complete_cb); + gsp_wpr_ops.register_callback(vf->gsp, vf->id, + WPR_EVENT_TIMEOUT, + vf_wpr_timeout_cb); + + return 0; +} + +// VF cleanup +void gsp_vf_wpr_fini(struct gsp_vf *vf) { + gsp_wpr_ops.unprotect(vf->gsp, vf->id, vf->pt_base); + gsp_wpr_ops.unprotect(vf->gsp, vf->id, vf->cmd_base); + // ... unregister callbacks +} +``` + +### Callback Handling +```c +static void vf_wpr_write_complete_cb(struct wpr_event *evt) { + struct gsp_vf *vf = evt->vf; + + // Log the write attempt + dev_dbg(vf->dev, "WPR write complete: VF=%u addr=0x%llx\n", + vf->id, evt->address); + + // If this was a page table update, invalidate TLB + if (evt->address >= vf->pt_base && + evt->address < vf->pt_base + vf->pt_size) { + gsp_tlb_invalidate(vf->gsp, vf->id); + } +} + +static void vf_wpr_timeout_cb(struct wpr_event *evt) { + struct gsp_vf *vf = evt->vf; + + dev_warn(vf->dev, "WPR timeout: VF=%u type=%d addr=0x%llx\n", + vf->id, evt->type, evt->address); + + // Escalate: reset VF or throttle + if (evt->type == WPR_EVENT_WRITE_TIMEOUT) { + gsp_vf_throttle(vf); + } else { + gsp_vf_reset(vf); + } +} +``` + +## Error Codes + +| Code | Name | Description | +|------|------|-------------| +| 0x1E | ETIME | Operation timed out | +| 0x1F | EDEV | Device error | +| 0x25 | EOVERFLOW | Region too large | +| 0x37 | EINVAL | Invalid alignment | +| 0x51 | ENOMEM | Out of memory | +| 0x56 | EBUSY | Region busy | +| 0xFFFF | EPERM | Permission denied | + +## Debugging + +### Monitor These Addresses +``` +0x04296048 : Global error flag +0x0429B750+0x111300 : Error status register +0x05E47850-0x05E478F8 : WPR string table +``` + +### GSP Log Patterns +``` +WPR_WRITE_COMPLETE VF= ADDR= +WPR_READ_COMPLETE VF= ADDR= +WPR_WRITE_TIMEOUT VF= ADDR= +WPR_READ_TIMEOUT VF= ADDR= +NV_WPR_WRITE_COMPLETE VF= ADDR= +NV_WPR_READ_COMPLETE VF= ADDR= +NV_WPR_WRITE_TIMEOUT VF= ADDR= +NV_WPR_READ_TIMEOUT VF= ADDR= +``` + +### Trace Points +```c +// In kernel driver +trace_gsp_wpr_protect(vf_id, base, size, type); +trace_gsp_wpr_event(vf_id, event_type, address, status); +trace_gsp_wpr_timeout(vf_id, address, elapsed_ns); +``` + +--- + +## Reference +- Handler 1: `FUN_ram_04f00b0c_ram_04f00b0c.c` (62 KB) +- Handler 2: `FUN_ram_04f00c78_ram_04f00c78.c` (62 KB) +- RPC Types: Handled via primary/secondary dispatchers \ No newline at end of file diff --git a/wiki/open-iov.org/api.php?action=rsd b/wiki/open-iov.org/api.php?action=rsd new file mode 100644 index 0000000..bdc15ca --- /dev/null +++ b/wiki/open-iov.org/api.php?action=rsd @@ -0,0 +1 @@ +https://www.mediawiki.org/wiki/Special:MyLanguage/APIfalseMediaWikihttps://www.mediawiki.org/https://open-iov.org/index.php/Main_Page \ No newline at end of file diff --git a/wiki/open-iov.org/favicon.ico.html b/wiki/open-iov.org/favicon.ico.html new file mode 100644 index 0000000..cd96554 --- /dev/null +++ b/wiki/open-iov.org/favicon.ico.html @@ -0,0 +1,245 @@ + + + + +Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/images/0/0b/Intel_GVT-g_Capabilities.png b/wiki/open-iov.org/images/0/0b/Intel_GVT-g_Capabilities.png new file mode 100644 index 0000000..47286fc Binary files /dev/null and b/wiki/open-iov.org/images/0/0b/Intel_GVT-g_Capabilities.png differ diff --git a/wiki/open-iov.org/images/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png b/wiki/open-iov.org/images/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png new file mode 100644 index 0000000..253ba11 Binary files /dev/null and b/wiki/open-iov.org/images/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png differ diff --git a/wiki/open-iov.org/images/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png b/wiki/open-iov.org/images/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png new file mode 100644 index 0000000..f82b8b7 Binary files /dev/null and b/wiki/open-iov.org/images/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png differ diff --git a/wiki/open-iov.org/images/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..e493b0e Binary files /dev/null and b/wiki/open-iov.org/images/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..29c31ae Binary files /dev/null and b/wiki/open-iov.org/images/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..3768cf2 Binary files /dev/null and b/wiki/open-iov.org/images/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png b/wiki/open-iov.org/images/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png new file mode 100644 index 0000000..cc067ff Binary files /dev/null and b/wiki/open-iov.org/images/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png differ diff --git a/wiki/open-iov.org/images/2/2b/Telescope_LG-Proxy.png b/wiki/open-iov.org/images/2/2b/Telescope_LG-Proxy.png new file mode 100644 index 0000000..fc8cdd8 Binary files /dev/null and b/wiki/open-iov.org/images/2/2b/Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/3/33/IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/3/33/IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..e997d9c Binary files /dev/null and b/wiki/open-iov.org/images/3/33/IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png b/wiki/open-iov.org/images/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png new file mode 100644 index 0000000..68f5d83 Binary files /dev/null and b/wiki/open-iov.org/images/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png differ diff --git a/wiki/open-iov.org/images/3/3f/Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/3/3f/Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..c6d300a Binary files /dev/null and b/wiki/open-iov.org/images/3/3f/Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..8074b5d Binary files /dev/null and b/wiki/open-iov.org/images/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..a83a0ba Binary files /dev/null and b/wiki/open-iov.org/images/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/4/43/VFIO_Diagram.png b/wiki/open-iov.org/images/4/43/VFIO_Diagram.png new file mode 100644 index 0000000..590e18e Binary files /dev/null and b/wiki/open-iov.org/images/4/43/VFIO_Diagram.png differ diff --git a/wiki/open-iov.org/images/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..9fcb196 Binary files /dev/null and b/wiki/open-iov.org/images/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/5/58/Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/5/58/Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..6271b9f Binary files /dev/null and b/wiki/open-iov.org/images/5/58/Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..8f1eeec Binary files /dev/null and b/wiki/open-iov.org/images/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/6/65/SR-IOV.png b/wiki/open-iov.org/images/6/65/SR-IOV.png new file mode 100644 index 0000000..2333e1c Binary files /dev/null and b/wiki/open-iov.org/images/6/65/SR-IOV.png differ diff --git a/wiki/open-iov.org/images/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..8fa7f31 Binary files /dev/null and b/wiki/open-iov.org/images/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/7/73/NUMA_Node.png b/wiki/open-iov.org/images/7/73/NUMA_Node.png new file mode 100644 index 0000000..27dd7eb Binary files /dev/null and b/wiki/open-iov.org/images/7/73/NUMA_Node.png differ diff --git a/wiki/open-iov.org/images/7/75/Mdev-gpu.png b/wiki/open-iov.org/images/7/75/Mdev-gpu.png new file mode 100644 index 0000000..173d183 Binary files /dev/null and b/wiki/open-iov.org/images/7/75/Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..a1240c0 Binary files /dev/null and b/wiki/open-iov.org/images/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/8/8a/KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/8/8a/KVMFR_Looking_Glass.png new file mode 100644 index 0000000..2a71153 Binary files /dev/null and b/wiki/open-iov.org/images/8/8a/KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png b/wiki/open-iov.org/images/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png new file mode 100644 index 0000000..d6bd76e Binary files /dev/null and b/wiki/open-iov.org/images/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png differ diff --git a/wiki/open-iov.org/images/9/9d/Application_Binary_Interface_(ABI).png b/wiki/open-iov.org/images/9/9d/Application_Binary_Interface_(ABI).png new file mode 100644 index 0000000..3626d86 Binary files /dev/null and b/wiki/open-iov.org/images/9/9d/Application_Binary_Interface_(ABI).png differ diff --git a/wiki/open-iov.org/images/9/9e/Vfio-pci_driver_bindings.png b/wiki/open-iov.org/images/9/9e/Vfio-pci_driver_bindings.png new file mode 100644 index 0000000..e03113e Binary files /dev/null and b/wiki/open-iov.org/images/9/9e/Vfio-pci_driver_bindings.png differ diff --git a/wiki/open-iov.org/images/a/aa/Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/a/aa/Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..9dc293d Binary files /dev/null and b/wiki/open-iov.org/images/a/aa/Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html b/wiki/open-iov.org/images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html new file mode 100644 index 0000000..01f73d3 --- /dev/null +++ b/wiki/open-iov.org/images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html @@ -0,0 +1,245 @@ + + + + +Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/images/b/b4/Virgl.png b/wiki/open-iov.org/images/b/b4/Virgl.png new file mode 100644 index 0000000..c5c937e Binary files /dev/null and b/wiki/open-iov.org/images/b/b4/Virgl.png differ diff --git a/wiki/open-iov.org/images/b/bb/Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html b/wiki/open-iov.org/images/b/bb/Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html new file mode 100644 index 0000000..b0e2bc5 --- /dev/null +++ b/wiki/open-iov.org/images/b/bb/Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html @@ -0,0 +1,245 @@ + + + + +Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/images/b/bc/Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html b/wiki/open-iov.org/images/b/bc/Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html new file mode 100644 index 0000000..2a7f544 --- /dev/null +++ b/wiki/open-iov.org/images/b/bc/Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html @@ -0,0 +1,245 @@ + + + + +Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/images/c/c2/Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/c/c2/Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..448b08a Binary files /dev/null and b/wiki/open-iov.org/images/c/c2/Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/c/c3/I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/c/c3/I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..a908118 Binary files /dev/null and b/wiki/open-iov.org/images/c/c3/I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/c/c7/VFIO-Mdev_Diagram.png b/wiki/open-iov.org/images/c/c7/VFIO-Mdev_Diagram.png new file mode 100644 index 0000000..cbafef4 Binary files /dev/null and b/wiki/open-iov.org/images/c/c7/VFIO-Mdev_Diagram.png differ diff --git a/wiki/open-iov.org/images/d/d3/IVSHMEM.png b/wiki/open-iov.org/images/d/d3/IVSHMEM.png new file mode 100644 index 0000000..c9dfe7d Binary files /dev/null and b/wiki/open-iov.org/images/d/d3/IVSHMEM.png differ diff --git a/wiki/open-iov.org/images/d/df/SR-IOV-Diagram.png b/wiki/open-iov.org/images/d/df/SR-IOV-Diagram.png new file mode 100644 index 0000000..73be6c2 Binary files /dev/null and b/wiki/open-iov.org/images/d/df/SR-IOV-Diagram.png differ diff --git a/wiki/open-iov.org/images/e/e0/Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/e/e0/Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..77096e0 Binary files /dev/null and b/wiki/open-iov.org/images/e/e0/Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..e48db2b Binary files /dev/null and b/wiki/open-iov.org/images/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..02c0c68 Binary files /dev/null and b/wiki/open-iov.org/images/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..07bbe18 Binary files /dev/null and b/wiki/open-iov.org/images/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/open-iov.png?d7807 b/wiki/open-iov.org/images/open-iov.png?d7807 new file mode 100644 index 0000000..831a489 Binary files /dev/null and b/wiki/open-iov.org/images/open-iov.png?d7807 differ diff --git a/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/120px-Intel_GVT-g_Capabilities.png b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/120px-Intel_GVT-g_Capabilities.png new file mode 100644 index 0000000..8d202b3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/120px-Intel_GVT-g_Capabilities.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/300px-Intel_GVT-g_Capabilities.png b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/300px-Intel_GVT-g_Capabilities.png new file mode 100644 index 0000000..c1c1183 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/300px-Intel_GVT-g_Capabilities.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/450px-Intel_GVT-g_Capabilities.png b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/450px-Intel_GVT-g_Capabilities.png new file mode 100644 index 0000000..cea2f59 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/450px-Intel_GVT-g_Capabilities.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/600px-Intel_GVT-g_Capabilities.png b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/600px-Intel_GVT-g_Capabilities.png new file mode 100644 index 0000000..8442a91 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/600px-Intel_GVT-g_Capabilities.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/800px-Intel_GVT-g_Capabilities.png b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/800px-Intel_GVT-g_Capabilities.png new file mode 100644 index 0000000..7d6cc7b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0b/Intel_GVT-g_Capabilities.png/800px-Intel_GVT-g_Capabilities.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/120px-Screen_Shot_2022-11-18_at_4.14.32_PM.png b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/120px-Screen_Shot_2022-11-18_at_4.14.32_PM.png new file mode 100644 index 0000000..f0dccaa Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/120px-Screen_Shot_2022-11-18_at_4.14.32_PM.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/300px-Screen_Shot_2022-11-18_at_4.14.32_PM.png b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/300px-Screen_Shot_2022-11-18_at_4.14.32_PM.png new file mode 100644 index 0000000..25e16cf Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/300px-Screen_Shot_2022-11-18_at_4.14.32_PM.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/450px-Screen_Shot_2022-11-18_at_4.14.32_PM.png b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/450px-Screen_Shot_2022-11-18_at_4.14.32_PM.png new file mode 100644 index 0000000..1262ad9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/450px-Screen_Shot_2022-11-18_at_4.14.32_PM.png differ diff --git a/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/600px-Screen_Shot_2022-11-18_at_4.14.32_PM.png b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/600px-Screen_Shot_2022-11-18_at_4.14.32_PM.png new file mode 100644 index 0000000..23a7b8f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/0/0e/Screen_Shot_2022-11-18_at_4.14.32_PM.png/600px-Screen_Shot_2022-11-18_at_4.14.32_PM.png differ diff --git a/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/120px-Screen_Shot_2022-05-06_at_10.46.59_AM.png b/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/120px-Screen_Shot_2022-05-06_at_10.46.59_AM.png new file mode 100644 index 0000000..7e659f1 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/120px-Screen_Shot_2022-05-06_at_10.46.59_AM.png differ diff --git a/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/300px-Screen_Shot_2022-05-06_at_10.46.59_AM.png b/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/300px-Screen_Shot_2022-05-06_at_10.46.59_AM.png new file mode 100644 index 0000000..7467cbf Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/300px-Screen_Shot_2022-05-06_at_10.46.59_AM.png differ diff --git a/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/450px-Screen_Shot_2022-05-06_at_10.46.59_AM.png b/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/450px-Screen_Shot_2022-05-06_at_10.46.59_AM.png new file mode 100644 index 0000000..8ce3034 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/13/Screen_Shot_2022-05-06_at_10.46.59_AM.png/450px-Screen_Shot_2022-05-06_at_10.46.59_AM.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1137px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1137px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..56e7262 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1137px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/120px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/120px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..30535c3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/120px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1516px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1516px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..460b26d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/1516px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/300px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/300px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..061af94 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/300px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/450px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/450px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..59799b7 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/450px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/600px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/600px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..1db093a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/600px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/758px-Type_1_IOMMU_Tracks_VA-GFN.png b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/758px-Type_1_IOMMU_Tracks_VA-GFN.png new file mode 100644 index 0000000..49286a8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/1/1d/Type_1_IOMMU_Tracks_VA-GFN.png/758px-Type_1_IOMMU_Tracks_VA-GFN.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1139px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1139px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..ff144f9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1139px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/120px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/120px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..6ad263a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/120px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1518px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1518px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..adbafe8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/1518px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/300px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/300px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..6e73d7c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/300px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/450px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/450px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..044757c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/450px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/600px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/600px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..c035033 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/600px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/759px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/759px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png new file mode 100644 index 0000000..c0de43d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/21/QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png/759px-QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1148px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1148px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..e20308f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1148px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/120px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/120px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..19b6ed5 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/120px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1530px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1530px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..845d1f3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/1530px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/300px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/300px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..49965ac Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/300px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/450px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/450px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..836ced2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/450px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/600px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/600px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..8d9c5c6 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/600px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/765px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/765px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png new file mode 100644 index 0000000..dade2e9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/27/QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png/765px-QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/293px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/293px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png new file mode 100644 index 0000000..d6c0deb Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/293px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png differ diff --git a/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/300px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/300px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png new file mode 100644 index 0000000..72e2eb9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/300px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png differ diff --git a/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/440px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/440px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png new file mode 100644 index 0000000..9f62eee Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/440px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png differ diff --git a/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/450px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/450px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png new file mode 100644 index 0000000..bc8622a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/450px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png differ diff --git a/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/58px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/58px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png new file mode 100644 index 0000000..13e7fcb Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/28/Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png/58px-Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1200px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1200px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..f04e23d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1200px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/120px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/120px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..82bbecf Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/120px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1599px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1599px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..ad09874 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/1599px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/300px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/300px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..6e2a81e Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/300px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/450px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/450px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..76478e0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/450px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/600px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/600px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..6860c17 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/600px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/800px-Telescope_LG-Proxy.png b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/800px-Telescope_LG-Proxy.png new file mode 100644 index 0000000..1e928e4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/2/2b/Telescope_LG-Proxy.png/800px-Telescope_LG-Proxy.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1115px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1115px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..f39aa8f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1115px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/120px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/120px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..8d63c4d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/120px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1486px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1486px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..5407f85 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/1486px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/300px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/300px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..decacf8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/300px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/450px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/450px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..4eb4833 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/450px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/600px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/600px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..c020b2a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/600px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/743px-IOCTL_set_VFIO_container.png b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/743px-IOCTL_set_VFIO_container.png new file mode 100644 index 0000000..1814e5b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/33/IOCTL_set_VFIO_container.png/743px-IOCTL_set_VFIO_container.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/120px-Intel_i915_Host_DRM_+_VFIO-Mdev..png b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/120px-Intel_i915_Host_DRM_+_VFIO-Mdev..png new file mode 100644 index 0000000..4b22f31 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/120px-Intel_i915_Host_DRM_+_VFIO-Mdev..png differ diff --git a/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/300px-Intel_i915_Host_DRM_+_VFIO-Mdev..png b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/300px-Intel_i915_Host_DRM_+_VFIO-Mdev..png new file mode 100644 index 0000000..cb43678 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/300px-Intel_i915_Host_DRM_+_VFIO-Mdev..png differ diff --git a/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/450px-Intel_i915_Host_DRM_+_VFIO-Mdev..png b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/450px-Intel_i915_Host_DRM_+_VFIO-Mdev..png new file mode 100644 index 0000000..39bf097 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/450px-Intel_i915_Host_DRM_+_VFIO-Mdev..png differ diff --git a/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/600px-Intel_i915_Host_DRM_+_VFIO-Mdev..png b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/600px-Intel_i915_Host_DRM_+_VFIO-Mdev..png new file mode 100644 index 0000000..19615e7 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/600px-Intel_i915_Host_DRM_+_VFIO-Mdev..png differ diff --git a/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/800px-Intel_i915_Host_DRM_+_VFIO-Mdev..png b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/800px-Intel_i915_Host_DRM_+_VFIO-Mdev..png new file mode 100644 index 0000000..3120163 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3d/Intel_i915_Host_DRM_+_VFIO-Mdev..png/800px-Intel_i915_Host_DRM_+_VFIO-Mdev..png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1200px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1200px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..02b80a1 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1200px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/120px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/120px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..f8093e8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/120px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1600px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1600px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..5f1a3ce Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/1600px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/300px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/300px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..d5335c0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/300px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/450px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/450px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..1b63bf3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/450px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/600px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/600px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..f591fa4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/600px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/800px-Ioctl-VFIO_GROUP_GET_FD.png b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/800px-Ioctl-VFIO_GROUP_GET_FD.png new file mode 100644 index 0000000..1fddf71 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/3/3f/Ioctl-VFIO_GROUP_GET_FD.png/800px-Ioctl-VFIO_GROUP_GET_FD.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1200px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1200px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..10ebeb7 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1200px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/120px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/120px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..7e7f1ef Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/120px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1599px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1599px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..6b5a798 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/1599px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/300px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/300px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..7b201ef Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/300px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/450px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/450px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..0e4f2a6 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/450px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/600px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/600px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..29aa9b3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/600px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/800px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/800px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png new file mode 100644 index 0000000..e6e4749 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/40/Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png/800px-Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1148px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1148px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..2082d13 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1148px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/120px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/120px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..052b47c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/120px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1529px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1529px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..fc4364a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/1529px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/300px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/300px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..5ef3349 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/300px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/450px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/450px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..f4f34fc Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/450px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/600px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/600px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..5709925 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/600px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/765px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/765px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png new file mode 100644 index 0000000..a3dc198 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png/765px-KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/300px-VFIO_Diagram.png b/wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/300px-VFIO_Diagram.png new file mode 100644 index 0000000..36d2f7f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/300px-VFIO_Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/91px-VFIO_Diagram.png b/wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/91px-VFIO_Diagram.png new file mode 100644 index 0000000..2bd807b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/43/VFIO_Diagram.png/91px-VFIO_Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/1005px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/1005px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..42778bf Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/1005px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/120px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/120px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..9c5a16f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/120px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/300px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/300px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..22b4d50 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/300px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/450px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/450px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..98c5cea Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/450px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/600px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/600px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..f4fda7d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/600px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/670px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/670px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png new file mode 100644 index 0000000..e86ada2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/4/48/Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png/670px-Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1200px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1200px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..c67aadf Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1200px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/120px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/120px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..50f371f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/120px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1600px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1600px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..0ac6690 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/1600px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/300px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/300px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..bf13123 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/300px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/450px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/450px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..4cdd163 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/450px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/600px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/600px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..7421866 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/600px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/800px-Memory_Regions_Added_by_QEMU.png b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/800px-Memory_Regions_Added_by_QEMU.png new file mode 100644 index 0000000..20878b0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/5/58/Memory_Regions_Added_by_QEMU.png/800px-Memory_Regions_Added_by_QEMU.png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1166px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1166px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..fc7ebcb Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1166px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/120px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/120px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..cdfbaae Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/120px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1554px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1554px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..0af9312 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/1554px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/300px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/300px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..240e9ab Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/300px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/450px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/450px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..b6d4176 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/450px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/600px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/600px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..55da5f8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/600px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/777px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/777px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png new file mode 100644 index 0000000..f917271 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/63/QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png/777px-QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png differ diff --git a/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/120px-SR-IOV.png b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/120px-SR-IOV.png new file mode 100644 index 0000000..07b89a5 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/120px-SR-IOV.png differ diff --git a/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/300px-SR-IOV.png b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/300px-SR-IOV.png new file mode 100644 index 0000000..02cc1b9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/300px-SR-IOV.png differ diff --git a/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/450px-SR-IOV.png b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/450px-SR-IOV.png new file mode 100644 index 0000000..565cb57 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/450px-SR-IOV.png differ diff --git a/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/600px-SR-IOV.png b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/600px-SR-IOV.png new file mode 100644 index 0000000..0a7be78 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/600px-SR-IOV.png differ diff --git a/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/754px-SR-IOV.png b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/754px-SR-IOV.png new file mode 100644 index 0000000..2485e7d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/65/SR-IOV.png/754px-SR-IOV.png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1200px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1200px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..8a1490f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1200px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/120px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/120px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..9987d5b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/120px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1600px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1600px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..7b0f690 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/1600px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/300px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/300px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..e7f6db4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/300px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/450px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/450px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..040c72b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/450px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/600px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/600px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..1a2e103 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/600px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/800px-Figure_0-_Approches_to_GPU_Virtualization..png b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/800px-Figure_0-_Approches_to_GPU_Virtualization..png new file mode 100644 index 0000000..d79f507 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/6/6a/Figure_0-_Approches_to_GPU_Virtualization..png/800px-Figure_0-_Approches_to_GPU_Virtualization..png differ diff --git a/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/120px-NUMA_Node.png b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/120px-NUMA_Node.png new file mode 100644 index 0000000..097c71d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/120px-NUMA_Node.png differ diff --git a/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/300px-NUMA_Node.png b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/300px-NUMA_Node.png new file mode 100644 index 0000000..a6ed90d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/300px-NUMA_Node.png differ diff --git a/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/450px-NUMA_Node.png b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/450px-NUMA_Node.png new file mode 100644 index 0000000..9200f55 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/450px-NUMA_Node.png differ diff --git a/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/600px-NUMA_Node.png b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/600px-NUMA_Node.png new file mode 100644 index 0000000..e610524 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/73/NUMA_Node.png/600px-NUMA_Node.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1200px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1200px-Mdev-gpu.png new file mode 100644 index 0000000..c9d336a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1200px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/120px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/120px-Mdev-gpu.png new file mode 100644 index 0000000..89b4b62 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/120px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1600px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1600px-Mdev-gpu.png new file mode 100644 index 0000000..f7846ab Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/1600px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/300px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/300px-Mdev-gpu.png new file mode 100644 index 0000000..b1f0897 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/300px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/450px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/450px-Mdev-gpu.png new file mode 100644 index 0000000..b6a2030 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/450px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/600px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/600px-Mdev-gpu.png new file mode 100644 index 0000000..482f02c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/600px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/800px-Mdev-gpu.png b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/800px-Mdev-gpu.png new file mode 100644 index 0000000..fe65614 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/75/Mdev-gpu.png/800px-Mdev-gpu.png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1155px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1155px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..602c4be Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1155px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/120px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/120px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..0082235 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/120px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1539px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1539px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..f69495d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/1539px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/300px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/300px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..0a521f5 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/300px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/450px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/450px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..e86a432 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/450px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/600px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/600px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..3b6c820 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/600px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/770px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/770px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png new file mode 100644 index 0000000..c19ea45 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/7/7c/QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png/770px-QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png differ diff --git a/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/1200px-KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/1200px-KVMFR_Looking_Glass.png new file mode 100644 index 0000000..0a4afe9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/1200px-KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/120px-KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/120px-KVMFR_Looking_Glass.png new file mode 100644 index 0000000..30aaf6c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/120px-KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/300px-KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/300px-KVMFR_Looking_Glass.png new file mode 100644 index 0000000..154335b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/300px-KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/450px-KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/450px-KVMFR_Looking_Glass.png new file mode 100644 index 0000000..062bfda Binary files /dev/null and b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/450px-KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/600px-KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/600px-KVMFR_Looking_Glass.png new file mode 100644 index 0000000..4e7588e Binary files /dev/null and b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/600px-KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/800px-KVMFR_Looking_Glass.png b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/800px-KVMFR_Looking_Glass.png new file mode 100644 index 0000000..4c854c5 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/8/8a/KVMFR_Looking_Glass.png/800px-KVMFR_Looking_Glass.png differ diff --git a/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/120px-Device_Decomposure_and_Recomposure_via_VFIO.png b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/120px-Device_Decomposure_and_Recomposure_via_VFIO.png new file mode 100644 index 0000000..c5932c0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/120px-Device_Decomposure_and_Recomposure_via_VFIO.png differ diff --git a/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/300px-Device_Decomposure_and_Recomposure_via_VFIO.png b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/300px-Device_Decomposure_and_Recomposure_via_VFIO.png new file mode 100644 index 0000000..11076d3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/300px-Device_Decomposure_and_Recomposure_via_VFIO.png differ diff --git a/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/450px-Device_Decomposure_and_Recomposure_via_VFIO.png b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/450px-Device_Decomposure_and_Recomposure_via_VFIO.png new file mode 100644 index 0000000..ff7a8e9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/450px-Device_Decomposure_and_Recomposure_via_VFIO.png differ diff --git a/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/600px-Device_Decomposure_and_Recomposure_via_VFIO.png b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/600px-Device_Decomposure_and_Recomposure_via_VFIO.png new file mode 100644 index 0000000..d7efc37 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/600px-Device_Decomposure_and_Recomposure_via_VFIO.png differ diff --git a/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/800px-Device_Decomposure_and_Recomposure_via_VFIO.png b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/800px-Device_Decomposure_and_Recomposure_via_VFIO.png new file mode 100644 index 0000000..b09cd6f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/90/Device_Decomposure_and_Recomposure_via_VFIO.png/800px-Device_Decomposure_and_Recomposure_via_VFIO.png differ diff --git a/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/120px-Application_Binary_Interface_(ABI).png b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/120px-Application_Binary_Interface_(ABI).png new file mode 100644 index 0000000..f1de937 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/120px-Application_Binary_Interface_(ABI).png differ diff --git a/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/300px-Application_Binary_Interface_(ABI).png b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/300px-Application_Binary_Interface_(ABI).png new file mode 100644 index 0000000..13c269f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/300px-Application_Binary_Interface_(ABI).png differ diff --git a/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/450px-Application_Binary_Interface_(ABI).png b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/450px-Application_Binary_Interface_(ABI).png new file mode 100644 index 0000000..ac84fdd Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/450px-Application_Binary_Interface_(ABI).png differ diff --git a/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/600px-Application_Binary_Interface_(ABI).png b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/600px-Application_Binary_Interface_(ABI).png new file mode 100644 index 0000000..986e80d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9d/Application_Binary_Interface_(ABI).png/600px-Application_Binary_Interface_(ABI).png differ diff --git a/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/120px-Vfio-pci_driver_bindings.png b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/120px-Vfio-pci_driver_bindings.png new file mode 100644 index 0000000..4d0baa0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/120px-Vfio-pci_driver_bindings.png differ diff --git a/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/300px-Vfio-pci_driver_bindings.png b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/300px-Vfio-pci_driver_bindings.png new file mode 100644 index 0000000..996393e Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/300px-Vfio-pci_driver_bindings.png differ diff --git a/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/450px-Vfio-pci_driver_bindings.png b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/450px-Vfio-pci_driver_bindings.png new file mode 100644 index 0000000..96e8a16 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/450px-Vfio-pci_driver_bindings.png differ diff --git a/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/600px-Vfio-pci_driver_bindings.png b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/600px-Vfio-pci_driver_bindings.png new file mode 100644 index 0000000..693acd2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/600px-Vfio-pci_driver_bindings.png differ diff --git a/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/800px-Vfio-pci_driver_bindings.png b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/800px-Vfio-pci_driver_bindings.png new file mode 100644 index 0000000..114657a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/9/9e/Vfio-pci_driver_bindings.png/800px-Vfio-pci_driver_bindings.png differ diff --git a/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/1200px-Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/1200px-Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..c1bb5bb Binary files /dev/null and b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/1200px-Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/120px-Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/120px-Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..ace89f0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/120px-Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/300px-Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/300px-Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..01a7bec Binary files /dev/null and b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/300px-Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/450px-Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/450px-Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..e20569a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/450px-Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/600px-Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/600px-Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..51f3388 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/600px-Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/800px-Ioeventfd-and-irqfd.png b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/800px-Ioeventfd-and-irqfd.png new file mode 100644 index 0000000..2c04ea0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/a/aa/Ioeventfd-and-irqfd.png/800px-Ioeventfd-and-irqfd.png differ diff --git a/wiki/open-iov.org/images/thumb/b/b4/Virgl.png/300px-Virgl.png b/wiki/open-iov.org/images/thumb/b/b4/Virgl.png/300px-Virgl.png new file mode 100644 index 0000000..c6591c3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/b/b4/Virgl.png/300px-Virgl.png differ diff --git a/wiki/open-iov.org/images/thumb/b/b4/Virgl.png/90px-Virgl.png b/wiki/open-iov.org/images/thumb/b/b4/Virgl.png/90px-Virgl.png new file mode 100644 index 0000000..0069cdc Binary files /dev/null and b/wiki/open-iov.org/images/thumb/b/b4/Virgl.png/90px-Virgl.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/1191px-Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/1191px-Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..573de6c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/1191px-Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/120px-Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/120px-Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..ed142f2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/120px-Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/300px-Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/300px-Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..f588fbd Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/300px-Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/450px-Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/450px-Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..4d6cb61 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/450px-Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/600px-Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/600px-Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..9fff45c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/600px-Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/794px-Figure_0-_i915_vGPU_Scheduling.png b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/794px-Figure_0-_i915_vGPU_Scheduling.png new file mode 100644 index 0000000..271ab3a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c2/Figure_0-_i915_vGPU_Scheduling.png/794px-Figure_0-_i915_vGPU_Scheduling.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/1162px-I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/1162px-I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..c457ff6 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/1162px-I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/120px-I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/120px-I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..6c28330 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/120px-I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/300px-I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/300px-I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..929d5e2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/300px-I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/450px-I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/450px-I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..1a0237c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/450px-I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/600px-I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/600px-I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..a82494a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/600px-I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/775px-I915_Scheduling_Events_and_Requests.png b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/775px-I915_Scheduling_Events_and_Requests.png new file mode 100644 index 0000000..6865ea5 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c3/I915_Scheduling_Events_and_Requests.png/775px-I915_Scheduling_Events_and_Requests.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/300px-VFIO-Mdev_Diagram.png b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/300px-VFIO-Mdev_Diagram.png new file mode 100644 index 0000000..7d72429 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/300px-VFIO-Mdev_Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/450px-VFIO-Mdev_Diagram.png b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/450px-VFIO-Mdev_Diagram.png new file mode 100644 index 0000000..5731910 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/450px-VFIO-Mdev_Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/453px-VFIO-Mdev_Diagram.png b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/453px-VFIO-Mdev_Diagram.png new file mode 100644 index 0000000..b3617ef Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/453px-VFIO-Mdev_Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/91px-VFIO-Mdev_Diagram.png b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/91px-VFIO-Mdev_Diagram.png new file mode 100644 index 0000000..9848308 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/c/c7/VFIO-Mdev_Diagram.png/91px-VFIO-Mdev_Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/120px-IVSHMEM.png b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/120px-IVSHMEM.png new file mode 100644 index 0000000..09277c0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/120px-IVSHMEM.png differ diff --git a/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/300px-IVSHMEM.png b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/300px-IVSHMEM.png new file mode 100644 index 0000000..53f40a8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/300px-IVSHMEM.png differ diff --git a/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/450px-IVSHMEM.png b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/450px-IVSHMEM.png new file mode 100644 index 0000000..40274a1 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/450px-IVSHMEM.png differ diff --git a/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/600px-IVSHMEM.png b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/600px-IVSHMEM.png new file mode 100644 index 0000000..89bf0f2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/600px-IVSHMEM.png differ diff --git a/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/800px-IVSHMEM.png b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/800px-IVSHMEM.png new file mode 100644 index 0000000..857421a Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/d3/IVSHMEM.png/800px-IVSHMEM.png differ diff --git a/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/120px-SR-IOV-Diagram.png b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/120px-SR-IOV-Diagram.png new file mode 100644 index 0000000..2505afa Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/120px-SR-IOV-Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/300px-SR-IOV-Diagram.png b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/300px-SR-IOV-Diagram.png new file mode 100644 index 0000000..0a296a3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/300px-SR-IOV-Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/450px-SR-IOV-Diagram.png b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/450px-SR-IOV-Diagram.png new file mode 100644 index 0000000..526fd06 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/450px-SR-IOV-Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/600px-SR-IOV-Diagram.png b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/600px-SR-IOV-Diagram.png new file mode 100644 index 0000000..cd1164f Binary files /dev/null and b/wiki/open-iov.org/images/thumb/d/df/SR-IOV-Diagram.png/600px-SR-IOV-Diagram.png differ diff --git a/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/1160px-Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/1160px-Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..bdb00b0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/1160px-Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/120px-Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/120px-Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..e5743d7 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/120px-Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/300px-Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/300px-Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..620950e Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/300px-Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/450px-Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/450px-Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..3d33600 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/450px-Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/600px-Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/600px-Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..3934f8c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/600px-Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/773px-Figure_2-_Intel_vGPU_Scheduler.png b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/773px-Figure_2-_Intel_vGPU_Scheduler.png new file mode 100644 index 0000000..23f949c Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/e0/Figure_2-_Intel_vGPU_Scheduler.png/773px-Figure_2-_Intel_vGPU_Scheduler.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1149px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1149px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..994801d Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1149px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/120px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/120px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..eab18f9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/120px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1532px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1532px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..4a5c9d8 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/1532px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/300px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/300px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..01023be Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/300px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/450px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/450px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..9383c60 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/450px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/600px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/600px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..0ce2dc4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/600px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/766px-Echoing_a_UUID_into_the_sysfsdev_API.png b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/766px-Echoing_a_UUID_into_the_sysfsdev_API.png new file mode 100644 index 0000000..33e5a21 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/e/ef/Echoing_a_UUID_into_the_sysfsdev_API.png/766px-Echoing_a_UUID_into_the_sysfsdev_API.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1145px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1145px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..ea4b5a4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1145px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/120px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/120px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..d001922 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/120px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1526px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1526px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..594312b Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/1526px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/300px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/300px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..beca0a0 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/300px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/450px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/450px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..bfb7ff4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/450px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/600px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/600px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..e66ecc3 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/600px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/763px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/763px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png new file mode 100644 index 0000000..67ff9aa Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fa/QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png/763px-QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1196px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1196px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..ce293cc Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1196px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/120px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/120px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..f4949b2 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/120px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1594px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1594px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..beb13b9 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/1594px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/300px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/300px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..2ddbdd4 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/300px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/450px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/450px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..1079033 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/450px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/600px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/600px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..3374792 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/600px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/797px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/797px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png new file mode 100644 index 0000000..401d4b5 Binary files /dev/null and b/wiki/open-iov.org/images/thumb/f/fd/Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png/797px-Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png differ diff --git a/wiki/open-iov.org/index.html b/wiki/open-iov.org/index.html new file mode 100644 index 0000000..b5edd43 --- /dev/null +++ b/wiki/open-iov.org/index.html @@ -0,0 +1,245 @@ + + + + +Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/AMDGPU.html b/wiki/open-iov.org/index.php/AMDGPU.html new file mode 100644 index 0000000..47c05f6 --- /dev/null +++ b/wiki/open-iov.org/index.php/AMDGPU.html @@ -0,0 +1,220 @@ + + + + +AMDGPU - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

AMDGPU

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

The AMDGPU driver is AMD's open source GPU driver which comes included with the Linux kernel.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

This software's source code can be viewed here. +


+

This Open-IOV page should aim to provide similar insights about APIs exposed to Linux developers to those documented on the OpenRM Driver API page. +


+This page may provide some of the required information from which details immediately relevant to graphics mediation can be consolidated: +

https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Articles.html b/wiki/open-iov.org/index.php/Articles.html new file mode 100644 index 0000000..92bb44d --- /dev/null +++ b/wiki/open-iov.org/index.php/Articles.html @@ -0,0 +1,323 @@ + + + + +Articles - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Articles

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This page indexes the articles contained within Open-IOV. +

If you're new to GPU Virtualization start by reading the Introduction article. +

+ + +

Start Here

+

Introduction +

About Open-IOV (CC-BY-4.0) +

+

Abstract

+

Glossary +

Virtualization Fundamentals +

Merged Drivers +

+

Design Documents

+

Virtual I/O Internals +

GPU Driver Internals +

+

Driver Integration Documents

+

Nvidia +

Intel +

AMD +

+

Projects

+

LIME Is Mediated Emulation +

Looking Glass +

OpenXT +

OpenXT: vGlass +

OpenXT: Surfman (legacy DRM) +

Bromium/uXen +

Xen Project +

Qubes OS +

Intel Celadon +

vGPU_Unlock +

+

Device Support

+

GPU Support +

CPU Support +

GPU Firmware +

+

Software Support

+

Hypervisor Support +

GPU Software Bill Of Materials (SBOM) +

+

API Documentation

+

Kernel APIs

+

Kernel.org Driver Core Documentation +

NT Kernel (Windows) IOMMU-based GPU Isolation +

VFIO - vfio.h - mdev.h +

VFIO Mediated Device +

+

Driver APIs

+

i915 GVT-g API +

Nouveau Tools & API +

+

Sample Code

+

GPLv2 sources mirrored from elixir.bootlin.com with simple makefile changes. +

mtty.c - mdpy.c - mdpy-fb.c - mdpy-defs.h - mbochs.c +

+

Virtualization APIs

+

GVM/Mdev-CLI API +

QEMU Machine Protocol (QMP) Reference Manual +

Inter-VM Shared Memory (IVSHMEM) +

+

User Guides

+

Setup Guide +

Looking Glass Quickstart Guide +

Intel GVT-g Setup Guide +

AMD GPU-IOV Module Docs +

PCI passthrough via OVMF +

RedHat Virtualization Guide +

+

Developer Guides

+

Hypervisor From Scratch +

Linux Device Drivers (3rd Edition) +

GPU Driver Developer's Guide +

How To Write PCI Drivers +

Data Plane Development Kit: IVSHMEM Programming Guide +

+

Specifications

+

Hyper-V Hypervisor Top Level Functional Specification (TLFS) +

+

Communities & Mailing Lists

+

Open-IOV Discord +

Intel-gfx Mailing List +

Nouveau Mailing List +

AMD-gfx Mailing List +

VFIO-users Mailing List +

Level1Techs Forum [VFIO Topic] +

VFIO Subreddit +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/CPU_Support.html b/wiki/open-iov.org/index.php/CPU_Support.html new file mode 100644 index 0000000..9ba71c7 --- /dev/null +++ b/wiki/open-iov.org/index.php/CPU_Support.html @@ -0,0 +1,233 @@ + + + + +CPU Support - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

CPU Support

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

In order to use mediated device functionality you may need to set some or all of the following settings in your machine's UEFI.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

UEFI Setup

+

Intel CPUs (VT-d)

+

Optimal UEFI Settings +

IOMMU >> Enabled +

SR-IOV Support >> Enabled +

VT-x >> Enabled +

ARI Mode >> Enabled +

+

AMD CPUs (AMD-v)

+

Optimal UEFI Settings +

SVM Mode >> Enabled +

SR-IOV Support >> Enabled +

ACS Enable >> Enabled +

IOMMU >> Enabled +

PCI AER Support >> Enabled +

ACS Enable >> Enabled +

ARI Mode >> Enabled +

Note to AMD CPU users: If you are using a first generation Ryzen or ThreadRipper platform you may need to update your motherboard UEFI to make proper use of IOMMU Groups. If your motherboard manufacturer has not made an update available you may need to apply an ACS override patch. Successive AMD CPU platforms are unaffected. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Application_Binary_Interface_(ABI).png.html b/wiki/open-iov.org/index.php/File:Application_Binary_Interface_(ABI).png.html new file mode 100644 index 0000000..9f22574 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Application_Binary_Interface_(ABI).png.html @@ -0,0 +1,233 @@ + + + + +File:Application Binary Interface (ABI).png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Application Binary Interface (ABI).png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Application_Binary_Interface_(ABI).png ‎(800 × 600 pixels, file size: 146 KB, MIME type: image/png) +

Application Binary Interface (ABI) +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:47, 18 December 2021Thumbnail for version as of 00:47, 18 December 2021800 × 600 (146 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html b/wiki/open-iov.org/index.php/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html new file mode 100644 index 0000000..9594212 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html @@ -0,0 +1,233 @@ + + + + +File:Device Decomposure and Recomposure via VFIO.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Device Decomposure and Recomposure via VFIO.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,135 × 558 pixels, file size: 60 KB, MIME type: image/png) +

Device Decomposure and Recomposure via VFIO +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current15:06, 6 May 2022Thumbnail for version as of 15:06, 6 May 20221,135 × 558 (60 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html b/wiki/open-iov.org/index.php/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html new file mode 100644 index 0000000..8c55e74 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html @@ -0,0 +1,233 @@ + + + + +File:Echoing a UUID into the sysfsdev API.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Echoing a UUID into the sysfsdev API.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,717 × 1,344 pixels, file size: 56 KB, MIME type: image/png) +

Echoing a UUID into the sysfsdev API +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current16:20, 24 May 2022Thumbnail for version as of 16:20, 24 May 20221,717 × 1,344 (56 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_0-_Approches_to_GPU_Virtualization..png.html b/wiki/open-iov.org/index.php/File:Figure_0-_Approches_to_GPU_Virtualization..png.html new file mode 100644 index 0000000..06609ea --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_0-_Approches_to_GPU_Virtualization..png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 0- Approches to GPU Virtualization..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 0- Approches to GPU Virtualization..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,910 × 976 pixels, file size: 230 KB, MIME type: image/png) +

Figure 0: Approches to GPU Virtualization. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current22:11, 12 December 2022Thumbnail for version as of 22:11, 12 December 20221,910 × 976 (230 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_0-_i915_vGPU_Scheduling.png.html b/wiki/open-iov.org/index.php/File:Figure_0-_i915_vGPU_Scheduling.png.html new file mode 100644 index 0000000..d44ef0a --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_0-_i915_vGPU_Scheduling.png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 0- i915 vGPU Scheduling.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 0- i915 vGPU Scheduling.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,460 × 1,103 pixels, file size: 48 KB, MIME type: image/png) +

Figure 0: i915 vGPU Scheduling +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current16:57, 14 December 2022Thumbnail for version as of 16:57, 14 December 20221,460 × 1,103 (48 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html b/wiki/open-iov.org/index.php/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html new file mode 100644 index 0000000..2421c20 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 2- Firmware status information for an Intel DG2 device..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 2- Firmware status information for an Intel DG2 device..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(461 × 942 pixels, file size: 136 KB, MIME type: image/png) +

Figure 2: Firmware status information for an Intel DG2 device. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current16:51, 23 November 2022Thumbnail for version as of 16:51, 23 November 2022461 × 942 (136 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_2-_Intel_vGPU_Scheduler.png.html b/wiki/open-iov.org/index.php/File:Figure_2-_Intel_vGPU_Scheduler.png.html new file mode 100644 index 0000000..4cc2332 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_2-_Intel_vGPU_Scheduler.png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 2- Intel vGPU Scheduler.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 2- Intel vGPU Scheduler.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,384 × 1,073 pixels, file size: 49 KB, MIME type: image/png) +

Figure 2: Intel vGPU Scheduler +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current17:52, 20 December 2022Thumbnail for version as of 17:52, 20 December 20221,384 × 1,073 (49 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html b/wiki/open-iov.org/index.php/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html new file mode 100644 index 0000000..af07ceb --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,843 × 1,387 pixels, file size: 67 KB, MIME type: image/png) +

Figure 3: GPU BAR to Timeshared Syhededuling via Channel IO +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current22:10, 3 January 2023Thumbnail for version as of 22:10, 3 January 20231,843 × 1,387 (67 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html b/wiki/open-iov.org/index.php/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html new file mode 100644 index 0000000..e235764 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 6- MMU - GMMU IOVA translation-isolation..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 6- MMU - GMMU IOVA translation-isolation..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(822 × 753 pixels, file size: 66 KB, MIME type: image/png) +

Figure 6: MMU - GMMU IOVA translation/isolation. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:18, 6 May 2022
Error creating thumbnail: File missing
822 × 753 (66 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html b/wiki/open-iov.org/index.php/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html new file mode 100644 index 0000000..aa37406 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html @@ -0,0 +1,233 @@ + + + + +File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,072 × 959 pixels, file size: 102 KB, MIME type: image/png) +

Figure 7: A depiction of region overlays within a VFIO file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current15:36, 11 May 2022Thumbnail for version as of 15:36, 11 May 20221,072 × 959 (102 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html b/wiki/open-iov.org/index.php/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html new file mode 100644 index 0000000..df32b0a --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html @@ -0,0 +1,233 @@ + + + + +File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,688 × 1,338 pixels, file size: 56 KB, MIME type: image/png) +

Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:55, 24 May 2022
Error creating thumbnail: File missing
1,688 × 1,338 (56 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:I915_Scheduling_Events_and_Requests.png.html b/wiki/open-iov.org/index.php/File:I915_Scheduling_Events_and_Requests.png.html new file mode 100644 index 0000000..8bff5fe --- /dev/null +++ b/wiki/open-iov.org/index.php/File:I915_Scheduling_Events_and_Requests.png.html @@ -0,0 +1,234 @@ + + + + +File:I915 Scheduling Events and Requests.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:I915 Scheduling Events and Requests.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,280 × 990 pixels, file size: 38 KB, MIME type: image/png) +

I915 Scheduling Events and Requests +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + + +
Date/TimeThumbnailDimensionsUserComment
current19:36, 14 December 2022Thumbnail for version as of 19:36, 14 December 20221,280 × 990 (38 KB)Arthur (talk | contribs)
19:33, 14 December 2022
Error creating thumbnail: File missing
1,264 × 987 (37 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:IOCTL_set_VFIO_container.png.html b/wiki/open-iov.org/index.php/File:IOCTL_set_VFIO_container.png.html new file mode 100644 index 0000000..fdf5e3f --- /dev/null +++ b/wiki/open-iov.org/index.php/File:IOCTL_set_VFIO_container.png.html @@ -0,0 +1,233 @@ + + + + +File:IOCTL set VFIO container.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:IOCTL set VFIO container.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,722 × 1,390 pixels, file size: 113 KB, MIME type: image/png) +

Placing a VFIO binding into a VFIO Container. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:37, 26 April 2022Thumbnail for version as of 18:37, 26 April 20221,722 × 1,390 (113 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:IVSHMEM.png.html b/wiki/open-iov.org/index.php/File:IVSHMEM.png.html new file mode 100644 index 0000000..664339d --- /dev/null +++ b/wiki/open-iov.org/index.php/File:IVSHMEM.png.html @@ -0,0 +1,233 @@ + + + + +File:IVSHMEM.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:IVSHMEM.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(834 × 564 pixels, file size: 29 KB, MIME type: image/png) +

IVSHMEM +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:45, 18 December 2021Thumbnail for version as of 00:45, 18 December 2021834 × 564 (29 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Intel_GVT-g_Capabilities.png.html b/wiki/open-iov.org/index.php/File:Intel_GVT-g_Capabilities.png.html new file mode 100644 index 0000000..e04d093 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Intel_GVT-g_Capabilities.png.html @@ -0,0 +1,233 @@ + + + + +File:Intel GVT-g Capabilities.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Intel GVT-g Capabilities.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(958 × 717 pixels, file size: 175 KB, MIME type: image/png) +

"Accelerate up to 8 VMs plus DOM0." +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:20, 20 December 2021Thumbnail for version as of 18:20, 20 December 2021958 × 717 (175 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html b/wiki/open-iov.org/index.php/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html new file mode 100644 index 0000000..72dfbda --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html @@ -0,0 +1,233 @@ + + + + +File:Intel i915 Host DRM + VFIO-Mdev..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Intel i915 Host DRM + VFIO-Mdev..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(958 × 717 pixels, file size: 193 KB, MIME type: image/png) +

Intel's i915 driver provides host and guest GPU acceleration via host DRM + VFIO-Mdev in the same driver. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:16, 20 December 2021Thumbnail for version as of 18:16, 20 December 2021958 × 717 (193 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Ioctl-VFIO_GROUP_GET_FD.png.html b/wiki/open-iov.org/index.php/File:Ioctl-VFIO_GROUP_GET_FD.png.html new file mode 100644 index 0000000..8658593 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Ioctl-VFIO_GROUP_GET_FD.png.html @@ -0,0 +1,233 @@ + + + + +File:Ioctl-VFIO GROUP GET FD.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Ioctl-VFIO GROUP GET FD.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,782 × 1,210 pixels, file size: 110 KB, MIME type: image/png) +

Using an interrupt routine to obtain the VFIO Group file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:38, 26 April 2022Thumbnail for version as of 19:38, 26 April 20221,782 × 1,210 (110 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html b/wiki/open-iov.org/index.php/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html new file mode 100644 index 0000000..ec1ed65 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html @@ -0,0 +1,233 @@ + + + + +File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,748 × 1,246 pixels, file size: 109 KB, MIME type: image/png) +

Using interrupts VFIO_IOMMU_MAP/UNMAP_DMA to pin/map regions of memory. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:56, 26 April 2022Thumbnail for version as of 19:56, 26 April 20221,748 × 1,246 (109 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Ioeventfd-and-irqfd.png.html b/wiki/open-iov.org/index.php/File:Ioeventfd-and-irqfd.png.html new file mode 100644 index 0000000..16b2e7b --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Ioeventfd-and-irqfd.png.html @@ -0,0 +1,233 @@ + + + + +File:Ioeventfd-and-irqfd.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Ioeventfd-and-irqfd.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,390 × 994 pixels, file size: 73 KB, MIME type: image/png) +

"A very simple" diagram of ioeventfd and irqfd. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current21:42, 26 April 2022Thumbnail for version as of 21:42, 26 April 20221,390 × 994 (73 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:KVMFR_Looking_Glass.png.html b/wiki/open-iov.org/index.php/File:KVMFR_Looking_Glass.png.html new file mode 100644 index 0000000..a659731 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:KVMFR_Looking_Glass.png.html @@ -0,0 +1,233 @@ + + + + +File:KVMFR Looking Glass.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:KVMFR Looking Glass.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,280 × 762 pixels, file size: 1.17 MB, MIME type: image/png) +

KVMFR Looking Glass +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:46, 18 December 2021Thumbnail for version as of 00:46, 18 December 20211,280 × 762 (1.17 MB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html b/wiki/open-iov.org/index.php/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html new file mode 100644 index 0000000..1f7e345 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html @@ -0,0 +1,233 @@ + + + + +File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,695 × 1,328 pixels, file size: 57 KB, MIME type: image/png) +

KVM services EPT violation and forwards to QEMU VFIO PCI driver. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current20:26, 24 May 2022Thumbnail for version as of 20:26, 24 May 20221,695 × 1,328 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Mdev-gpu.png.html b/wiki/open-iov.org/index.php/File:Mdev-gpu.png.html new file mode 100644 index 0000000..cf5fb21 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Mdev-gpu.png.html @@ -0,0 +1,233 @@ + + + + +File:Mdev-gpu.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Mdev-gpu.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(2,796 × 1,940 pixels, file size: 221 KB, MIME type: image/png) +

Registering the mediated device. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:40, 19 July 2022Thumbnail for version as of 19:40, 19 July 20222,796 × 1,940 (221 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Memory_Regions_Added_by_QEMU.png.html b/wiki/open-iov.org/index.php/File:Memory_Regions_Added_by_QEMU.png.html new file mode 100644 index 0000000..d42443b --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Memory_Regions_Added_by_QEMU.png.html @@ -0,0 +1,233 @@ + + + + +File:Memory Regions Added by QEMU.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Memory Regions Added by QEMU.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,920 × 1,440 pixels, file size: 21 KB, MIME type: image/png) +

Memory Regions Added by QEMU +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:51, 28 September 2022Thumbnail for version as of 18:51, 28 September 20221,920 × 1,440 (21 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:NUMA_Node.png.html b/wiki/open-iov.org/index.php/File:NUMA_Node.png.html new file mode 100644 index 0000000..8436f5a --- /dev/null +++ b/wiki/open-iov.org/index.php/File:NUMA_Node.png.html @@ -0,0 +1,233 @@ + + + + +File:NUMA Node.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:NUMA Node.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

NUMA_Node.png ‎(624 × 314 pixels, file size: 24 KB, MIME type: image/png) +

NUMA Node +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:46, 18 December 2021Thumbnail for version as of 00:46, 18 December 2021624 × 314 (24 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html b/wiki/open-iov.org/index.php/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html new file mode 100644 index 0000000..cc18d14 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html @@ -0,0 +1,233 @@ + + + + +File:QEMU calls VFIO DMA MAP via Memory listener.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU calls VFIO DMA MAP via Memory listener.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,738 × 1,373 pixels, file size: 19 KB, MIME type: image/png) +

QEMU calls VFIO DMA MAP via Memory listener +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:44, 28 September 2022Thumbnail for version as of 19:44, 28 September 20221,738 × 1,373 (19 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html b/wiki/open-iov.org/index.php/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html new file mode 100644 index 0000000..12d9322 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html @@ -0,0 +1,233 @@ + + + + +File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,700 × 1,333 pixels, file size: 57 KB, MIME type: image/png) +

QEMU convert request from KVM to Read/Write acess to Mdev file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current20:50, 24 May 2022Thumbnail for version as of 20:50, 24 May 20221,700 × 1,333 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html b/wiki/open-iov.org/index.php/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html new file mode 100644 index 0000000..66c6d1c --- /dev/null +++ b/wiki/open-iov.org/index.php/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html @@ -0,0 +1,233 @@ + + + + +File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,738 × 1,341 pixels, file size: 57 KB, MIME type: image/png) +

QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current17:50, 24 May 2022Thumbnail for version as of 17:50, 24 May 20221,738 × 1,341 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html b/wiki/open-iov.org/index.php/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html new file mode 100644 index 0000000..8a49589 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html @@ -0,0 +1,233 @@ + + + + +File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,695 × 1,332 pixels, file size: 57 KB, MIME type: image/png) +

QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:36, 24 May 2022Thumbnail for version as of 19:36, 24 May 20221,695 × 1,332 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html b/wiki/open-iov.org/index.php/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html new file mode 100644 index 0000000..6a7d64d --- /dev/null +++ b/wiki/open-iov.org/index.php/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html @@ -0,0 +1,233 @@ + + + + +File:QEMU presenting the VFIO file descriptor into the virtual machine..png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU presenting the VFIO file descriptor into the virtual machine..png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,698 × 1,322 pixels, file size: 56 KB, MIME type: image/png) +

QEMU presenting the VFIO file descriptor into the virtual machine. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:35, 24 May 2022Thumbnail for version as of 18:35, 24 May 20221,698 × 1,322 (56 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:SR-IOV-Diagram.png.html b/wiki/open-iov.org/index.php/File:SR-IOV-Diagram.png.html new file mode 100644 index 0000000..3db2769 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:SR-IOV-Diagram.png.html @@ -0,0 +1,233 @@ + + + + +File:SR-IOV-Diagram.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:SR-IOV-Diagram.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

SR-IOV-Diagram.png ‎(649 × 559 pixels, file size: 121 KB, MIME type: image/png) +

SR-IOV-Diagram +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:47, 18 December 2021Thumbnail for version as of 00:47, 18 December 2021649 × 559 (121 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:SR-IOV.png.html b/wiki/open-iov.org/index.php/File:SR-IOV.png.html new file mode 100644 index 0000000..75df34e --- /dev/null +++ b/wiki/open-iov.org/index.php/File:SR-IOV.png.html @@ -0,0 +1,233 @@ + + + + +File:SR-IOV.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:SR-IOV.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(765 × 608 pixels, file size: 85 KB, MIME type: image/png) +

SR-IOV +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:47, 18 December 2021Thumbnail for version as of 00:47, 18 December 2021765 × 608 (85 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html b/wiki/open-iov.org/index.php/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html new file mode 100644 index 0000000..65a7065 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html @@ -0,0 +1,233 @@ + + + + +File:Screen Shot 2022-05-06 at 10.46.59 AM.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Screen Shot 2022-05-06 at 10.46.59 AM.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Screen_Shot_2022-05-06_at_10.46.59_AM.png ‎(584 × 436 pixels, file size: 23 KB, MIME type: image/png) +

Peer-to-Peer DMA Isolation under IOMMU +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current14:47, 6 May 2022Thumbnail for version as of 14:47, 6 May 2022584 × 436 (23 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html b/wiki/open-iov.org/index.php/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html new file mode 100644 index 0000000..f6a28f3 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html @@ -0,0 +1,233 @@ + + + + +File:Screen Shot 2022-11-18 at 4.14.32 PM.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Screen Shot 2022-11-18 at 4.14.32 PM.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Screen_Shot_2022-11-18_at_4.14.32_PM.png ‎(603 × 525 pixels, file size: 45 KB, MIME type: image/png) +

Pictured: The FSP Binary Layout from Intel® Firmware Support Package External Architecture Specification. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current21:15, 18 November 2022Thumbnail for version as of 21:15, 18 November 2022603 × 525 (45 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Telescope_LG-Proxy.png.html b/wiki/open-iov.org/index.php/File:Telescope_LG-Proxy.png.html new file mode 100644 index 0000000..a8b40fa --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Telescope_LG-Proxy.png.html @@ -0,0 +1,233 @@ + + + + +File:Telescope LG-Proxy.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Telescope LG-Proxy.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(2,524 × 1,408 pixels, file size: 213 KB, MIME type: image/png) +

An RDMA based proxy for the Looking Glass Memory Protocol. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current17:37, 20 April 2022Thumbnail for version as of 17:37, 20 April 20222,524 × 1,408 (213 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Type_1_IOMMU_Tracks_VA-GFN.png.html b/wiki/open-iov.org/index.php/File:Type_1_IOMMU_Tracks_VA-GFN.png.html new file mode 100644 index 0000000..a2b0e6d --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Type_1_IOMMU_Tracks_VA-GFN.png.html @@ -0,0 +1,233 @@ + + + + +File:Type 1 IOMMU Tracks VA-GFN.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Type 1 IOMMU Tracks VA-GFN.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,709 × 1,352 pixels, file size: 60 KB, MIME type: image/png) +

Type 1 IOMMU Tracks VA-GFN +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:58, 28 September 2022Thumbnail for version as of 19:58, 28 September 20221,709 × 1,352 (60 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:VFIO-Mdev_Diagram.png.html b/wiki/open-iov.org/index.php/File:VFIO-Mdev_Diagram.png.html new file mode 100644 index 0000000..848fbdb --- /dev/null +++ b/wiki/open-iov.org/index.php/File:VFIO-Mdev_Diagram.png.html @@ -0,0 +1,233 @@ + + + + +File:VFIO-Mdev Diagram.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:VFIO-Mdev Diagram.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(593 × 785 pixels, file size: 139 KB, MIME type: image/png) +

A diagram of VFIO-Mdev. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:39, 18 December 2021Thumbnail for version as of 00:39, 18 December 2021593 × 785 (139 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:VFIO_Diagram.png.html b/wiki/open-iov.org/index.php/File:VFIO_Diagram.png.html new file mode 100644 index 0000000..43dc74f --- /dev/null +++ b/wiki/open-iov.org/index.php/File:VFIO_Diagram.png.html @@ -0,0 +1,233 @@ + + + + +File:VFIO Diagram.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:VFIO Diagram.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

VFIO_Diagram.png ‎(398 × 527 pixels, file size: 62 KB, MIME type: image/png) +

A VFIO diagram. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:38, 18 December 2021Thumbnail for version as of 00:38, 18 December 2021398 × 527 (62 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Vfio-pci_driver_bindings.png.html b/wiki/open-iov.org/index.php/File:Vfio-pci_driver_bindings.png.html new file mode 100644 index 0000000..2a730b6 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Vfio-pci_driver_bindings.png.html @@ -0,0 +1,233 @@ + + + + +File:Vfio-pci driver bindings.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Vfio-pci driver bindings.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,010 × 734 pixels, file size: 36 KB, MIME type: image/png) +

VFIO group nodes are unit of ownership that VFIO uses. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:25, 26 April 2022Thumbnail for version as of 18:25, 26 April 20221,010 × 734 (36 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/File:Virgl.png.html b/wiki/open-iov.org/index.php/File:Virgl.png.html new file mode 100644 index 0000000..0c18802 --- /dev/null +++ b/wiki/open-iov.org/index.php/File:Virgl.png.html @@ -0,0 +1,233 @@ + + + + +File:Virgl.png - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Virgl.png

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

Virgl.png ‎(384 × 509 pixels, file size: 66 KB, MIME type: image/png) +

Virgl +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:52, 18 December 2021Thumbnail for version as of 00:52, 18 December 2021384 × 509 (66 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/GPU_Driver_Internals.html b/wiki/open-iov.org/index.php/GPU_Driver_Internals.html new file mode 100644 index 0000000..30a0652 --- /dev/null +++ b/wiki/open-iov.org/index.php/GPU_Driver_Internals.html @@ -0,0 +1,661 @@ + + + + +GPU Driver Internals - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Driver Internals

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This page will detail the internals of various GPU drivers for use with I/O Virtualization.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Article Structure

+

This article will aim to provide information about the following details of GPU drivers: +

+

High Level Architecture

+

This section will detail high level architectures of each driver. +

+

Initialization

+

This section will cover how the GPU's embedded components, the GPU driver, and virtualization functions are initialized. +

+

Scheduling

+

This section will detail how the device schedules instructions for execution. +

This will attempt to provide a comprehensive view of scheduling from virtualized processes down to execution within the device. +

+

In-VM Scheduling

+

The In-VM Scheduling section will detail how instructions scheduled within the virtual machine's GPU device driver. +

+

Between-VM Scheduling

+

The Between-VM Scheduling section will detail how the host kernel module and/or virtual GPU helper functions handle scheduling / context swaps between virtual machines on a computer system. +

+

Firmware Scheduling (if applicable)

+

The Firmware Scheduling section will cover the GPU's internal scheduling model if a deferred execution pathway is used (like i915's GuC or OpenRM's GSP). +

In the case an intermediate scheduling microcontroller is not used this section may be less applicable (ie: vExeclist scheduling under Intel vGPUs). +

+

Memory Management

+

The Memory Management section will cover how the GPU driver manages memory for virtual GPUs and host processes. +

This will aim detail paging abstractions used for global memory translation, and per-process memory translation. +

+

Display Surface Virtualization

+

The Display Surface Virtualization section will detail how virtual displays are provided to guests and/or graphics rendering buffers (pixel surfaces) are shared from guest to host if such functions are provided via the driver. +

+

Graphics Buffer Sharing

+

This section will cover methods provided by the GPU driver suitable for high performance graphics sharing. +

+

Vendor Neutral

+

This section will detail functions in common between GPU drivers. +

Also see Display Virtualization for Windows OS. +

+

Knowledge Resources Used

+

This section is supported by significant contributions to documentation and open source by Satyeshwar Singh. +

+

Display Surface Virtualization

+

The Display Surface Virtualization section will detail how virtual displays are provided to guests and/or graphics rendering buffers (pixel surfaces) are shared from guest to host if such functions are provided via the driver. +

+

Graphics Buffer Sharing

+

This section will deal with graphics buffer sharing for vendor neutral GPUs. +

+
Display Flow in Linux
+

Userspace applications provide their buffers to compositor. +

Compositor asks Mesa to create a framebuffer. +

Framebuffer is allocated through vendor driver. +

Vendor driver flips the framebuffer on the screen. +

+
SR-IOV and Mdev
+

SR-IOV VFs don't have access to the display controller (only PF does). +

Known issue is displaying a VF's framebuffer on the screen. +

+
VFs in QEMU Hypervisor (VirtIO-GPU)
+

SR-IOV and Mdev VFs run in QEMU Hypervisor. +

QEMU has full access to all pages in VF's address space. +

VirtIO-GPU allows for allocating buffers (not API remoting in this case). +

Mesa's KMSRO allocates framebuffer via virtio-gpu. +

Mesa's KMSRO asks vendor driver to import framebuffer (no specific compositor dependancy). +

+
Transport
+

A Scatter Gather List (SGL) of physical pages is constructed by VirtIO-GPU of VF. +

+
QEMU Host-Side u-dma-buf
+

Host QEMU uses u-dma-buf driver to reconstruct a virtual memory pointer from the SGL shared by VF. +

u-dma-buf driver allocates contiguous memory blocks in kernel as DMA buffers. +

+
QEMU Host-Side Modules
+

Once virtio-qemu has a DMA buffer, it shares it with the QEMU UI. +

QEMU UI has several toolkits to support like GTK, SDL, etc. with GTK. being the default. +

GTK uses EGL and passes it the DMABUF as a texture. +

+
Windows VFs
+

Windows OS doesn't support DMABUF capability so we can't allocate buffers from VirtIO-GPU and share them with the Windows Kernel Mode Driver (KMD). +

Windows OS is different in the way that the FB is allocated via the OS rather than the miniport driver. +

Modified version of RedHat virtio-gpu-do (short for Display Only) driver used. +

+
Windows Driver Stack
+

OS (DWM) allocates frame buffers and asks GPU to write to them through Miniport. +

DVServer UMD (IDD) asks the OS for the FB copy. +

DVServer UMD (IDD) passes the virtual memory address to DVServer KMD. +

+
DVServer KMD
+

DVServer KMD finds the SGL (Scatter Gather List) of physical pages for this virtual memory address. +

This SGL is passed via virt-queue from the VF to the host QEMU. +

+
Android VFs
+

Android uses Linux kernel underneath. VirtIO-GPU is present in Android's kernel. +

KMSRO patch to allocate framebuffer via VirtIO-GPU also ported over to Android. +

Need modifications in the minigbm lib of Android to connect with KMSRO part. +

Rest of stack looks identical to Linux VF/PF. +

+

i915

+

Knowledge Resources Used

+

This section is supported by significant contributions to documentation and open source by Zhi Wang, Ben Widawsky, and Igor Bogdanov. +

See references 2, 3, 4, 5, 6, 7, 8, and 9 in the References (Talks & Reading Material) section. +

+

High Level Architecture

+

i915 Clients

+

Processes which make use of the Intel i915 driver receive an i915 Client ID. +

+

Initialization

+

During initialization of the i915 driver the GuC binary blob is offloaded into the Graphics Translation Table (GTT). This allows the GuC to read GTT-loaded binary blob from shared framebuffer memory so that it may boot. +

+

Scheduling

+
Figure 0: i915 vGPU Scheduling
Figure 0: i915 vGPU high-level Scheduling. See slides from: [9]
+

There are several abstractions for GPU virtual machine scheduling. Those are as follows: +

+
  • Guest kernel (i915.ko)
  • +
  • Host kernel (i915.ko)
  • +
  • Device Firmware (GuC)
+
In-VM Scheduling
+
Guest kernel (i915.ko)
+
vExeclist
+

The vExeclist is a method to submit commands directly to the GPU without the use of an intermediate microcontroller. +

+
vGuC
+

vGuC is a command submission interface used to process commands to the Intel Graphics Microcontroller (GuC). +

+

Between-VM Scheduling

+
Figure 1: i915 vGPU Scheduling Requests & Events
Figure 1: i915 vGPU Scheduling Requests & Events. See slides from: [9]
+
Host kernel (i915.ko)
+

Submitting commands to the GPU under i915 can take several paths. One pathway makes use of direct command submission without an intermediate micro-controller whereas the other uses an intermediate micro-controller. The intermediate micro-controller approach increases the amount of binary-blob code used and abstracts the kernel module from the device's internal scheduling model. +

+
Execlist
+

Execlist executes commands synchronously on the device without an intermediate microcontroller. This is the preferred method of executing commands by some driver developers because of it's stability and transparency under current i915 development. +

+
GuC
+

GuC provides an execution pathway with an intermediate microcontroller providing a scheduling abstraction for Intel's preferred internal scheduling model. +

+
Figure 2: Intel vGPU Scheduler request flow.
Figure 2: i915 vGPU Scheduler request flow. See slides from: [9]
+
Device Firmware (GuC)
+

Memory Management

+
Translation Tables
+
GTT (Graphics Translation Table)
+

GPU Memory on-device is a part of a GTT or Graphics Translation Table. This table stores information globally for all graphics processes within the system. Some processes access the Global Graphics Translation Table (GGTT) such as DRI while other's receive a Per Process Graphics Translation Table (PPGTT) buffer based on their i915 Client ID. +

+
GGTT (Global Graphics Translation Table)
+
PPGTT (Per Process Graphics Translation Table)
+

Process-specific memory buffers are stored inside a Per Process Graphics Translation Table or PPGTT. This is a GPU MMU translated subregion or IOVA of global GPU memory specific to a GPU process's client ID. +

+
Aliasing PPGTT
+

Aliasing PPGTT (Per Process Graphics Translation Table) refers to partially separated GPU resources (process context). +

+
Real PPGTT
+

Real PPGTT (Per Process Graphics Translation Table) refers to fully separated GPU resources (process context). +

+

Display Surface Virtualization

+

The Intel vGPU makes use of two modes for Display Surface Virtualization. +

+
  • VirtIO-GPU (Linux)
  • +
  • Indirect Display Driver (Windows)
+

VirtIO-GPU

+

IDD (Indirect Display Driver)

+

The IDD (Indirect Display Driver) provides virtual display functions with arbitrary resolutions to any rendering device virtual or physical. +

Intel's IDD can be found in their Display Virtualization for Windows OS repository. +

+

Graphics Buffer Sharing

+

Intel's i915 driver provides functionality to directly map display memory from a guest vGPU Virtual Function (either SR-IOV or VFIO-Mdev) into the host GPU's Physical Function without slow memory copies or graphics compression. For users running GPU virtualization on their local device this results in a significant performance uplift compared to traditional graphics sharing functionality built for remote access use-cases such as VDI. +

Intel's 0copy display virtualization tools are simple to implement as sharing does not rely upon an added IVSHMEM (Inter-VM Shared Memory device) - rather the host directly maps the guest's display memory via udmabuf as the buffer sharing functions are provided within the i915 open source driver. +

+

OpenRM

+
Figure 3: GPU BAR to Timeshared Syhededuling via Channel IO
Figure 3: GPU BAR to Timeshared Scheduling via Channel IO.
+

Knowledge Resources Used

+

This section is supported by significant contributions to documentation and open source by Andy Currid, Neo Jia, John Fanelli, and Neha Joshi. +

+

High Level Architecture

+

The Open Resource Manager (RM driver) makes use of a highly object oriented paradigm comprised of multiple "engines" which act as micro-services for servicing driver requests. +

The Open Resource Manager driver (also known as OpenRM) refers to Nvidia's open-kernel-modules. +

Broadly speaking the OpenRM driver consists of two parts. +

+
  • The Platform RM (OpenRM)
  • +
  • The Firmware RM (GSP RM / RM Core)
+

The Platform RM is loaded into the Linux Kernel as nvidia.ko. This module communicates with the GSP RM for via Remote Procedure Calls (RPCs) to communicate with engines from the RM Core. +

+
RM Clients
+

Processes (local, remote, or virtualized) which make use of the RM driver receive an RM Client ID. +

+

RM Server

+

The RM Server (or Resource Server) tracks RM Clients as well as the hardware and software resources they control, allocate, and free. +

+

RM API

+

API to control the Resource Manager Server. +

+

RM Core

+

Core functions of the RM driver controlling resource locking, mapping, unmapping, control calls, constructors, and deconstructors. Under OpenRM the RM Core runs within the GPU System Processor (GSP micro-controller) while in pre-open source versions of the Resource Manager the RM Core ran within the nvidia.ko kernel module +

+

Initialization

+

During bring up of the hardware several binary blobs are loaded from embedded Boot ROM memory to bootstrap embedded controller bring up from which point additional software is loaded from onboard SPI flash memory. +

Software loaded from SPI flash is necessary for the full initialization of the Falcon/NvRISC processor as well as a cached version of the software necessary to run the GPU System Processor (GSP). +

Once the platform is posted it is ready to communicate with the host platform's RM driver. The OpenRM driver offloads a binary blob containing the RM Core to the GPU System Processor (GSP) which is likely to contain a more recent version than the cached version contained in on-board SPI flash. +

+

Scheduling

+

There are several abstractions for GPU virtual machine scheduling. Those are as follows: +

+
  • Guest kernel (nvidia.ko)
  • +
  • Host kernel (nvidia.ko)
  • +
  • Host usermode (gpu-mgr / libnvidiavgpu.so)
  • +
  • Device Firmware (GSP)
+

Command Submission

+
Runlist
+

In-VM Scheduling

+

Virtual machines contain their own GPU scheduling within the Nvidia kernel module in the guest OS. +

+
Guest kernel (nvidia.ko)
+

Within a virtual machine running the Nvidia driver messages to the GPU are first sent to the guest nvidia.ko kernel module. +

+The guest then determines whether a vRPC (virtual Remote Procedure Call) or a pRPC (physical Remote Procedure Call) should be sent. Both pRPCs and vRPCs are sent through the host RM driver (Resource Manager).

Note: Unclear on execution pathway for pRPCs vs vRPCs. pRPCs may go directly to device.

+

Between-VM Scheduling

+

In addition to scheduling which occurs within the virtual machine the Resource Manager driver also schedules messages to the GPU between GPU-accelerated virtual machines and host processes. +

+
Host kernel (nvidia.ko)
+

Messages sent by the guest (via vRPC or pRPC) are received by the host Nvidia.ko driver. +

Nvidia.ko contains a virtual GPU state machine which contains status information for the virtual GPU. +

Nvidia.ko also contains a virtual GPU kernel scheduler which interacts with virtual GPU objects. +

Nvidia.ko also contains an RM Call scheduler which schedules calls on an RM class. +

The Nividia.ko kernel module exits to userspace to execute the nvidia-vgpu-mgr and VMIOP (Virtual Machine Input Output Plugin). +

+
Host usermode (nvidia-vgpu-mgr / libnvidia-vgpu.so)
+

After exiting to userspace a daemon process (the nvidia-vgpu-mgr, and it's library libnvidia-vgpu.so) are executed to schedule VM-exits described below. +

+
nvidia-vgpu-mgr
+

The nvidia-vgpu-mgr is a process which provides the spawning of virtual GPU stubs and population with capability information. +

This daemon process interacts with the libnvidia-vgpu.so, nvidia.ko, and nvidia-vgpu-vfio.ko components. +

This process and the libnvidia-vgpu.so contain, and execute the VMIOP. +

This process (and the VMIOP) schedules RPCs sent by the guest, receives VFIO BAR-exits, and relays requests to allocate, deallocate, pin, unpin, map, unmap to the RM Core. +

+
vmiop
+

VMIOP (Virtual Machine Input Output Plugin) handles presenting virtualized functionality into the guest. +

The Virtual Machine Input Output Plugin software handles virtual displays, compute API offload, and most importantly BAR (Base Address Register) quirks. +

The VMIOP is an SDK (Software Development Kit) provided in binary format split between the libnvidiavgpu.so and nvidia-vgpu-mgr which provides userland helper functions for GPU virtualization. +

Messages to the VMIOP are scheduled by Linux kernel niceness (scheduling abstraction). +

+
Device Firmware (GSP)
+

Messages received by the host RM driver (Resource Manager) are then scheduled by the RM Core contained within the GSP (GPU System Processor). The GSP handles the device's internal scheduling model. +

+

Memory Management

+

Managing virtual machine memory is very important to the security of virtualization. +

This section will cover the method by which secure memory "enclaves" or IO Virtual Addresses (IOVAs) may be provisioned and separation enforced by hardware constructs within the GPU. +

+
Programming the MMU
+

In order to hardware enforce separation between memory allocated to Virtual Machines (VMs) virtualization software must program the GPU's MMU (GMMU controller) to create IO Virtual Addresses (IOVAs). +

In order to create such configurations several abstractions are used to translate high level representations of virtualization programmed via the vmiop and gpu-mgr into practical, architecture specific instructions. +

+
AMAPLibrary
+

The AMAPLibrary acts as a device abstraction framework for GPU driver software to program using high level representations of MMU configuration. +

The AMAPLibrary translates high level representations of GPU virtualization into graphics architecture-specific logic contained within architecture HALs (Hardware Abstraction Layers). +

+
Architecture HALs
+

GPU Hardware Abstraction Layers (HALs) contain logic specific to graphics architectures, for instance the precise method by which the GPU driver may interact with the Falcon to provision MMU protected memory. +

+
DMA from Falcon / NvRISC-V to Frame Buffer Interface (FBIF)
+

The Falcon (FAst Logic CONtroller) / NvRISC-V embedded controller emits DMAs to the Frame Buffer Interface (FBIF) in order to interact with the device's GMMU controller. +

User programs and VMs have their memory translated through the GMMU. +

Once created memory translations within a virtual machine's IO Virtual Address (IOVA) will be protected by the device's GMMU controller. +

+
Translation Tables
+
vmiop_gva
+

Display Surface Virtualization

+

amdgpu

+

References (Talks & Reading Material)

+
  1. Intel Graphics Programmer's Reference Manuals (PRM)
  2. +
  3. i915: Hardware Contexts (and some bits about batchbuffers)
  4. +
  5. i915: The Global GTT Part 1
  6. +
  7. i915: Aliasing PPGTT Part 2
  8. +
  9. i915: True PPGTT Part 3
  10. +
  11. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  12. +
  13. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  14. +
  15. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  16. +
  17. i915: An Introduction to Intel GVT-g (with new architecture)
  18. +
  19. lwn.net: Add udmabuf misc device
  20. +
  21. Nvidia RISC-v Story
  22. +
  23. IOMMU Introduction
  24. +
  25. Hardware and Compute Abstraction Layers For Accelerated Computing Using Graphics Hardware and Conventional CPUs
  26. +
  27. nVidia GPU Introduction (envytools)
  28. +
  29. Delivering High Performance Remote Graphics With Nvidia GRID Virtual GPU
  30. +
  31. NVIDIA Multi-Instance GPU
  32. +
  33. i915: Kaby Lake Intel Graphics Programmer's Reference Manual [Volume 5: Memory Views]
  34. +
  35. Lifecycle of a Triangle - Nvidia's logical pipeline
  36. +
  37. Nvidia Parallel Thread Execution (PTX)
  38. +
  39. i915/GEM Crashcourse
  40. +
  41. drm: Add GEM ("graphics execution manager") to i915 driver.
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/GPU_Firmware.html b/wiki/open-iov.org/index.php/GPU_Firmware.html new file mode 100644 index 0000000..d4e0282 --- /dev/null +++ b/wiki/open-iov.org/index.php/GPU_Firmware.html @@ -0,0 +1,453 @@ + + + + +GPU Firmware - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Firmware

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

GPUs have become highly complex systems containing a number of different embedded controllers. This page will attempt to document embedded GPU firmware and support for IO virtualization through various firmware functions.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Intel

+

Firmware Images

+This section will cover firmware images used in Intel GPUs.

Figure 1: The FSP Binary Layout from Intel® Firmware Support Package External Architecture Specification.
Figure 1: The FSP Binary Layout from Intel® Firmware Support Package External Architecture Specification. Source
+

Intel Firmware Support Package (FSP)

+

Much like CPUs Intel's GPUs also contain a Firmware Support Package (FSP). +

The Coreboot project provides public domain information on the FSP here. +

+
FSP Configuration
+

In the context of GPUs the FSP configures several functions of the device. +

Those functions are as follows: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GPU Firmware Support Package +
FSP Parameter +Possible Values +
GFSP Status +0x00 +
FIVR SSC Value +*.*% +
FIVR RFI Value +*.*MHz +
GT Subsystem Vendor ID +0x8086 +
GT Subsystem Device ID +0x** +
HDA Subsystem Vendor ID +0x0000 +
HDA Subsystem Device ID +0x0000 +
P2SB Enable +Yes/No +
LMEBAR +Max +
GTMMADDR Prefetch Capability +Prefetch Enabled +
Display Present +Enabled/Disabled +
I2C For Third Party Devices +Enabled/Disabled +
I2C Device Address 1 +0x0000 +
I2C Device Address 2 +0x0000 +
I2C Bus Speed +Standard mode (0 to 100Kbps) +
+
Editing FSP Configuration
+

The FSP configuration editor can be downloaded here and it's user manual is available here. +

+
FSP Binary Format
+

The FSP's binary layout is detailed within the Intel® FSP External Architecture Specification v2.4 on page 14. +

+

Known Firmware Package Variations

+

Some firmware packages may include an **End of Manufacturing Flash Protection Mode** status of Protected or Unprotected. +

+
Figure 2: Firmware status information for an Intel DG2 device.
Figure 2: Firmware status information for an Intel DG2 device.
+

Similar SPI Write Protection functionality is made available through Intel CPUs under System Management Mode (SMM). +

+

Embedded Controllers

+

This section will cover firmware images as they apply to various embedded controllers within the Intel GPU. +

+

GuC

+

The Graphics micro (µ) Controller (GuC) is an embedded controller contained within Intel's embedded and discrete graphics (DG*) series GPUs. +

+
Hardware Architecture
+

The following section is supported by igor-blue.github.io (see reference 1, 2): +

"The GuC - an embedded i486 core that supports graphics scheduling, power management and firmware attestation." +

+
Software Architecture
+

The following section is supported by igor-blue.github.io (see reference 1, 2): +

"The μOS kernel runs in 32-bit protected mode, with no paging and old-style segments model (CS, DS, etc’). All code run in ring0. The OS handles HW/SW exceptions and crashes, and supplies debugging and logging services." +

"It runs a single process - which initializes the system and then waits for interrupts/events in a loop." +

+
GuC Blob Checksum & Code Signing
+

"The bootrom verifies the firmware with a digital signature using a SHA256 hash + PKCSv2.1 RSA signature, and if the test passes copies it to SRAM and starts executing." +

+

Nvidia

+

Firmware Images

+

This section will cover firmware images used in Nvidia GPUs. +

+

Embedded Controllers

+

This section will cover firmware images as they apply to various embedded controllers within the Nvidia GPU. +

+

Falcon / NV-RISCV

+

The Fast Logic CONtroller (Falcon) and Nvidia RISC-V (NV-RISCV) processors run the NvOS. +

+

GSP

+

The GPU System Processor (GSP) is an embedded controller used for offload of the RM Core. +

The GSP runs Library Operating System (LibOS). +

+
GSP Initialization & Offload
+

The GSP is initialized multiple times during the system's bring up and runtime. +

GSP offload may occur during: +

+
  • Hardware bring up when a cached version of the RM Core is loaded from SPI flash
+
  • During host driver bring up when the RM Core is offloaded by the OpenRM driver.
  • +
  • During guest driver bring up when the RM Core is offloaded.
+ + + + + + + + + + + + + + + + + +
Possible GSP Offloads +
Load Source +Payload +Notes +
SPI Flash +Cached RM Core +Used as a fallback in case of no rm offload. +
OpenRM +RM Core +This is the RM Core which was traditionally contained in the proprietary RM driver. +
VGX Guest +Guest RM Core +Future OpenRM guests may accomplish RM offload via GSP stubs (controlled via gspHeapSize?). +
+

CMU

+

AMD

+

References (Talks & Reading Material)

+
  1. Security of the Intel Graphics Stack - Part 1 - Introduction
  2. +
  3. Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  4. +
  5. Firmware Security Realizations Part 3: SPI Write Protections
  6. +
  7. Intel® FSP: Firmware Solutions for the Internet of Things
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/GPU_Software_Bill_Of_Materials_(SBOM).html b/wiki/open-iov.org/index.php/GPU_Software_Bill_Of_Materials_(SBOM).html new file mode 100644 index 0000000..ae9ec87 --- /dev/null +++ b/wiki/open-iov.org/index.php/GPU_Software_Bill_Of_Materials_(SBOM).html @@ -0,0 +1,528 @@ + + + + +GPU Software Bill Of Materials (SBOM) - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Software Bill Of Materials (SBOM)

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This page will keep a running list of components used to achieve GPU Virtualization.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component Table +
Vendor +Component +Description +Version +OSS or Blob +Filesize +Vendor Docs +Release Date +Interfaces / APIs +Notes +
Microsoft +Indirect Display Driver (IDD) +Driver + +OSS + +Indirect Display Driver Overview + +UMDF, KMDF +The Indirect Display Driver (IDD) enables GPUs to render graphics at arbitrary resolutions without a physical display connected on Windows OS systems. +
RedHat +vfio_pci +Driver +6.2-rc1 +OSS +in-kernel +RedHat, kernel.org +2022.12.15 +irqfd, ioeventfd, IOCTL +Reference VFIO Stub driver used for discrete assignment of IO, and assignment of some SR-IOV-backed vGPU devices into virtual machines. This driver is commonly replaced with a vendor built VFIO interface with differing memory management and/or page pinning mechanisms which are specific to the vGPU software internals. +
Mediated Core (mdev.ko) +Driver +6.2-rc1 +OSS +0.044 MB +kernel.org +2016.xx.xx +irqfd, ioeventfd, IOCTL, Type 1 IOMMU +The Mediated Core driver provides a common interface for mediated device management that can be used by drivers of different devices. It is an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment (based on VFIO). +
+guest communication daemon +Daemon +0.1.0 +OSS + + +2023.02.08 +Virtio-Serial, CLI +Handles IO to and from guests and the host using Virtio-Serial to handle multiple different guest modules. +
mdev management CLI +1.0 +OSS +0.084 MB + +2023.01.06 +CLI, IOCTL, RMAPI, Mediated Core +Configures the the nvidia-vgpu-mgr process. +
Intel +i915 SR-IOV +Driver +5.15 +OSS +in-kernel + + + +Intel's open source GPU driver for GuC-equipped graphics accelerators. +
GuC μOS +Firmware +Blob + + + +IOMMU Interrupts, Power Management Interrupts, GTT +Handles scheduling, and power management. +
HuC + + + +GTT +Handles video encoding/decoding. +
Display Virtualization for Windows OS +Driver +791 +OSS + +github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt + +udmabuf, UMDF, KMDF +Intel's 'Display Virtualization for Windows OS' provides a virtual pixel surface used for hardware graphics rendering using Microsoft's open source 'Indirect Display Driver (IDD)'. Display virtualization for Windows OS makes use of display memory sharing primitives provided in-driver by the i915 host. +
Nvidia +OpenRM +Driver +525.85.12 +OSS + +github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md +2023.01.31 + +Nvidia's open source GPU driver for GSP-equipped graphics accelerators. +
GSP RM (uproc) +Firmware +Blob + + +2023.01.31 +RPC +Embedded firmware based on LibOS containing the RM Core. +
Falcon/NvRISC (uproc) + + + + +FBIF (Frame Buffer Interface) / GMMU +Embedded firmware which handles many aspects of the device including configuring the GPU's GMMU controller. +
nvidia-vgpud +Daemon +v15.2 +Blob +0.108 MB +docs.nvidia.com/grid +2023.01.xx +CLI, IOCTL, RMAPI, Mediated Core +Configures the the nvidia-vgpu-mgr process. +
nvidia-vgpu-mgr +0.132 MB +2023.01.xx +vmiop, IOCTL, RMAPI, vRPC, pRPC, Mediated Core +Handles IO to and from guest RM, host RM, and hardware. +
libnvidia-vgpu.so +Library +3.1 MB +2023.01.xx +vmiop, RMAPI, Mediated Core +Handles IO to and from guest RM, host RM, and hardware. Contains circular dependancies with nvidia-vgpu-mgr. +
nvidia-vgpu-vfio.ko +Driver +0.108 MB +2023.01.xx +Type 1 IOMMU, irqfd, ioeventfd, IOCTL, Mediated Core +Handles incremental memory mapping (non-page pinning per the standard vfio-pci driver). +
+

More Information

+
  1. Nvidia RISC-V Story
  2. +
  3. +
  4. Intel Graphics Programmer's Reference Manuals (PRM)
  5. +
  6. i915: Hardware Contexts (and some bits about batchbuffers)
  7. +
  8. i915: The Global GTT Part 1
  9. +
  10. i915: Aliasing PPGTT Part 2
  11. +
  12. i915: True PPGTT Part 3
  13. +
  14. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  15. +
  16. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  17. +
  18. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  19. +
  20. i915: An Introduction to Intel GVT-g (with new architecture)
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/GPU_Support.html b/wiki/open-iov.org/index.php/GPU_Support.html new file mode 100644 index 0000000..39a48f5 --- /dev/null +++ b/wiki/open-iov.org/index.php/GPU_Support.html @@ -0,0 +1,813 @@ + + + + +GPU Support - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Support

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+ +

Abstract

+The following document will detail GPU Support for SR-IOV, SIOV, and VFIO-Mdev functionality.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

Overview

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Feature Matrix +
Hardware +Drivers +Virtual I/O Assistance Modes +Userspace +
Vendor +Architecture +Model +Libre Drivers +Blob Drivers +'Merged' Host+Guest Acceleration +Manufacturer Support +Mdev Support +SR-IOV Support +SIOV Support +mdev management CLI Support + Support +
Intel +6th Generation (Skylake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +7th Generation (Kaby Lake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +8th Generation (Coffee Lake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +9th Generation (Cannon Lake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +10th Generation (Ice Lake) + +i915 + +No +Yes (Legacy) +No +No +No +No +No +
Intel +11th Generation (Tiger Lake) +Xe* +i915 + +Yes +Yes + +Yes + +Yes +Yes +
Intel +12th Generation (Alder Lake) +Xe* +i915 + +Yes +Yes + +Yes +In Development +Yes +Yes +
Nvidia +Maxell +*(see exceptions below) +Nouveau, OpenRM +RM +Yes +Yes +Yes +No +No +Yes +Yes +
Nvidia +Pascal +* +Nouveau, OpenRM +RM +Yes +Yes +Yes +No +No +Yes +Yes +
Nvidia +Turing +* +Nouveau, OpenRM +RM +Yes +Yes +Yes +No +No +Yes +Yes +
Nvidia +Ampere +A* +Nouveau (Development), OpenRM +RM +No (DisplayModeSelector) +Yes +Yes +Yes +In Development +Yes +Yes +
Nvidia +Ampere +RTX 30** +Nouveau (Development), OpenRM +RM +In Development +Yes +Yes +No +In Development +In Development +In Development +
Nvidia +Ada Lovelace +* +OpenRM + + +Yes +Yes +Yes +In Development +In Development +In Development +
Nvidia +Hopper +* +OpenRM + + +Yes +Yes +Yes +In Development + + +
AMD +Tonga +W7100 +AMDGPU, MxGPU / GIM / GPU-IOV Module (Deprecated) +AMDGPU-Pro +No +EOL (2017) +No +Yes +

(patched) +

+
No +No +Yes +
AMD +Tonga +S71** +AMDGPU, MxGPU / GIM / GPU-IOV Module (Deprecated) +AMDGPU-Pro +No +EOL (2017) +No +Yes +No +No +Yes +
AMD +Vega +* +AMDGPU +AMDGPU-Pro +No +Partial +Unknown +Yes +No +No +No +
AMD +Navi +* +AMDGPU +AMDGPU-Pro +No +Partial +Unknown +Yes +No +No +No +
+

Intel

+

This section will cover Mdev support on Intel GPUs. +

+

Hardware

+

GPUs supporting GVT-g (software based mediation)[1]: +

+
  • Intel HD Graphics 5500
  • +
  • Intel HD Graphics 6000
  • +
  • Intel HD Graphics 510
  • +
  • Intel HD Graphics 520
  • +
  • Intel HD Graphics 530
  • +
  • Intel HD Graphics 620
  • +
  • Intel HD Graphics 630
  • +
  • Intel UHD Graphics 620
  • +
  • Intel UHD Graphics 630
+

GPUs supporting SR-IOV (hardware based mediation): +

+
  • Intel Iris Xe Graphics [2][3]
  • +
  • Intel Iris Xe MAX Graphics
+

Drivers

+

Drivers with GVT-g support (6th - 9th gen): +

+ +

Drivers with SR-IOV support (11th gen+): +

+ +

Nvidia

+

This section will cover Mdev support on Nvidia GPUs. +

+

Hardware

+
  • All(?) Volta based GPUs (V-series)
  • +
  • All(?) Turing based GPUs (20-series)
  • +
  • All(?) Pascal based GPUs (10-series)
  • +
  • Most Maxwell based GPUs (9-series) with the following notable exceptions: +
    • GTX 970 (mixed FB regions)
    • +
    • Quadro M2000 (mixed FB regions)
    • +
    • Tesla M40 [4]
+
  • NVIDIA A100 HGX 80GB
  • +
  • NVIDIA A100 PCIe 80GB (SR-IOV: 20VF [5])
  • +
  • NVIDIA A100X
  • +
  • NVIDIA A100 HGX 40GB
  • +
  • NVIDIA A100 PCIe 40GB (SR-IOV: 16VF [6])
  • +
  • NVIDIA A40 (SR-IOV: 32VF [7])
  • +
  • NVIDIA A30 (SR-IOV: 8VF [8])
  • +
  • NVIDIA A30X
  • +
  • NVIDIA A16 (SR-IOV: 16VF [9])
  • +
  • NVIDIA A10 (SR-IOV: 32VF [10])
  • +
  • NVIDIA A2 (SR-IOV: 16VF [11])
  • +
  • NVIDIA RTX A6000
  • +
  • NVIDIA RTX A5000
  • +
  • Quadro RTX 8000 (SR-IOV: 24 VF [12])
  • +
  • Quadro RTX 8000 passive
  • +
  • Quadro RTX 6000 (SR-IOV: 24 VF [13])
  • +
  • Quadro RTX 6000 passive
  • +
  • Tesla V100
  • +
  • Tesla T4 (SR-IOV: 16VF [14])
  • +
  • Tesla P100
  • +
  • Tesla P40
  • +
  • Tesla P6
  • +
  • Tesla P4
  • +
  • Tesla M60
  • +
  • Tesla M10
  • +
  • Tesla M6
  • +
  • GRID K2 (Citrix XenServer and VMware ESXi only)
  • +
  • GRID K1 (Citrix XenServer and VMware ESXi only)
+

Drivers

+

The most widely used method of enabling Mdev functionality on Nvidia GPUs is via the use of Nvidia's proprietary driver package. +

Nvidia's proprietary Mdev driver supports both SR-IOV as well as software based mediation. The appropriate mode is chosen between the two methods based on hardware architecture. +

+

AMD

+

This section will cover Mdev support on AMD GPUs. +

+

Hardware

+

Supported GPUs: +

+
  • AMD FirePro S7150
  • +
  • AMD Radeon Pro V520 [15]
  • +
  • AMD FirePro W7100 [15]
+

Drivers

+

The open source GIM driver supports AMD Tonga architecture GPUs such as the FirePro S7150 & W7100. +

To make use of the MxGPU GIM driver on modern kernel versions you will require pull request 24. +

Virtualization driver support beyond AMD's Tonga architecture is unclear. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Glossary.html b/wiki/open-iov.org/index.php/Glossary.html new file mode 100644 index 0000000..fdbb0a7 --- /dev/null +++ b/wiki/open-iov.org/index.php/Glossary.html @@ -0,0 +1,268 @@ + + + + +Glossary - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Glossary

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Definitions

+

This article will attempt to provide a glossary of common terms that are either related to/or often used in connection with virtualization for those who may need more context. +

If you have suggestions on how to improve the glossary you can contribute or join our community discussion thread to make suggestions. +

+

VFIO

+

Kernel.org defines VFIO or Virtual Function Input Output as "an IOMMU/device agnostic framework for exposing direct device access to userspace, in a secure, IOMMU protected environment." [1]

+
A diagram depicting direct VFIO passthrough of a GPU adapter.
+

Mdev

+

Kernel.org defines Virtual Function I/O (VFIO) Mediated devices as: "an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment... mediated core driver provides a common interface for mediated device management that can be used by drivers of different devices." [2]

+
A diagram depicting VFIO Mediated Device interacting with two vGPU guests.
+

Virtual CPU (vCPU)

+

A Virtual CPU (vCPU) is a CPU which has been virtualized to represent a percentage of the total hardware resource via preemptive scheduling.

+

Virtual GPU (vGPU)

+

A Virtual GPU (vGPU) is a GPU which has been virtualized to represent a percentage of the total hardware resource via preemptive scheduling or thread pinning (to EUs, or SMs) and/or a partition of the device's Video Random Access Memory (VRAM).

+

IVSHMEM

+

According to QEMU's GitHub repo: "The Inter-VM shared memory device (ivshmem) is designed to share a memory region between multiple QEMU processes running different guests and the host. In order for all guests to be able to pick up the shared memory area, it is modeled by QEMU as a PCI device exposing said memory to the guest as a PCI BAR." [3]

+
A diagram depicting an inter-vm shared memory device being used by two separate virtual machines.
+

KVMFR (Looking Glass)

+

looking-glass.io defines Looking Glass as: "an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse." [4]

+
A image posted by Gnif (Creator of the Looking Glass project) to a changelog thread on the Level1techs forum - an active community of VFIO users.
+

NUMA Node

+

Infogalactic defines NUMA as: "Non-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local memory faster than non-local memory (memory local to another processor or memory shared between processors)." [5]

+
A diagram depicting Non-Uniform Memory Access (NUMA) nodes.
+

Application Binary Interface (ABI)

+

Infogalactic defines an ABI as "the interface between two program modules, one of which is often a library or operating system, at the level of machine code." [6]

+
A diagram contrasting API and ABI as well as their respective roles in software compatibility.
+

SR-IOV

+

docs.microsoft.com defines SR-IOV as "The single root I/O virtualization (SR-IOV) interface is an extension to the PCI Express (PCIe) specification. SR-IOV allows a device, such as a network adapter, to separate access to its resources among various PCIe hardware functions." [7]

+
A diagram depicting host and guest interactions in a Single Root I/O Virtualization environment.
+

GVT-g

+

wiki.archlinux.org defines Intel GVT-g as "a technology that provides mediated device passthrough for Intel GPUs (Broadwell and newer). It can be used to virtualize the GPU for multiple guest virtual machines, effectively providing near-native graphics performance in the virtual machine and still letting your host use the virtualized GPU normally." [8]

+
A diagram of Intel's GVT-g (Graphics Virtualization Technology g).
+

VirGL

+
A diagram depicting GPU instruction redirects to a single host graphics driver.

lwn.net defines Virgl as: "a way for guests running in a virtual machine (VM) to access the host GPU using OpenGL and other APIs... The virgl stack consists of an application running in the guest that sends OpenGL to the Mesa virgl driver, which uses the virtio-gpu driver in the guest kernel to communicate with QEMU on the host." [9]

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Hypervisor_Support.html b/wiki/open-iov.org/index.php/Hypervisor_Support.html new file mode 100644 index 0000000..0ae37b4 --- /dev/null +++ b/wiki/open-iov.org/index.php/Hypervisor_Support.html @@ -0,0 +1,332 @@ + + + + +Hypervisor Support - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Hypervisor Support

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Platform Hypervisor +Virtual GPU support +Memory Sharing APIs +IOMMU Groups support +PCI forwarding +Mdev Support +SR-IOV Support +SIOV Support +
KVM +Yes +IVSHMEM +Yes +Yes (via VFIO) +Yes +Yes +In Development +
Xen +Yes +Grant Tables +No +Yes (via xen-pciback) +No +Yes +Unknown +
NVMM +Unknown +Unknown +No +Unknown +No +Unknown +No +
+ + +

KVM

+

This section will cover existing support in KVM for VFIO-Mdev and ongoing issues with it's existing implementation. +

+

Missing Functionality

+

Nested SR-IOV. +

+

Xen

+

This section will cover efforts to support the Xen hypervisor with open device mediation software. +

XAPI docs for virtual GPUs can be read here. +

+

Mdev drivers outside Dom0

+

Xen Hyperlaunch aims to disaggregate Dom0's monolithic functions. This includes a discrete domain for device drivers. +

+

Missing Functionality

+

IOMMU Groups (discussions around extending or reworking Xen's IOMMU to include IOMMU Groups is ongoing). +

+

Additional Documentation

+

For additional documentation check the XenProject Wiki. +

+

NVMM

+

This section will cover NetBSD's NVMM. +

+

Missing Functionality

+

VFIO. +

+

Additional Documentation

+

For additional documentation read From Zero to NVMM. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Intel.html b/wiki/open-iov.org/index.php/Intel.html new file mode 100644 index 0000000..e083ac2 --- /dev/null +++ b/wiki/open-iov.org/index.php/Intel.html @@ -0,0 +1,214 @@ + + + + +Intel - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Intel

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This page will document points of integration for virtualization in the Intel i915 driver. +

The i915 added SR-IOV feature enablement in this commit (April 26th 2022). Work is ongoing to upstream this code to i915 in the mainline Linux kernel. +

Driver API documentation can be read here: https://01.org/linuxgraphics/gfx-docs/drm/gpu/i915.html +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Intel_SR-IOV_APIs.html b/wiki/open-iov.org/index.php/Intel_SR-IOV_APIs.html new file mode 100644 index 0000000..12bc697 --- /dev/null +++ b/wiki/open-iov.org/index.php/Intel_SR-IOV_APIs.html @@ -0,0 +1,215 @@ + + + + +Intel - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Intel

+
+
From Open-IOV
+
(Redirected from Intel SR-IOV APIs)
+
+ +
+ Jump to navigation + Jump to search +

This page will document points of integration for virtualization in the Intel i915 driver. +

The i915 added SR-IOV feature enablement in this commit (April 26th 2022). Work is ongoing to upstream this code to i915 in the mainline Linux kernel. +

Driver API documentation can be read here: https://01.org/linuxgraphics/gfx-docs/drm/gpu/i915.html +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Introduction.html b/wiki/open-iov.org/index.php/Introduction.html new file mode 100644 index 0000000..7969494 --- /dev/null +++ b/wiki/open-iov.org/index.php/Introduction.html @@ -0,0 +1,268 @@ + + + + +Introduction - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Introduction

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This page will provide introductory context on where to begin reading. It will aim to give you a sense of primitives or foundational concepts used for GPU Virtualization. +

+ + +

Terminology

+

To get started with basic terminology around IO Virtualization read the Glossary page. This will get you familiar with a few terms and concepts used in IO Virtualization documentation. +

+

Primitives

+

The primitives section will cover a few notes on the basics of virtualizing a GPU or IO device. +

+

PCI BAR

+

PCI-e devices such as GPUs are used for input and output to and from a computer system. This input and output occurs using TLPs or Transaction Layer Packets over the PCI-e packet network. The IO device is presented to the host operating system as BARs or Base Address Registers. +

+

GPU Drivers

+

GPUs need software to communicate from a host computer system to the device - this software is called a GPU Driver and it typically interacts with the device using MMIO or Memory Mapped IO. MMIO is a set of operations used to allow normal CPU instructions to address registers in RAM in order to communicate with the PCI-e device. In the context of virtualization these registers must be presented into the device in a way that the guest operating system expects. Typically this is accomplished using VFIO or Virtual Function IO. VFIO is used for many methods of virtualizing the device including discrete assignment of a physical device, or virtual (partitioned) device assignment created with or without hardware assistance. +

+

IOMMU

+

MMU or Memory Management Units handle hardware enforced access to memory paging in computer systems. In the context of virtualized MMIO (Memory Mapped Input Output) devices an MMU is required to hardware enforce access to virtual devices (a Memory Management Unit for Input Output is known as an IOMMU). In the case of VFIO, groups of IOMMU devices (IOMMU Groups) are used to control access to the device. These IOMMU Groups often represent individual devices or sub-devices (in the context of Unassisted Virtualization (VFIO-Mdev), Hardware-Assisted Virtualization (SR-IOV), or Hardware-Assisted Paravirtualization) which may be bound to a VFIO bus driver (such as vfio-pci) which results in a VFIO Group (unit of ownership). +

+

Virtualization vs. Paravirtualization

+

Virtualization provides support for unmodified guest software or drivers in the context of GPUs. +

Paravirtualization provides support for "enlightened" guests or modified software which is aware of virtualization. +

+

Unassisted vs. Assisted

+

Similar to virtualization on CPUs with tools like Xen, IO devices can be virtualized on different kinds of computer hardware. Some devices provide hardware virtualization assistance (such as HVM mode in Xen) and some do not (such as PV mode in Xen), as a result an appropriate mode should be used depending on the availability of assistance. +

+

Further Reading

+

This section will cover what you should read to obtain more information about virtualization. +

+

Virtualization Fundamentals

+

The Virtualization Fundamentals article provides links to some of the foundational work which underly modern virtualization industry and development today. If you'd like to understand both the theories on which virtualization builds as well as the history of industry you should read several articles here. Notable Popek and Goldberg Virtualization Requirements as well as Xen and the Art of Virtualization provide a great foundations-first approach to learning about virtualization. +

+

Virtual I/O Internals

+

The Virtual I/O Internals article provides a detailed look into the interface layers between IO driver internals, the hypervisor, and the guest OS. This is a great article to read if you'd like to better understand how virtual machines can interact with both discretely assigned devices as well as those which have been partitioned using software or firmware. +

+

GPU Driver Internals

+

The GPU Driver Internals article provides information on how GPU drivers are structured internally as well as how they achieve virtualization. This includes high level architecture, device initialization, as well as memory mapping, and scheduling. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Introductory_Concepts_&_Definitions.html b/wiki/open-iov.org/index.php/Introductory_Concepts_&_Definitions.html new file mode 100644 index 0000000..85efcf9 --- /dev/null +++ b/wiki/open-iov.org/index.php/Introductory_Concepts_&_Definitions.html @@ -0,0 +1,269 @@ + + + + +Glossary - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Glossary

+
+
From Open-IOV
+ +
+ +
+ Jump to navigation + Jump to search +

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Definitions

+

This article will attempt to provide a glossary of common terms that are either related to/or often used in connection with virtualization for those who may need more context. +

If you have suggestions on how to improve the glossary you can contribute or join our community discussion thread to make suggestions. +

+

VFIO

+

Kernel.org defines VFIO or Virtual Function Input Output as "an IOMMU/device agnostic framework for exposing direct device access to userspace, in a secure, IOMMU protected environment." [1]

+
A diagram depicting direct VFIO passthrough of a GPU adapter.
+

Mdev

+

Kernel.org defines Virtual Function I/O (VFIO) Mediated devices as: "an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment... mediated core driver provides a common interface for mediated device management that can be used by drivers of different devices." [2]

+
A diagram depicting VFIO Mediated Device interacting with two vGPU guests.
+

Virtual CPU (vCPU)

+

A Virtual CPU (vCPU) is a CPU which has been virtualized to represent a percentage of the total hardware resource via preemptive scheduling.

+

Virtual GPU (vGPU)

+

A Virtual GPU (vGPU) is a GPU which has been virtualized to represent a percentage of the total hardware resource via preemptive scheduling or thread pinning (to EUs, or SMs) and/or a partition of the device's Video Random Access Memory (VRAM).

+

IVSHMEM

+

According to QEMU's GitHub repo: "The Inter-VM shared memory device (ivshmem) is designed to share a memory region between multiple QEMU processes running different guests and the host. In order for all guests to be able to pick up the shared memory area, it is modeled by QEMU as a PCI device exposing said memory to the guest as a PCI BAR." [3]

+
A diagram depicting an inter-vm shared memory device being used by two separate virtual machines.
+

KVMFR (Looking Glass)

+

looking-glass.io defines Looking Glass as: "an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse." [4]

+
A image posted by Gnif (Creator of the Looking Glass project) to a changelog thread on the Level1techs forum - an active community of VFIO users.
+

NUMA Node

+

Infogalactic defines NUMA as: "Non-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local memory faster than non-local memory (memory local to another processor or memory shared between processors)." [5]

+
A diagram depicting Non-Uniform Memory Access (NUMA) nodes.
+

Application Binary Interface (ABI)

+

Infogalactic defines an ABI as "the interface between two program modules, one of which is often a library or operating system, at the level of machine code." [6]

+
A diagram contrasting API and ABI as well as their respective roles in software compatibility.
+

SR-IOV

+

docs.microsoft.com defines SR-IOV as "The single root I/O virtualization (SR-IOV) interface is an extension to the PCI Express (PCIe) specification. SR-IOV allows a device, such as a network adapter, to separate access to its resources among various PCIe hardware functions." [7]

+
A diagram depicting host and guest interactions in a Single Root I/O Virtualization environment.
+

GVT-g

+

wiki.archlinux.org defines Intel GVT-g as "a technology that provides mediated device passthrough for Intel GPUs (Broadwell and newer). It can be used to virtualize the GPU for multiple guest virtual machines, effectively providing near-native graphics performance in the virtual machine and still letting your host use the virtualized GPU normally." [8]

+
A diagram of Intel's GVT-g (Graphics Virtualization Technology g).
+

VirGL

+
A diagram depicting GPU instruction redirects to a single host graphics driver.

lwn.net defines Virgl as: "a way for guests running in a virtual machine (VM) to access the host GPU using OpenGL and other APIs... The virgl stack consists of an application running in the guest that sends OpenGL to the Mesa virgl driver, which uses the virtio-gpu driver in the guest kernel to communicate with QEMU on the host." [9]

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/LIME_Is_Mediated_Emulation.html b/wiki/open-iov.org/index.php/LIME_Is_Mediated_Emulation.html new file mode 100644 index 0000000..bc7eb15 --- /dev/null +++ b/wiki/open-iov.org/index.php/LIME_Is_Mediated_Emulation.html @@ -0,0 +1,259 @@ + + + + +LIME Is Mediated Emulation - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

LIME Is Mediated Emulation

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

LIME Is Mediated Emulation is an in-development feature in which enables the execution of full performance Win64 binaries with full compatibility for all current and future software making use of the Windows ABI. An initial demo of this technology can be viewed here. +

+ + +

Design Goals

+

LIME aims to provide similar functionality to WINE Is Not Emulation, Valve's Proton / DXVK but with the use of graphics virtualization (vGPU/SR-IOV on consumer GPUs), a shared filesystem between host/guest, and KVM Frame Relay (high performance graphics buffer sharing via Inter-VM Shared Memory Device / IVSHMEM). +

Compared to WINE, and Proton the benefits of this approach are that Win64 binaries execute without the incompatibilities introduced in new games taking advantage of the latest version of DirectX, or when changes are introduced to the latest version of the Win64 ABI. +

This functionality is enabled via the use of GPU Virtual Machine (for consumer GPU Virtualization), VirtIO-FS (for host <-> guest filesystem sharing), Looking Glass (for host <-> guest shared frame buffer), and (for orchestration). +

+

Use-Cases

+

Win64 Subsystem

+

LIME's most immediate use case is around ABI compatibility with Win64 programs in environments without native support. +

A blog post detailing the problems which lead to this work can be read here. A summary of this post is traditional models for backwards compatibility with Application Binary Interfaces (ABIs) lock-in existing models for kernel/userland development and stagnate architectural innovation. On the other hand consumer oriented systems like those based on Darwin/XNU break backwards compatibility with user programs version to version of the system in order to introduce architectural improvements in the kernel / userland (for instance micro-service device drivers which may recover from faults at OS runtime). +

These two approaches might be considered two discretely separable models for software development 'enterprise' /'consumer' - LIME might then be considered a third approach which preserves the functions of both prior approaches (continual innovation afforded in the kernel-space and backwards compatibility with existing software libraries). +

ie: A method by which programs "import" a particular explicitly versioned ABI similar to how Docker provisions chroot resources like configuration files and support libraries, but extended to drivers, and the kernel. +

+

Win64 Orchestration

+

Because LIME necessarily provisions application data, program files, and NUMA-aware vCPU/vGPU resources (in the context of multi-GPU, multi-socket CPU systems) through for automatic execution by one or more VM guests LIME might provide an ideal architecture for orchestration of Win64 applications at scale. This could include execution of programs for game streaming in a server environment, or multiple applications in a single user environment for 'seamless-mode' execution of guest programs similar to that of QubesOS with hardware GPU acceleration added. +

+

Compatibility With Other ABIs

+

To solve the problems of 'ABI lock-in' discussed in the "Why Computers Suck" post it may be possible to port LIME support to multiple different guest operating systems allowing execution of any program with any ABI with near indistinguishable performance compared to native execution. +

+

Quality of Service (QoS)

+

VFIO-Mdev functionality like that used in GPU Virtual Machine (GVM) provides granular GPU resource allocation and load balancing functions similar to those seen in control groups (cgroups) as they are commonly applied today to RAM and CPU resources. In the context LIME VFIO-Mdev could be applied for load balancing of individual processes running in a virtualized state to ensure individual processes making use of the GPU cannot deny service to others on the system. +

+

Development Status

+

Development of this functionality is ongoing. Efforts to improve LIME are primarily focused on stabilization of shared filesystem functions. +

+

VirtIO-FS

+

VirtIO-FS provides shared filesystem functionality between host and guest using FUSE which is ideal for LIME, however in the context of Windows guests the C version of virtiofsd appears unstable (seen in virtio-win issue 550 [closed], 723 [closed], 724 [open]). Testing has been performed by members of the Open-IOV community which have shown initial signs of increased filesystem stability under continuous read/write loads using the Rust version of virtiofsd (virtiofsd-rs). +

While many programs can be stored in the VirtIO-FS shared directory some programs such as Steam don't want to install programs into the VirtIO-FS drive (seen as a secondary drive in Windows - in often as disk D:/ if no additional media is attached). This game installation behaviour (which drive the user may place their programs in) may not be in common with other game stores such as the Epic Games Store, or Good Old Games (GOG). +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Looking_Glass_KVMFR.html b/wiki/open-iov.org/index.php/Looking_Glass_KVMFR.html new file mode 100644 index 0000000..329fc22 --- /dev/null +++ b/wiki/open-iov.org/index.php/Looking_Glass_KVMFR.html @@ -0,0 +1,222 @@ + + + + +Looking Glass KVMFR - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Looking Glass KVMFR

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Looking Glass is an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse. +

+

Looking Glass Memory Protocol (LGMP)

+

LGMP is an Inter-VM Shared Memory Device (IVHSMEM) based memory sharing protocol for the KVM Frame Relay use-case (sharing of MMIO memory for use by GPU drivers between host and guest). +

+

Xen Support

+

It may be possible to port the Looking Glass Memory Protocol to Xen by substituting the use of the Grant Table memory sharing primitive in place of the IVSHMEM memory sharing primitive. +

+
A diagram depicting how Looking Glass memory device may be redirected over the network via Remote Direct Memory Access (RDMA).
+

Telescope

+

The LGMP protocol may also be extended over a high bandwidth network using the Telescope Looking Glass Proxy. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Mdev-GPU.html b/wiki/open-iov.org/index.php/Mdev-GPU.html new file mode 100644 index 0000000..de97b4e --- /dev/null +++ b/wiki/open-iov.org/index.php/Mdev-GPU.html @@ -0,0 +1,362 @@ + + + + +Mdev-GPU - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Mdev-GPU

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This page makes use of terms that are defined in the Open-IOV Glossary. If you're curious what a given term means you can check there for a definition. +


+

This page will be used to document the Mdev-GPU API as well as provide an overview of the internals of the Mdev-GPU package. +

Mdev-GPU's source code can be found here. +

+Module docs can be found here.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Compilation

+

Compiling Mdev-GPU from source is very simple however it can take a long time to complete (10 minutes for existing sources). +

If you'd like to compile Mdev-GPU yourself you can do so by cloning the repo and running the following two commands from within the repository directory: +

curl -sSL https://get.haskellstack.org/ | sh +

stack install +

These commands will generate all binaries provided by Mdev-GPU under the path ~/.local/bin/. +

If you would prefer not to wait for the program to compile you can find pre-compiled x86_64 binaries under the Releases section of the repository on GitHub. +

+

Installation

+

The binaries compiled on your local machine by Stack in the ~/.local/bin/ path or downloaded from Releases on GitHub should be copied to /usr/bin/. This can be accomplished both via install script (currently testing in ) or via management layer-agnostic package. +

+

Mdev-GPU Configuration

+

The Mdev-GPU repository provides Systemd service and example configurations for Mdev-CLI in the /etc/ folder. On installation the directories & files contained in the repository's /etc/ folder should be copied to the absolute path /etc/ on the user's computer. +

+

Systemd

+

GVM/Mdev-GPU exposes several of it's functions as Systemd services. +

As of the 0.1.0.0 release the following Systemd services are available: +

+
  • mdev-post.service
+
mdev-post.service
+

As the name would suggest mdev-post.service posts the GPU(s) in a state where they are ready to be virtualized. When the service is invoked the mdev-cli util registers Mdev callbacks and supported mediated device (Mdev) types with the Mediated Core according to the user's specified configuration at /etc/gvm/mdev-gpu/generate-vgpu-types.yaml. If you'd like to place your configuration file elsewhere and still have your configuration invoked on boot you can edit the systemd service ExecStart= line to specify an alternative path. +

+

Mdev-CLI

+

Configuration for Mdev-GPU can be found in the path /etc/gvm/mdev-gpu/. This path will by default contain several vendor-specific folders which may include configuration examples for various devices/architectures as well as the file generate-vgpu-types.yaml which you can configure to specify your desired Virtual GPU (vGPU) / VFIO-Mdev topologies as they are presented in the sysfsdev mdev_bus path and as seen by tools such as mdevctl. Once you have configured the available types your liking you can refresh the supported types registered with the Mediated Core by rebooting your machine or reloading the vendor driver kernel module then restarting mdev-post.service or by invoking mdev-cli. +


+The available yaml properties which may be specified in /etc/gvm/mdev-gpu/generate-vgpu-types.yaml are shown below. Note that fields with the [required] tag must be specified in the yaml file whereas fields with the [optional] tag may be omitted from configuration if you would prefer to rely upon default parameters instead. +

+
num
+

[required] +

num refers to the Mediated Device (Mdev) type number. This value specifies the profile's numerical identifier in the sysfsdev mdev_bus path. +

+
vDevId
+

[optional] +

The vGPU (Virtual GPU) PCI Device ID which should be presented to the guest. +

+
pDevId
+

[optional] +

The pGPU (Physical GPU) PCI Device ID which should be presented to the host. +

+
name
+

[optional] +

The GPU name presented to the guest. +

+
gpuClass
+

[optional] +

The class of GPU to use. +

available strings: +

"Compute" +

"Graphics" +

+
maxInstances
+

[required] +

maxInstances refers to the maximum number of instances available of any given Mediated Device (Mdev) profile. This number can be configured arbitrarily however it should ideally not be set to a value which allows for fbLen/fbRes values that allow a number of Mdev devices to be created which would exceed your device's available VRAM. +

+
virtDisplay
+

[optional] +

virtDisplay controls the topologies of virtual displays. virtDisplay exposes the following user configurable properties: +

+
numHeads
+

[optional] +

Number of heads [virtual monitors] available for each Mediated Device (Mdev). +

+
maxResX
+

[optional] +

Maximum width of the mediated display. +

+
maxResY
+

[optional] +

Maximum height of the mediated display. +

+
frlConfig
+

[optional] +

Frame rate limiter for the mediated display. +

+
frlEnable
+

[optional] +

Do we enable frame rate limiting or not? +

+
ecc
+

[optional] +

ecc refers to if error correcting memory should be used. +

+
fbLen
+

[required] +

fbLen is the framebuffer length (in megabytes). +

+
fbRes
+

[required] +

fbRes is the framebuffer reserved by the hypervisor (in megabytes). In most circumstances this value should scale to around 1/7th the size of your chosen fbLen value. +

+
mapVideoSize
+

[optional] +

Mappable video size in MBs, 24 by default. +

+
encCap
+

[optional] +

Percentage we use the NvEnc hardware. +

+
bar1Len
+

[optional] +

bar1Len refers to the size of the Base Address Registers for BAR1 (MSI) as presented by the VFIO File Descriptor. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Mediated_Device_Internals.html b/wiki/open-iov.org/index.php/Mediated_Device_Internals.html new file mode 100644 index 0000000..fb28c2e --- /dev/null +++ b/wiki/open-iov.org/index.php/Mediated_Device_Internals.html @@ -0,0 +1,1014 @@ + + + + +Virtual I/O Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtual I/O Internals

+
+
From Open-IOV
+
(Redirected from Mediated Device Internals)
+
+ +
+ Jump to navigation + Jump to search +

The following document details the internals of a VFIO (Virtual Function I/O) driven Shared I/O Device.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

This article places emphasis on the Virtual GPU (vGPU) use case however these concepts apply generically to virtualization of I/O devices (TPUs, NICs, storage peripherals, ect..). +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comparison of Assistance Modes +
Mdev Mode +SR-IOV Mode +SIOV Mode +
No hardware assistance needed. +Hardware assistance needed. +Hardware assistance needed. +
Host requires insight about guest workload. +Host ignorance of guest workload. +Host requires insight about guest workload. +
Error reporting. +No guest driver error reporting. +Error reporting. +
In depth dynamic monitoring. +Basic dynamic monitoring. +In depth dynamic monitoring. +
Software defined MMU guest separation. +Firmware defined MMU guest separation. +Firmware defined MMU guest separation. +
Requires deferred instructions to be supported by host software (support libraries). +Guest is ignorant of host supported software such as support libraries. + +
Routing interrupts. +Routing interrupts. +Routing interrupts. +
Device reset. +Device reset. +Device reset. +
Enable/Disable device. +Enable/Disable device. +Enable/Disable device. +
Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +
Single PCI requester ID. +Multiple PCI requester IDs. +Multiple PCI requester IDs. +
+ + +

All Modes

+

This section will cover concepts which apply both to Mdev Mode, SR-IOV Mode & SIOV Mode. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Alex Williamson. +

See references 2, 14, & 22 in the References (Talks & Reading Material) section. +

+

Binding VFIO devices

+
Figure 1: VFIO group nodes are unit of ownership that VFIO uses. See slides from: [2]
+
Figure 2: IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO Group inside the VFIO Container. See slides from: [2]
+
Figure 3: Using interrupts IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP), IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) to map memory and pin pages. See slides from: [2]
+
Figure 4: Using interrupt IOCTL(GROUP2, VFIO_GROUP_GET_FD, "0000:01:00.0") to obtain the VFIO Group file descriptor. See slides from: [2]
+

Figure 1: Binding devices to the vfio-pci driver results in VFIO group nodes. +

Opening the file "/dev/vfio/vfio" creates a VFIO Container. +

Figure 2: The interrupt routine IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO group inside the VFIO container. +

+

Programming the IOMMU

+

When this has been done IOCTL(CONTAINER, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU) can then be used to set an IOMMU type for the container which places it in a user interactable state. +

Once this IOMMU type state has been set and the VFIO container has been made interactable additional VFIO groups may be added to the container without requiring that the group's IOMMU type be set again as newly added groups automatically inherit the container's IOMMU context. +

+

VFIO Memory Mapped IO

+

Figure 3: Once the VFIO Groups have been placed inside the VFIO container and the IOMMU type has been set the user may then map and unmap which will automatically inserts Memory Mapped IO (MMIO) entries into the IOMMU as well as pin/unpin pages as necessary. This can be accomplished using IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP) for map/pin and IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) for unmap/unpin. +

+

Getting the VFIO Group File Descriptor

+

Figure 4: Once the device has been bound to a VFIO driver, set in a VFIO container, the VFIO container has it's IOMMU type set, and a memory map/page pin of the VFIO device has been completed a file descriptor can then be obtained for the device. This file descriptor can be used for interrupts (ioctls), to probe for information about the BAR regions, and configure the IRQs. +

+

VFIO device file descriptor

+

VFIO device file descriptors are divided into regions and each region is mapped into a device resource. Region count and info (file offset, allowable access, ect..) can be discovered through interrupt (IOCTL). Each file descriptor region corresponding to a PCI resource is represented as a file offset. +

In the case of RPC Mode this structure is emulated whereas in SR-IOV Mode the structure is mapped to a real PCI resource. +

+ + + + + + + + + + + + + + + + + +
BAR regions in a VGA PCI device. +
00:00.0 VGA compatible controller +
Region 0 Bar0 (Config Space) starts at offset 0 +
Region 1 Bar1 (MSI - Message Signaled Interrupts) +
Region 2 Bar2 (MSIX) +
Region 3 Bar3 +
Region 4 Bar4 +
Region 5 Bar5 (IO port space) +
Expansion ROM +
+

Below is what the file offsets looks like internally for each BAR region starting from address 0 and growing with the addition of former regions as you progress through the file. +

+ + + + + + + + + + + + + + + +
VFIO representation of PCI BAR regions offsets. +
<- File Offset -> +
0 -> A +A -> (A+B) +(A+B) -> (A+B+C) +(A+B+C) -> (A+B+C+D) +... +
Region 0 (size A) +Region 1 (size B) +Region 2 (size C) +Region 3 (size D) +... +
+

VFIO Interrupts

+

Guests communicate with the host via VFIO Interrupt Requests (IRQs). These are sent via an irqfd (IRQ File Descriptor). Similarly, the host receives these interrupts via eventfd (Event File Descriptor). The resulting data can be returned via a callback. +

+

IRQs

+

Device properties discovered via interrupt (IOCTL). +

+
Get Device Info
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_INFO +
struct vfio_device_info +
+argz + +
flags + +
+VFIO_DEVICE_FLAGS_PCI +
VFIO_DEVICE_FLAGS_PLATFORM +
VFIO_DEVICE_FLAGS_RESET +
num_irqs + +
num_regions + +
+

The IRQ VFIO_DEVICE_GET_INFO can provide information to distinguish between PCI and platform devices as well as the number of regions and IRQs for a particular device. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get Region Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_REGION_INFO +
struct vfio_region_info +
+argz + +
cap_offset + +
flags + +
+VFIO_REGION_INFO_FLAG_CAPS +
VFIO_REGION_INFO_FLAG_MMAP +
VFIO_REGION_INFO_FLAG_READ +
VFIO_REGION_INFO_FLAG_WRITE +
index + +
offset + +
size + +
+

Once the interrupt user knows the number of regions within a VFIO device they can use IRQ VFIO_DEVICE_GET_REGION_INFO to probe each region for additional information. This interrupt will return information such as if it can be read from or written to, if the device supports MMAP, as well as what the offset and size of the region is within the VFIO file descriptor. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get IRQ Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_IRQ_INFO +
struct vfio_irq_info +
+argz + +
count + +
flags + +
+VFIO_IRQ_INFO_AUTOMASKED +
VFIO_IRQ_INFO_EVENTFD +
VFIO_IRQ_INFO_MASKABLE +
VFIO_IRQ_INFO_NORESIZE +
index + +
+

VFIO_DEVICE_GET_IRQ_INFO is used to retrieve information about a device IRQ. +

VFIO_IRQ_INFO_AUTOMASKED is used to mask interrupts when they occur to protect the host. +

The upstream API can be read here (vfio.h) +

Sample mdev code to service this request can be found here, and here. +

+
Set IRQs
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_SET_IRQS +
struct vfio_irq_set +
+argz + +
count + +
data[] + +
flags + +
+VFIO_IRQ_SET_ACTION_MASK +
VFIO_IRQ_SET_ACTION_TRIGGER +
VFIO_IRQ_SET_ACTION_UNMASK +
VFIO_IRQ_SET_DATA_BOOL +
VFIO_IRQ_SET_DATA_EVENTFD +
VFIO_IRQ_SET_DATA_NONE +
index + +
start + +
+

VFIO_DEVICE_SET_IRQS is used to setup IRQs. Actions can be configured such as trigger which is when the device triggers an interrupt (IOCTL), masking and unmasking actions can be set. Bool and None data types are used for loopback testing of the device. Start and index may be used to modify subregions. +

The upstream API can be read here (vfio.h). +

+

Device Decomposure/Recomposure

+
Figure 5: Device Decomposure and Recomposure via VFIO.
Figure 5: Device Decomposure and Recomposure via VFIO. See slides from: [2]
+

Figure 5: Virtual Function IO (VFIO) devices are deconstructed in userspace into a set of VFIO primitives (MMIO pages, VFIO/IOMMU Groups, VFIO IRQs, File Descriptors). Recomposure of these devices occurs upon assignment of a Virtual Function (VF) to a QEMU virtual machine. +

+

Memory Management Unit (MMU)

+
Error creating thumbnail: File missing
Figure 6: MMU - GMMU IOVA translation/isolation.
+

Figure 6: This section will touch upon the mechanisms used for enforcement of Host Physical Address (HPA) to Guest Physical Address (GPA) isolation. +

+

MMIO Isolation (Platform MMU)

+

The platform's CPU communicates with the GPU by reading/writing to and from pinned MMIO pages in Random Access Memory (RAM). MMIO pages within the RAM are subject to IO Virtual Address (IOVA) translations by the platform's discrete MMU controller which is programmed by the CPU. These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the platform. +

+

VRAM Isolation (GPU GMMU)

+

The GPU core performs virtualized operations by reading/writing to and from shadow page tables in onboard Video Random Access Memory (VRAM). Shadow pages within the VRAM are subject to IO Virtual Address (IOVA) translations by the GPU's discrete GPU MMU controller (GMMU) which is programmed by the Embedded CPU (GPU co-processor). These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the virtual GPUs and multi-process isolation in single user environments. +

+

Platform MMIO <-> GPU Shadow Pages

+

In the context of VFIO pinned MMIO pages in RAM act as an interface to communicate with VRAM shadow pages allowing GPU drivers on the platform to send instructions to the GPU. When the GPU or Platform alters memory contained in a shadow page or pinned MMIO page the change is mirrored in the corresponding IO Virtual Address (IOVA). For example if shadow page 0 is changed by the GPU this change is mirrored in MMIO page 0 on the platform (the reverse example also applies). When communications occur between the platform and GPU the information first moves through the MMU/GMMU and is then written to RAM/VRAM. +

+
Figure 7: A depiction of region overlays within a VFIO file descriptor.
Figure 7: A depiction of region overlays within a VFIO file descriptor. See slides from: [2]
+

VFIO Quirks (region traps)

+

Figure 7: Regions of the PCI BAR require emulation (slow path) via emulated traps (known as quirks). These regions are primarily in PCI configuration space. QEMU may overlap a region overlay which when read/written to/from triggers a VM-exit to trap and emulate the region in order that appropriate translations may occur (such as those concerned with IO Virtual Address - IOVA). +

+
Peer-to-Peer DMA Isolation under IOMMU
Figure 8: Peer-to-Peer DMA Isolation under IOMMU. See slides from: [2]
+

Known IOMMU Issues

+

DMA Aliasing +

+
  • Not all devices generate unique IDs.
  • +
  • Not all devices generate IDs they should.
+

DMA Isolation +

+
  • Figure 8: Peer-to-Peer DMA Isolation. In many circumstances IO Virtual Address (IOVA) translations do not occur properly in the context of DMA peering. Transactions that occur through the IOMMU are unaffected.
+
Figure 0: Approches to GPU Virtualization.
Figure 0: Approaches to GPU Virtualization. See slides from: [61]
+

Mdev Mode

+

Mdev Mode (VFIO Mediated Device) is a method of virtualizing I/O devices enabling full API capabilities without the requirement for hardware assistance. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Neo Jia, Kirti Wankhede, Kevin Tian, Yiying Zhang, David Cowperthwaite, Kun Tian, Yaozu Dong, Tina Zhang, Gerd Hoffmann, & Zhi Wang. +

See references 1, 7, 8, 17, 18, 19, 70 in the References (Talks & Reading Material) section. +

+

Mediated Core

+

The mediated device framework made 3 major changes to the VFIO driver. +

+ +

The full list of these changes can be seen in the lists.gnu.org Qemu-devel mailing list archive. +

+

Device Initialization

+

This section will deal with how an Mdev driver is initialized. +

Sample mdev code for device initialization can be found here. +

+

Registering VFIO MDEV as a driver

+

VFIO Mdev must be registered as a driver. This register event occurs between the Mdev Driver Register Interface and the VFIO MDEV interface. +

+

Registering PCIE Device with the Mediated Core

+
Registering the mediated device.
Figure 9: Registering the mediated device. This step may be accomplished via the vendor driver or via GVM/Mdev-GPU for drivers which do not include support for Mdev functionality and/or do not support arbitrary Mdev types.
+

Figure 9: The vendor driver must register with the Mediated Core's Device Register Interface. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Registering Mediated Callbacks (CBs)

+

Figure 9: The vendor driver must now register Mediated Callbacks which it expects to receive from Mdev devices. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Creating a Mediated Device via mdev-sysfsdev API

+
Figure 10: Echoing a UUID into the mdev-sysfsdev API. This functionality is included in mdevctl and in . See slides from: [1]
+

Figure 10: The user of an mdev capable device driver may echo values such as a UUID into the mdev-sysfsdev interface to create a unique mediated device. UUIDs must be unique per mdev device within a host. +

+
Figure 10: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor.
Figure 11: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor. See slides from: [1]
+

QEMU adds VFIO device to IOMMU container-group

+

Figure 11: When starting a QEMU process with a VFIO-mdev attached QEMU calls the VFIO API to add the VFIO device to an IOMMU container/group. QEMU then runs the IOCTL to obtain a file descriptor for the device. +

+

QEMU passes mdev device file descriptor to VM

+
Figure 11: QEMU presenting the VFIO file descriptor into the virtual machine.
Figure 12: QEMU presenting the VFIO file descriptor into the virtual machine. See slides from: [1]
+

Figure 12: Once QEMU has obtained the VFIO file descriptor for the Mdev device via IOCTL it is then QEMU's job to present the file descriptor into the virtual machine so that the mdev may be used by the guest. +

+

Instruction Execution

+
Figure 13: A simple diagram of signalling from host to guest (via irqfd) & guest to host (via ioeventfd) From blog.allenx
+

Figure 13: Mdev Mode moves instruction information across a virtual function (VF) device using Remote Procedure Calls generally by way of software interrupt (IOCTL). Signals to and from the guest and the host GPU driver may be passed over file descriptors such as the Interrupt Request File Descriptor (irqfd) and IO Event File Descriptor (ioeventfd). +The irqfd may be used to signal from the host into the guest whereas the ioeventfd may be used to signal from the guest into the host. Guest GPU instructions which would normally serialize as pRPCs (physical Remote Procedure Calls) are instead serialized from the guest as vRPCs (virtual Remote Procedure Calls) which are executed by the host mediated driver. +

+

IRQ remapping

+

Interrupt Requests (IRQs) must be remapped (trapped for virtualized execution) to protect the host from sensitive instructions which may affect global memory state. +

+

Interrupt Injection

+

-- +

--Researching-- +

-- +

+

Memory Management

+

Mdev memory management is handled by vendor driver software. +

+

Region Passthrough

+

Guests may be presented with emulated memory regions or via passthrough regions or a mixture of the two such as in the case of passthrough regions with BAR 0 configuration space emulation while other regions are passthrough'd. +

+
Emulated Regions
+

Emulated memory regions use indirect emulated communication requiring a VM-exit (slow). These regions are often used for virtual PCI config space such as in this sample code. +

+
Passthrough Regions
+

Passthrough memory regions use direct communication requiring no VM-exit (fast). +

+
Region Access
+
Figure 13: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs
Figure 14: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs. See slides from: [1]
+

Figure 14: QEMU gets region information via VFIO User API (UAPI) from the vendor driver through VFIO-mdev and Mediated Callbacks. +

+
Error creating thumbnail: File missing
Figure 15: Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation. See slides from: [1]
+

Figure 15: The guest's vendor driver accesses the Mdev MMIO trapped region backed by a mdev file descriptor (fd) which triggers an Extended Page Table (EPT) violation. +

+
Figure 15: KVM services EPT violation and forwards to QEMU VFIO PCI driver.
Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. See slides from: [1]
+

Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. +

+
Figure 16: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor.
Figure 17: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor. See slides from: [1]
+

Figure 17: QEMU convert request from KVM to R/W access to Mdev file descriptor. +

+

EPT Page Violations

+

Guest Memory Mapped IO (MMIO) trips Extended Page Table (EPT) violations which are trapped by the host MMU. KVM services EPT violations and forwards to QEMU VFIO PCI driver. QEMU then converts the request from KVM to R/W access to the Mdev File Descriptor (FD). Reads and writes are then handled by the host GPU device driver via mediated callbacks (CBs) and VFIO-mdev. +

+

Mediated DMA Translations

+

-- +

--Researching-- +

-- +

Because memory is not statically allocated by the vendor driver under the mediated device framework there is no requirement to make use of traditional VFIO pinned pages (via the vfio-pci module) rather MMIO memory can be mapped at runtime incrementally. As a result non-standard mediated device vfio stub modules may be used. +

Figure 18: Memory regions get added by QEMU. +

+
Memory Regions Added by QEMU
Figure 18: Memory Regions Added by QEMU. See slides from: [1]
+

Figure 19: QEMU calls VFIO_DMA_MAP via Memory listener. (not just guest physical memory but also device memory will be added through this memory listener) +

+
QEMU calls VFIO DMA MAP via Memory listener
Figure 19: QEMU calls VFIO DMA MAP via Memory listener. See slides from: [1]
+
Type 1 IOMMU Tracks VA-GFN
Figure 20: Type 1 IOMMU Tracks <VA, GFN>. See slides from: [1]
+

Figure 20: Type 1 IOMMU tracks <VA, GFN (Guest Frame Number)>. We build a table to list the QEMU VAs and track the their mapping relation to Guest Frame Numbers (GFNs). +

+

Scheduling

+

Scheduling is handled by the host mdev driver. +

+

Kernel API

+

Kernel documentation used for implementing a VFIO Mediated Device may be found at kernel.org. +

+

Sample Code

+

Sample code for various mdev implementations may be found below: +

Mediated Virtual PCI Display Host Device: +

+
  1. mdpy.c
  2. +
  3. mdpy-fb.c
  4. +
  5. mbochs.c.
+

Serial PCI Port-based Mediated Device: +

+
  1. mtty.c.
+
Compilation
+

To compile the kernel modules linked above you should have your distro's equivalent of the build-essential package installed. The included Makefile should provide all that is necessary to successfully compile the kernel modules. You can type the following command to compile the modules from within the directory: +

make +

When the make operation has been completed successfully the directory will now contain .ko files. These files are the binary kernel modules. +

+
Loading Kernel Modules
+

Now that you have compiled the kernel modules you may load them via the insmod command. +

For example to load the mtty.ko module run the following command from within the directory where you built the modules: +

insmod mtty.ko +

+
Unloading Kernel Modules
+

To unload any of the kernel modules you may make use of the rmmod command. +

For example to unload the mtty.ko module run the following command: +

rmmod mtty.ko +

+
Additional Documentation
+

An additional guide explaining how to make use of the mtty.c sample code may be found at line 308 of the kernel.org VFIO Mediated Device documentation. +

+

Mdev Mode Requirements

+

Driver Support. +

Software HPA<->GPA Boundary Enforcement. +

+

SR-IOV Mode

+

SR-IOV Mode (Single Root I/O Virtualization) involves hardware assisted virtualization on I/O peripherals. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Zheng Xiao, Jerry Jiang, & Ken Xue. +

See reference 6 in the References (Talks & Reading Material) section. +

+

Instruction Execution

+

SR-IOV communicates instructions from a virtual function (VF) directly to the PCI BAR. +

+

Memory Management

+

Guests are presenting with passthrough memory regions by the device firmware. +

+

Scheduling

+

Scheduling may be handled by the host mdev driver and/or the device firmware. +

+

SR-IOV Mode Requirements

+

Driver Support. +

Device SR-IOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

SIOV Mode

+

SIOV (Scalable I/O Virtualization) involves the combination of concepts form both SR-IOV Mode and Mdev Mode as well as novel concepts like shared IOMMU aware buffers and offloading of PCI config space VM-exits (slow path) to a discrete controller. +

Revision 1.0 of the SIOV specification can be read on the Open Compute Project website. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Kevin Tian, Tina Zhang, Xin Zeng, Yi Liu. +

See references 3, 4, 5, 16, 17, 18, 19, 20, 21 in the References (Talks & Reading Material) section. +

+

Memory Management

+

Enhancements to Intel VT-d introduce new 'Scalable Mode' to allow the platform to assign more granular IOMMU allocations to mediated devices (mdev memory management). This change is referred to as an IOMMU Aware Mediated Device. +

+

IOMMU Aware Mediated Device

+

SIOV made several changes to the VFIO driver, Intel IOMMU, and Mediated Device Framework. +

The full list of these changes can be seen in the mailing list archive on lwn.net under (vfio/mdev: IOMMU aware mediated device). +

+

Shared Hardware Workqueues

+

SIOV makes use of Shared Hardware Workqueues which may be accessed by processes or Virtual Machines. +

According to kernel.org: "In order to allow the hardware to distinguish the context for which work is being executed in the hardware by SWQ interface, SIOV uses Process Address Space ID (PASID), which is a 20-bit number defined by the PCIe SIG. PASID value is encoded in all transactions from the device. This allows the IOMMU to track I/O on a per-PASID granularity in addition to using the PCIe Resource Identifier (RID) which is the Bus/Device/Function." +

+

SIOV Mode Requirements

+

Driver Support. +

Device SIOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

References (Talks & Reading Material)

+
  1. [2016] vGPU on KVM - A VFIO Based Framework by Neo Jia & Kirti Wankhede - slides
  2. +
  3. [2016] An Introduction to PCI Device Assignment with VFIO by Alex Williamson - slides
  4. +
  5. [2017] Scalable I/O Virtualization by Kevin Tian
  6. +
  7. [2019] Bring a Scalable IOV Capable Device into Linux World by Xin Zeng & Yi Liu - slides
  8. +
  9. Scalable I/O Virtualization Revision 1.0
  10. +
  11. [2018] Live Migration Support for GPU with SRIOV by Zheng Xiao, Jerry Jiang & Ken Xue - slides
  12. +
  13. [2017] Intel GVT-g: From Production to Upstream - Zhi Wang, Intel
  14. +
  15. [2016] Qemu Graphics Update 2016 by Gerd Hoffmann
  16. +
  17. IOCTL
  18. +
  19. eventfd - root/virt/kvm/eventfd.c
  20. +
  21. (kernel diff:: KVM: irqfd)
  22. +
  23. (kernel diff:: KVM: add ioeventfd support)
  24. +
  25. KVM irqfd & ioeventfd
  26. +
  27. VFIO - Virtual Function I/O - root/virt/kvm/vfio.c
  28. +
  29. VFIO Mediated Devices
  30. +
  31. IOMMU Aware Mediated Device
  32. +
  33. Hardware-Assisted Mediated Pass-Through with VFIO by Kevin Tian
  34. +
  35. [2017] Generic Buffer Sharing Mechanism for Mediated Devices by Tina Zhang
  36. +
  37. [2019] Toward a Virtualization World Built on Mediated Pass-Through - Kevin Tian
  38. +
  39. Auxiliary Bus
  40. +
  41. Shared Virtual Addressing
  42. +
  43. vfio.blogspot.com
  44. +
  45. XenGT by Kevin Tian
  46. +
  47. VMWare Academic Publications: GPU Virtualization by Micah Dowty & Jeremy Sugerman
  48. +
  49. PCI SIG I/O Virtualization
  50. +
  51. VMGL by the University of Toronto Computer Science Department
  52. +
  53. Kepler VGX Hypervisor
  54. +
  55. Intel Virtualization Technology for Directed I/O (VT-d): Enhancing Intel platforms for efficient virtualization of I/O devices
  56. +
  57. DMA-Mapping.txt (Dynamic DMA Mapping)
  58. +
  59. KVM MMU Virtualization by Xiao Guangrong
  60. +
  61. OSDEV: PCI
  62. +
  63. Down to the TLP: How PCI express devices talk (Part I)
  64. +
  65. Down to the TLP: How PCI express devices talk (Part II)
  66. +
  67. Intel ACRN: Enabling SR-IOV Virtualization
  68. +
  69. Kernel.org sysfs-bus-pci
  70. +
  71. Linux Kernel Labs: Memory Mapping
  72. +
  73. Inside Windows Page Frame Number (PFN) - Part 1
  74. +
  75. Direct Rendering Infrastructure (DRI)
  76. +
  77. DRI User Guide
  78. +
  79. Linux Kernel Labs: IO Virtualization
  80. +
  81. Gallium3D: Main Page
  82. +
  83. Gallium3D Wiki
  84. +
  85. Gallium3D talk from XDS 2007
  86. +
  87. Memory Management High Level Design (ARCN)
  88. +
  89. Block Architecture Diagrams for Geforce series
  90. +
  91. Block diagrams for 40 series instruction format
  92. +
  93. PCI Configuration Space
  94. +
  95. GPU virtual memory in WDDM 2.0
  96. +
  97. Intel Graphics Programmer's Reference Manuals (PRM)
  98. +
  99. i915: Hardware Contexts (and some bits about batchbuffers)
  100. +
  101. i915: The Global GTT Part 1
  102. +
  103. i915: Aliasing PPGTT Part 2
  104. +
  105. i915: True PPGTT Part 3
  106. +
  107. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  108. +
  109. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  110. +
  111. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  112. +
  113. A deep dive into QEMU: PCI slave devices
  114. +
  115. Debugging QEMU Guests with GDB (start & stop, examine state like registers & memory, set breakpoints & watchpoints)
  116. +
  117. IOMMU Introduction
  118. +
  119. Arch Wiki: Intel Graphics
  120. +
  121. An Introduction to Intel Graphics Virtualization Technology (legacy GVT-g) by Zhi Wang
  122. +
  123. Kernel.org: vfio iommu type1: Add support for mediated devices
  124. +
  125. Hardware and Compute Abstraction Layers For Accelerated Computing Using Graphics Hardware and Conventional CPUs
  126. +
  127. More Shadow Walker: The Progression of TLB-Splitting on x86
  128. +
  129. MMU Virtualization Via Intel EPT: Technical Details
  130. +
  131. Alex Williamson Github: VFIO Development (tree next)
  132. +
  133. GPU PMU: performance monitoring with perf event
  134. +
  135. Remote Procedure Call (RPC)
  136. +
  137. Virtual Open Systems: API Remoting
  138. +
  139. A Full GPU Virtualization Solution with Mediated Pass-Through by Yiying Zhang, David Cowperthwaite, Kun Tian, and Yaozu Dong - [Paper] - [Video] - [Slides 1] - [Slides 2]
  140. +
  141. [2014] KvmGT: A Full GPU Virtualization Solution by Jike Song
  142. +
  143. docs.kernel.org: DRM Memory Management
  144. +
  145. docs.kernel.org: PCI Bus Subsystem
  146. +
  147. openglbook.com: What is OpenGL?
  148. +
  149. [2020] Getting pixels on screen: introduction to Kernel Mode Setting (KMS) by Simon Ser - slides
  150. +
  151. Dynamic Mediation for Live Migration VFIO-PCI
  152. +
  153. DRM Management Via CGroups
  154. +
  155. DRM: Add GEM ("graphics execution manager") to i915 driver.
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Merged_Drivers.html b/wiki/open-iov.org/index.php/Merged_Drivers.html new file mode 100644 index 0000000..5bb106d --- /dev/null +++ b/wiki/open-iov.org/index.php/Merged_Drivers.html @@ -0,0 +1,290 @@ + + + + +Merged Drivers - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Merged Drivers

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

The following page will provide specifications and details on the current state of host DRM + VFIO-Mdev drivers in support of various vendors. +

In the context of this page the term "Merged Driver" refers to drivers which allow simultaneous acceleration of the host using a device's PF (Physical Function) and acceleration of guests using one or more VFs (Virtual Functions) created using the same device. +

+Merged functionality is currently supported for drivers which both make use of VFIO-Mdev and SR-IOV functionality depending on the vendor and driver implementation.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Intel i915

+
Intel's slides mention the ability to accelerate up to '8 VMs plus DOM0'. Source: https://01.org/sites/default/files/documentation/an_introduction_to_intel_gvt-g_for_external.pdf
+

Intel currently supports host DRM and VFIO-Mdev/SR-IOV functionality in it's current i915 driver sources (VFIO-Mdev/GVT-g) and upstreaming i915 driver sources (VFIO-Mdev/SR-IOV). +

+

Known Issues

+
  1. SR-IOV functionality is undocumented in the i915 driver API documentation.
    Confirmed affected versions: *
    A diagram depicting i915's shared host + VFIO-Mdev driver model.
+

Resolved Issues

+
  1. Multiplexing functionality requires use modified KVM and Xen hypervisors (KVMGT/XenGT).
    Confirmed affected versions:
    current i915 driver sources (GVT-g)
    Fixed in:
    upstreaming i915 driver sources (SR-IOV)
+

Nvidia

+

Known Issues

+
  1. Power management on laptops running mediated graphics functionality may causes graphical errors when not plugged in to AC power.
    Confirmed affected versions: 460.32.01, 460.73.04
    Possible mitigation: lore.kernel.org: "vfio/pci: Change the PF power state to D0 before enabling VFs"
  2. +
  3. VFIO-vmalloc errors may occur as a result of page collisions between host & guest on GPUs with smaller VRAM frame buffer sizes.
    Confirmed affected versions: 460.32.01, 460.73.04
  4. +
  5. Mdev service daemons may crash or load incorrectly requiring a service restart or reboot during host runtime.
    Confirmed affected versions: 460.32.01, 460.73.04, 510.xx.xx
  6. +
  7. Guest drivers fail to initialize correctly when VFIO-Mdev devices are mixed with some VFIO passthrough'd USB hubs.
    Confirmed affected versions: 460.73.01
+

Resolved Issues

+
  1. Upon executing QEMU mdev device initialization for a second Mdev an IOMMU group binding error occurs in QEMU preventing the device from being brought up.
    Confirmed affected versions: 460.32.01, 460.73.04
    Fixed in: 510.xx.xx
+

Module Configuration

+

Depending on your use-case the use of some additional parameters when booting the system may be helpful. +

Here is a list of some parameters which may be used when loading the module via GRUB or Systemd-boot. +

+ + + + + + + + + + + + + +
Module Parameters +
Parameter +Description +Side-Effects +
cudahost=1 +Allows use of CUDA on the host system. +Windows guests may fail. +
nvidia.vgpukvm=0 +Disables GPU virtualization on the host. + +
+

AMDGPU

+

At this time AMDGPU does not currently support VFIO-Mdev functionality. It may be possible to incorporate Mdev Mode mediated device support similar to those functions in nvidia.ko and i915.ko in the Linux kernel's AMDGPU driver sources to produce a driver suitable for merged host+guest DRM for use with AMD GPU devices. +

+

Known Issues

+
  1. Host DRM does not work alongside guest VFIO-Mdev.
    Confirmed affected versions: *
  2. +
  3. The amdgpu kernel module doesn't contain hooks for guest signalling via irqfd & ioeventfd used for VFIO-mdev callbacks.
    Confirmed affected versions: *
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Open-IOV:About.html b/wiki/open-iov.org/index.php/Open-IOV:About.html new file mode 100644 index 0000000..cd08f58 --- /dev/null +++ b/wiki/open-iov.org/index.php/Open-IOV:About.html @@ -0,0 +1,214 @@ + + + + +Open-IOV:About - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Open-IOV:About

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization.  +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/OpenRM.html b/wiki/open-iov.org/index.php/OpenRM.html new file mode 100644 index 0000000..b904395 --- /dev/null +++ b/wiki/open-iov.org/index.php/OpenRM.html @@ -0,0 +1,564 @@ + + + + +OpenRM - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

OpenRM

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

OpenRM refers to the open sourcing of the NVIDIA kernel module for Linux, specifically the RM Core or the internal resource manager. +

+Through the open sourced code (located here) we have been able to deduce 7 top level APIs that are being exposed to the Linux developers.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Interaction With OpenRM

+

All of OpenRM is a high scale object oriented abstraction layer for the GPU, all resources are internally classes which have control definitions (methods) on how you can use them. These classes can also represent physical resources or engines. +

+

Alloc (Client)

+

This is analogous to calling an object constructor in a higher level programming language, such as C#. +

The data for this call requires the following components: +

+
  1. hRoot - RM Client Id (given by the kernel module for an individual process that is interacting with the kernel module).
  2. +
  3. hObjectParent - Parent of the resource we are allocating.
  4. +
  5. hObjectNew - New object to allocate.
  6. +
  7. hClass - Class of the object we are dealing with.
  8. +
  9. pAllocParams - Pointer to values passed into the constructor call.
  10. +
  11. status - Status of the constructor call (did it succeed or fail)
+

Alloc Memory 64

+

This creates a CPU's mapping to a resource. +

The data for this call requires the following components: +

+
  1. hRoot - RM Client Id (given by the kernel module for an individual process that is interacting with the kernel module).
  2. +
  3. hObjectParent - Parent of the resource we create the CPU mapping to.
  4. +
  5. hObjectNew - Mapping object resource id.
  6. +
  7. hClass - Class of the mapped object.
  8. +
  9. flags - Flags to use on the mapped object.
  10. +
  11. pMemory - pointer for the memory to map.
  12. +
  13. pLimit - Edge of memory map.
  14. +
  15. status - Status of the constructor call.
+

NOTE: Seems to be deprecated. +

+

Control

+

This is a control command which is analogous to calling a method on a class. +

The data for this call requires the following components: +

+
  1. hClient - RM Client Id.
  2. +
  3. hObject - Object id.
  4. +
  5. cmd - Method to call.
  6. +
  7. params - Parameters into this method.
  8. +
  9. paramsSize - Size of the params.
  10. +
  11. status - Status of the control call.
+

NOTE: The control will overwrite the object we pass in over the params pointer. +

+

Dup Object

+

Duplicates the object, or clones the object, which is a deep copy. This procedure can be used across processes in order to produce shared memory. +

The data for this call requires the following components: +

+
  1. hClient - RM Client Id.
  2. +
  3. hParent - Parent of the object.
  4. +
  5. hObject - Object destination for duplicating.
  6. +
  7. hClientSrc - Client source id.
  8. +
  9. hObjectSrc - Object source.
  10. +
  11. flags - Flags to use.
  12. +
  13. status - Status of the duplication.
+

Free

+

Frees an object from the object tree. +

The data for this call requires the following components: +

+
  1. hRoot - Client Id.
  2. +
  3. hObjectParent - Parent of the object.
  4. +
  5. hObjectOld - Object to call the destructor on.
  6. +
  7. status - Status of the free.
+

Vid Heap Control

+

TODO: Figure out what this does. +

NOTE: Seems to be deprecated. +

+

Map Memory

+

This seems to be the same as alloc memory but seems to be used more often. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device id.
  4. +
  5. hMemory - Memory resource.
  6. +
  7. offset - Offset of the memory.
  8. +
  9. length - Length of the memory.
  10. +
  11. pLinearAddress - Pointer for returned address.
  12. +
  13. status - Status of the map memory.
  14. +
  15. flags - Flags to use.
+

Unmap Memory

+

This unmaps the CPU memory mapping from the resource. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device Id.
  4. +
  5. hMemory - Memory Id.
  6. +
  7. pLinearAddress - pointer to virtual address.
  8. +
  9. status - Status of the unmap command.
  10. +
  11. flags - Flags to use.
+

Alloc Context DMA 2

+

Allocates a context for DMA. +

The data for this call requires the following components: +

+
  1. hObjectParent - Object parent.
  2. +
  3. hSubDevice - Sub device to allocate on.
  4. +
  5. hObjectNew - Context id.
  6. +
  7. hClass - Type of class.
  8. +
  9. flags - Flags to use.
  10. +
  11. selector - UNKNOWN.
  12. +
  13. hMemory - Handle for Memory resource to DMA map.
  14. +
  15. offset - Offset for the DMA mapping.
  16. +
  17. limit - Limit of the DMA map.
  18. +
  19. status - Status of the allocation.
+

NOTE: Seems to be deprecated. +

+

Map Memory DMA

+

Map a region of memory for DMA access. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device Id.
  4. +
  5. hDma - DMA Id.
  6. +
  7. hMemory - Memory Id.
  8. +
  9. offset - Offset of the region.
  10. +
  11. limit - Limit of the region.
  12. +
  13. flags - flags to use.
  14. +
  15. dmaOffset - Offset of the mapping.
  16. +
  17. status - Status of the map Memory DMA.
+

Un-map Memory DMA

+

Unmaps a region of memory for DMA access. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device Id.
  4. +
  5. hDma - DMA handle.
  6. +
  7. hMemory - Memory handle.
  8. +
  9. flags - Flags to use.
  10. +
  11. dmaOffset - DMA Offset to unmap.
  12. +
  13. status - Status of the unmap Memory DMA.
+

Bind Context DMA

+

Binds a context for DMA interaction to a channel. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hChannel - Channel Id.
  4. +
  5. hCtxDma - Context for DMA Id.
  6. +
  7. status - Status of the bind context DMA.
+

NOTE: Seems to be deprecated. +

+

Share

+

Sharing of a resource between multiple clients. +

TODO: Understand this sharing more. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hObject - Resource Id.
  4. +
  5. sharePolicy - Share policy.
  6. +
  7. status - Status of sharing.
+

Add VBlank Callback

+

TODO: Figure out what this does. +

NOTE: Seems to be deprecated. +

+

Engines

+

There are engines which internally act as classes inside the OpenRM driver. +

These classes have a few key components that make them unique. +

+

Table of Engines

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Engines +
Engine +Description +
Invalid +Does not exist. +
Software +Abstraction layer for software processes inside the OS Software. +
GPU +Interaction layer with the GPU. +
Falcon +Interaction with the Falcon on the GPU. +
Master Control +Unknown. +
Kernel Master Control +Interaction with the PMC.[1] +
Private Ring +Interaction with a private messaging ring. +
Software Interrupt +Interaction with software interrupts. +
Memory System +Interaction with the memory system. +
Kernel Memory System +Interaction with the kernel memory system. +
Memory Manager +Interaction with the memory management system. +
FBFlcn +Interaction with the FBFlcn subsystem. +
TMR +Interaction with the TMR on specific chips. +
DMA +Interaction with a GPU's DMA access. +
Kernel FIFO +First in First out queue in the GPU driver. +
FIFO +Interaction with a generic FIFO. +
OS +Interaction with the OS. +
BUS +PCI Bus interaction +
Kernel BUS +Internal module BUS. +
INFOROM +Interaction with the INFOROM Region on the GPU. +
PERF +Unknown. +
Kernel PERF +Unknown. +
BIF +Unknown. +
Kernel BIF +Unknown. +
SF +Unknown. +
GPIO +Interaction with GPIO. +
CLK +Clock manager system. +
Kernel Display +Kernel Display system. +
DISP +Display system. +
DPU +Data Processing Unit. +
+ +
+ +
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:Contributions/Arthur.html b/wiki/open-iov.org/index.php/Special:Contributions/Arthur.html new file mode 100644 index 0000000..ff5d72f --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:Contributions/Arthur.html @@ -0,0 +1,547 @@ + + + + +User contributions for Arthur - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

User contributions for Arthur

+
+ + +
+ +
+ Jump to navigation + Jump to search +
Search for contributionsExpandCollapse
⧼contribs-top⧽
⧼contribs-date⧽
+ + +
+
+

(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)

+

(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)

+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:Random.html b/wiki/open-iov.org/index.php/Special:Random.html new file mode 100644 index 0000000..b2e2641 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:Random.html @@ -0,0 +1,212 @@ + + + + +AMD - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

AMD

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Mdev Drivers

+

Hardware Support

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:SpecialPages.html b/wiki/open-iov.org/index.php/Special:SpecialPages.html new file mode 100644 index 0000000..c704cf1 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:SpecialPages.html @@ -0,0 +1,283 @@ + + + + +Special pages - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Special pages

+
+ +
+
+ +
+ Jump to navigation + Jump to search +

Maintenance reports

+

Lists of pages

+

Login / create account

+

Users and rights

+

Recent changes and logs

+

Media reports and uploads

+

Data and tools

+

Redirecting special pages

+

High use pages

+

Page tools

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Articles.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Articles.html new file mode 100644 index 0000000..a4e4148 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Articles.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "Articles" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Articles"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Articles: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/CPU_Support.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/CPU_Support.html new file mode 100644 index 0000000..57fc441 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/CPU_Support.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "CPU Support" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "CPU Support"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to CPU Support: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Application_Binary_Interface_(ABI).png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Application_Binary_Interface_(ABI).png.html new file mode 100644 index 0000000..708aed2 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Application_Binary_Interface_(ABI).png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Application Binary Interface (ABI).png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Application Binary Interface (ABI).png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Application Binary Interface (ABI).png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html new file mode 100644 index 0000000..6037a5b --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Device_Decomposure_and_Recomposure_via_VFIO.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Device Decomposure and Recomposure via VFIO.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Device Decomposure and Recomposure via VFIO.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Device Decomposure and Recomposure via VFIO.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html new file mode 100644 index 0000000..617306a --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Echoing_a_UUID_into_the_sysfsdev_API.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Echoing a UUID into the sysfsdev API.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Echoing a UUID into the sysfsdev API.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Echoing a UUID into the sysfsdev API.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_Approches_to_GPU_Virtualization..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_Approches_to_GPU_Virtualization..png.html new file mode 100644 index 0000000..8f53ec9 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_Approches_to_GPU_Virtualization..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 0- Approches to GPU Virtualization..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 0- Approches to GPU Virtualization..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 0- Approches to GPU Virtualization..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_i915_vGPU_Scheduling.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_i915_vGPU_Scheduling.png.html new file mode 100644 index 0000000..ba2a604 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_0-_i915_vGPU_Scheduling.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 0- i915 vGPU Scheduling.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 0- i915 vGPU Scheduling.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 0- i915 vGPU Scheduling.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html new file mode 100644 index 0000000..50c2b38 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 2- Firmware status information for an Intel DG2 device..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 2- Firmware status information for an Intel DG2 device..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 2- Firmware status information for an Intel DG2 device..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Intel_vGPU_Scheduler.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Intel_vGPU_Scheduler.png.html new file mode 100644 index 0000000..03b7b3e --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_2-_Intel_vGPU_Scheduler.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 2- Intel vGPU Scheduler.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 2- Intel vGPU Scheduler.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 2- Intel vGPU Scheduler.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html new file mode 100644 index 0000000..33618e7 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html new file mode 100644 index 0000000..9bdff92 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 6- MMU - GMMU IOVA translation-isolation..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 6- MMU - GMMU IOVA translation-isolation..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 6- MMU - GMMU IOVA translation-isolation..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html new file mode 100644 index 0000000..cf2ae0d --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html new file mode 100644 index 0000000..21132ce --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:I915_Scheduling_Events_and_Requests.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:I915_Scheduling_Events_and_Requests.png.html new file mode 100644 index 0000000..94fdded --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:I915_Scheduling_Events_and_Requests.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:I915 Scheduling Events and Requests.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:I915 Scheduling Events and Requests.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:I915 Scheduling Events and Requests.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IOCTL_set_VFIO_container.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IOCTL_set_VFIO_container.png.html new file mode 100644 index 0000000..956f99a --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IOCTL_set_VFIO_container.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:IOCTL set VFIO container.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:IOCTL set VFIO container.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:IOCTL set VFIO container.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IVSHMEM.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IVSHMEM.png.html new file mode 100644 index 0000000..3370bf9 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:IVSHMEM.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:IVSHMEM.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:IVSHMEM.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:IVSHMEM.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_GVT-g_Capabilities.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_GVT-g_Capabilities.png.html new file mode 100644 index 0000000..14fed7a --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_GVT-g_Capabilities.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Intel GVT-g Capabilities.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Intel GVT-g Capabilities.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Intel GVT-g Capabilities.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html new file mode 100644 index 0000000..6654d78 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Intel_i915_Host_DRM_+_VFIO-Mdev..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Intel i915 Host DRM + VFIO-Mdev..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Intel i915 Host DRM + VFIO-Mdev..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Intel i915 Host DRM + VFIO-Mdev..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_GROUP_GET_FD.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_GROUP_GET_FD.png.html new file mode 100644 index 0000000..1e793e4 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_GROUP_GET_FD.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Ioctl-VFIO GROUP GET FD.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Ioctl-VFIO GROUP GET FD.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Ioctl-VFIO GROUP GET FD.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html new file mode 100644 index 0000000..14dd2fd --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioeventfd-and-irqfd.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioeventfd-and-irqfd.png.html new file mode 100644 index 0000000..d0468d1 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Ioeventfd-and-irqfd.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Ioeventfd-and-irqfd.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Ioeventfd-and-irqfd.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Ioeventfd-and-irqfd.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVMFR_Looking_Glass.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVMFR_Looking_Glass.png.html new file mode 100644 index 0000000..ad7cec0 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVMFR_Looking_Glass.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:KVMFR Looking Glass.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:KVMFR Looking Glass.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:KVMFR Looking Glass.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html new file mode 100644 index 0000000..796d677 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Mdev-gpu.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Mdev-gpu.png.html new file mode 100644 index 0000000..0713c8a --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Mdev-gpu.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Mdev-gpu.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Mdev-gpu.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Mdev-gpu.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Memory_Regions_Added_by_QEMU.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Memory_Regions_Added_by_QEMU.png.html new file mode 100644 index 0000000..63b1f87 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Memory_Regions_Added_by_QEMU.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Memory Regions Added by QEMU.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Memory Regions Added by QEMU.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Memory Regions Added by QEMU.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:NUMA_Node.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:NUMA_Node.png.html new file mode 100644 index 0000000..5cc02c5 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:NUMA_Node.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:NUMA Node.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:NUMA Node.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:NUMA Node.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html new file mode 100644 index 0000000..9776cf0 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:QEMU calls VFIO DMA MAP via Memory listener.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:QEMU calls VFIO DMA MAP via Memory listener.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:QEMU calls VFIO DMA MAP via Memory listener.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html new file mode 100644 index 0000000..6f92b62 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html new file mode 100644 index 0000000..04b25d2 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html new file mode 100644 index 0000000..cd3f8e6 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html new file mode 100644 index 0000000..9cd6a69 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:QEMU presenting the VFIO file descriptor into the virtual machine..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:QEMU presenting the VFIO file descriptor into the virtual machine..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:QEMU presenting the VFIO file descriptor into the virtual machine..png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV-Diagram.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV-Diagram.png.html new file mode 100644 index 0000000..9105b9b --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV-Diagram.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:SR-IOV-Diagram.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:SR-IOV-Diagram.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:SR-IOV-Diagram.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV.png.html new file mode 100644 index 0000000..2354566 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:SR-IOV.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:SR-IOV.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:SR-IOV.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:SR-IOV.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html new file mode 100644 index 0000000..2a98e69 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-05-06_at_10.46.59_AM.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Screen Shot 2022-05-06 at 10.46.59 AM.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Screen Shot 2022-05-06 at 10.46.59 AM.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Screen Shot 2022-05-06 at 10.46.59 AM.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html new file mode 100644 index 0000000..0ba32f7 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Screen_Shot_2022-11-18_at_4.14.32_PM.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Screen Shot 2022-11-18 at 4.14.32 PM.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Screen Shot 2022-11-18 at 4.14.32 PM.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Screen Shot 2022-11-18 at 4.14.32 PM.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Telescope_LG-Proxy.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Telescope_LG-Proxy.png.html new file mode 100644 index 0000000..05ca2c8 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Telescope_LG-Proxy.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Telescope LG-Proxy.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Telescope LG-Proxy.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Telescope LG-Proxy.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Type_1_IOMMU_Tracks_VA-GFN.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Type_1_IOMMU_Tracks_VA-GFN.png.html new file mode 100644 index 0000000..dfc8122 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Type_1_IOMMU_Tracks_VA-GFN.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Type 1 IOMMU Tracks VA-GFN.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Type 1 IOMMU Tracks VA-GFN.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Type 1 IOMMU Tracks VA-GFN.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO-Mdev_Diagram.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO-Mdev_Diagram.png.html new file mode 100644 index 0000000..bd32f8d --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO-Mdev_Diagram.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:VFIO-Mdev Diagram.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:VFIO-Mdev Diagram.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:VFIO-Mdev Diagram.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO_Diagram.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO_Diagram.png.html new file mode 100644 index 0000000..88de3c4 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:VFIO_Diagram.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:VFIO Diagram.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:VFIO Diagram.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:VFIO Diagram.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Vfio-pci_driver_bindings.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Vfio-pci_driver_bindings.png.html new file mode 100644 index 0000000..7753aad --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Vfio-pci_driver_bindings.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Vfio-pci driver bindings.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Vfio-pci driver bindings.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Vfio-pci driver bindings.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Virgl.png.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Virgl.png.html new file mode 100644 index 0000000..c37a725 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/File:Virgl.png.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "File:Virgl.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "File:Virgl.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects | Hide file links +
+

The following pages link to File:Virgl.png: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Driver_Internals.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Driver_Internals.html new file mode 100644 index 0000000..f4cfbb9 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Driver_Internals.html @@ -0,0 +1,217 @@ + + + + +Pages that link to "GPU Driver Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "GPU Driver Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to GPU Driver Internals: +

Displayed 2 items. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Firmware.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Firmware.html new file mode 100644 index 0000000..4f3864d --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Firmware.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "GPU Firmware" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "GPU Firmware"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to GPU Firmware: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Software_Bill_Of_Materials_(SBOM).html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Software_Bill_Of_Materials_(SBOM).html new file mode 100644 index 0000000..7d8e789 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Software_Bill_Of_Materials_(SBOM).html @@ -0,0 +1,216 @@ + + + + +Pages that link to "GPU Software Bill Of Materials (SBOM)" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "GPU Software Bill Of Materials (SBOM)"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to GPU Software Bill Of Materials (SBOM): +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Support.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Support.html new file mode 100644 index 0000000..4cdefc3 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/GPU_Support.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "GPU Support" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "GPU Support"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to GPU Support: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Glossary.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Glossary.html new file mode 100644 index 0000000..8c6a961 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Glossary.html @@ -0,0 +1,218 @@ + + + + +Pages that link to "Glossary" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Glossary"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Glossary: +

Displayed 2 items. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel.html new file mode 100644 index 0000000..0aa4d85 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel.html @@ -0,0 +1,217 @@ + + + + +Pages that link to "Intel" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Intel"

+
+ +
← Intel
+
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Intel: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel_SR-IOV_APIs.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel_SR-IOV_APIs.html new file mode 100644 index 0000000..1e470bf --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Intel_SR-IOV_APIs.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "Intel SR-IOV APIs" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Intel SR-IOV APIs"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Intel SR-IOV APIs: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Introduction.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Introduction.html new file mode 100644 index 0000000..78bac6b --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Introduction.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "Introduction" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Introduction"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Introduction: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Introductory_Concepts_&_Definitions.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Introductory_Concepts_&_Definitions.html new file mode 100644 index 0000000..a93c120 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Introductory_Concepts_&_Definitions.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "Introductory Concepts & Definitions" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Introductory Concepts & Definitions"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Introductory Concepts & Definitions: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Merged_Drivers.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Merged_Drivers.html new file mode 100644 index 0000000..0892ed9 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Merged_Drivers.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "Merged Drivers" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Merged Drivers"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Merged Drivers: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/OpenRM.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/OpenRM.html new file mode 100644 index 0000000..87d2172 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/OpenRM.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "OpenRM" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "OpenRM"

+
+ +
← OpenRM
+
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to OpenRM: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_I/O_Internals.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_I/O_Internals.html new file mode 100644 index 0000000..b910947 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_I/O_Internals.html @@ -0,0 +1,219 @@ + + + + +Pages that link to "Virtual I/O Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Virtual I/O Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Virtual I/O Internals: +

Displayed 3 items. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_IO_Internals.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_IO_Internals.html new file mode 100644 index 0000000..3d5da90 --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtual_IO_Internals.html @@ -0,0 +1,216 @@ + + + + +Pages that link to "Virtual IO Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Virtual IO Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Virtual IO Internals: +

Displayed 1 item. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtualization_Fundamentals.html b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtualization_Fundamentals.html new file mode 100644 index 0000000..29f2efd --- /dev/null +++ b/wiki/open-iov.org/index.php/Special:WhatLinksHere/Virtualization_Fundamentals.html @@ -0,0 +1,217 @@ + + + + +Pages that link to "Virtualization Fundamentals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Pages that link to "Virtualization Fundamentals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+What links here +     
+
+Filters +Hide transclusions | Hide links | Hide redirects +
+

The following pages link to Virtualization Fundamentals: +

Displayed 2 items. +

View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500)View (previous 50 | next 50) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Talk:Mdev-GPU.html b/wiki/open-iov.org/index.php/Talk:Mdev-GPU.html new file mode 100644 index 0000000..f49c32e --- /dev/null +++ b/wiki/open-iov.org/index.php/Talk:Mdev-GPU.html @@ -0,0 +1,212 @@ + + + + +Talk:Mdev-GPU - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Talk:Mdev-GPU

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

We can use this thread to talk about how things work. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/VGPU_Unlock.html b/wiki/open-iov.org/index.php/VGPU_Unlock.html new file mode 100644 index 0000000..7d4ca73 --- /dev/null +++ b/wiki/open-iov.org/index.php/VGPU_Unlock.html @@ -0,0 +1,215 @@ + + + + +VGPU Unlock - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

VGPU Unlock

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

vGPU_Unlock is a project created by Jonathan Johansson, available on GitHub. +

The project is designed to allow Nvidia's enterprise GPU virtualization technology to run on consumer Nvidia graphics cards (ex: GeForce GTX series). +

Since its inception, there have been several forks of the project that are more up to date and more performant (ex: Rust version). +

Documentation for the original project is available here. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Virtual_I/O_Internals.html b/wiki/open-iov.org/index.php/Virtual_I/O_Internals.html new file mode 100644 index 0000000..d94714c --- /dev/null +++ b/wiki/open-iov.org/index.php/Virtual_I/O_Internals.html @@ -0,0 +1,1013 @@ + + + + +Virtual I/O Internals - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtual I/O Internals

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

The following document details the internals of a VFIO (Virtual Function I/O) driven Shared I/O Device.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

This article places emphasis on the Virtual GPU (vGPU) use case however these concepts apply generically to virtualization of I/O devices (TPUs, NICs, storage peripherals, ect..). +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comparison of Assistance Modes +
Mdev Mode +SR-IOV Mode +SIOV Mode +
No hardware assistance needed. +Hardware assistance needed. +Hardware assistance needed. +
Host requires insight about guest workload. +Host ignorance of guest workload. +Host requires insight about guest workload. +
Error reporting. +No guest driver error reporting. +Error reporting. +
In depth dynamic monitoring. +Basic dynamic monitoring. +In depth dynamic monitoring. +
Software defined MMU guest separation. +Firmware defined MMU guest separation. +Firmware defined MMU guest separation. +
Requires deferred instructions to be supported by host software (support libraries). +Guest is ignorant of host supported software such as support libraries. + +
Routing interrupts. +Routing interrupts. +Routing interrupts. +
Device reset. +Device reset. +Device reset. +
Enable/Disable device. +Enable/Disable device. +Enable/Disable device. +
Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +
Single PCI requester ID. +Multiple PCI requester IDs. +Multiple PCI requester IDs. +
+ + +

All Modes

+

This section will cover concepts which apply both to Mdev Mode, SR-IOV Mode & SIOV Mode. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Alex Williamson. +

See references 2, 14, & 22 in the References (Talks & Reading Material) section. +

+

Binding VFIO devices

+
Figure 1: VFIO group nodes are unit of ownership that VFIO uses. See slides from: [2]
+
Figure 2: IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO Group inside the VFIO Container. See slides from: [2]
+
Figure 3: Using interrupts IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP), IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) to map memory and pin pages. See slides from: [2]
+
Figure 4: Using interrupt IOCTL(GROUP2, VFIO_GROUP_GET_FD, "0000:01:00.0") to obtain the VFIO Group file descriptor. See slides from: [2]
+

Figure 1: Binding devices to the vfio-pci driver results in VFIO group nodes. +

Opening the file "/dev/vfio/vfio" creates a VFIO Container. +

Figure 2: The interrupt routine IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO group inside the VFIO container. +

+

Programming the IOMMU

+

When this has been done IOCTL(CONTAINER, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU) can then be used to set an IOMMU type for the container which places it in a user interactable state. +

Once this IOMMU type state has been set and the VFIO container has been made interactable additional VFIO groups may be added to the container without requiring that the group's IOMMU type be set again as newly added groups automatically inherit the container's IOMMU context. +

+

VFIO Memory Mapped IO

+

Figure 3: Once the VFIO Groups have been placed inside the VFIO container and the IOMMU type has been set the user may then map and unmap which will automatically inserts Memory Mapped IO (MMIO) entries into the IOMMU as well as pin/unpin pages as necessary. This can be accomplished using IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP) for map/pin and IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) for unmap/unpin. +

+

Getting the VFIO Group File Descriptor

+

Figure 4: Once the device has been bound to a VFIO driver, set in a VFIO container, the VFIO container has it's IOMMU type set, and a memory map/page pin of the VFIO device has been completed a file descriptor can then be obtained for the device. This file descriptor can be used for interrupts (ioctls), to probe for information about the BAR regions, and configure the IRQs. +

+

VFIO device file descriptor

+

VFIO device file descriptors are divided into regions and each region is mapped into a device resource. Region count and info (file offset, allowable access, ect..) can be discovered through interrupt (IOCTL). Each file descriptor region corresponding to a PCI resource is represented as a file offset. +

In the case of RPC Mode this structure is emulated whereas in SR-IOV Mode the structure is mapped to a real PCI resource. +

+ + + + + + + + + + + + + + + + + +
BAR regions in a VGA PCI device. +
00:00.0 VGA compatible controller +
Region 0 Bar0 (Config Space) starts at offset 0 +
Region 1 Bar1 (MSI - Message Signaled Interrupts) +
Region 2 Bar2 (MSIX) +
Region 3 Bar3 +
Region 4 Bar4 +
Region 5 Bar5 (IO port space) +
Expansion ROM +
+

Below is what the file offsets looks like internally for each BAR region starting from address 0 and growing with the addition of former regions as you progress through the file. +

+ + + + + + + + + + + + + + + +
VFIO representation of PCI BAR regions offsets. +
<- File Offset -> +
0 -> A +A -> (A+B) +(A+B) -> (A+B+C) +(A+B+C) -> (A+B+C+D) +... +
Region 0 (size A) +Region 1 (size B) +Region 2 (size C) +Region 3 (size D) +... +
+

VFIO Interrupts

+

Guests communicate with the host via VFIO Interrupt Requests (IRQs). These are sent via an irqfd (IRQ File Descriptor). Similarly, the host receives these interrupts via eventfd (Event File Descriptor). The resulting data can be returned via a callback. +

+

IRQs

+

Device properties discovered via interrupt (IOCTL). +

+
Get Device Info
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_INFO +
struct vfio_device_info +
+argz + +
flags + +
+VFIO_DEVICE_FLAGS_PCI +
VFIO_DEVICE_FLAGS_PLATFORM +
VFIO_DEVICE_FLAGS_RESET +
num_irqs + +
num_regions + +
+

The IRQ VFIO_DEVICE_GET_INFO can provide information to distinguish between PCI and platform devices as well as the number of regions and IRQs for a particular device. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get Region Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_REGION_INFO +
struct vfio_region_info +
+argz + +
cap_offset + +
flags + +
+VFIO_REGION_INFO_FLAG_CAPS +
VFIO_REGION_INFO_FLAG_MMAP +
VFIO_REGION_INFO_FLAG_READ +
VFIO_REGION_INFO_FLAG_WRITE +
index + +
offset + +
size + +
+

Once the interrupt user knows the number of regions within a VFIO device they can use IRQ VFIO_DEVICE_GET_REGION_INFO to probe each region for additional information. This interrupt will return information such as if it can be read from or written to, if the device supports MMAP, as well as what the offset and size of the region is within the VFIO file descriptor. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get IRQ Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_IRQ_INFO +
struct vfio_irq_info +
+argz + +
count + +
flags + +
+VFIO_IRQ_INFO_AUTOMASKED +
VFIO_IRQ_INFO_EVENTFD +
VFIO_IRQ_INFO_MASKABLE +
VFIO_IRQ_INFO_NORESIZE +
index + +
+

VFIO_DEVICE_GET_IRQ_INFO is used to retrieve information about a device IRQ. +

VFIO_IRQ_INFO_AUTOMASKED is used to mask interrupts when they occur to protect the host. +

The upstream API can be read here (vfio.h) +

Sample mdev code to service this request can be found here, and here. +

+
Set IRQs
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_SET_IRQS +
struct vfio_irq_set +
+argz + +
count + +
data[] + +
flags + +
+VFIO_IRQ_SET_ACTION_MASK +
VFIO_IRQ_SET_ACTION_TRIGGER +
VFIO_IRQ_SET_ACTION_UNMASK +
VFIO_IRQ_SET_DATA_BOOL +
VFIO_IRQ_SET_DATA_EVENTFD +
VFIO_IRQ_SET_DATA_NONE +
index + +
start + +
+

VFIO_DEVICE_SET_IRQS is used to setup IRQs. Actions can be configured such as trigger which is when the device triggers an interrupt (IOCTL), masking and unmasking actions can be set. Bool and None data types are used for loopback testing of the device. Start and index may be used to modify subregions. +

The upstream API can be read here (vfio.h). +

+

Device Decomposure/Recomposure

+
Figure 5: Device Decomposure and Recomposure via VFIO.
Figure 5: Device Decomposure and Recomposure via VFIO. See slides from: [2]
+

Figure 5: Virtual Function IO (VFIO) devices are deconstructed in userspace into a set of VFIO primitives (MMIO pages, VFIO/IOMMU Groups, VFIO IRQs, File Descriptors). Recomposure of these devices occurs upon assignment of a Virtual Function (VF) to a QEMU virtual machine. +

+

Memory Management Unit (MMU)

+
Error creating thumbnail: File missing
Figure 6: MMU - GMMU IOVA translation/isolation.
+

Figure 6: This section will touch upon the mechanisms used for enforcement of Host Physical Address (HPA) to Guest Physical Address (GPA) isolation. +

+

MMIO Isolation (Platform MMU)

+

The platform's CPU communicates with the GPU by reading/writing to and from pinned MMIO pages in Random Access Memory (RAM). MMIO pages within the RAM are subject to IO Virtual Address (IOVA) translations by the platform's discrete MMU controller which is programmed by the CPU. These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the platform. +

+

VRAM Isolation (GPU GMMU)

+

The GPU core performs virtualized operations by reading/writing to and from shadow page tables in onboard Video Random Access Memory (VRAM). Shadow pages within the VRAM are subject to IO Virtual Address (IOVA) translations by the GPU's discrete GPU MMU controller (GMMU) which is programmed by the Embedded CPU (GPU co-processor). These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the virtual GPUs and multi-process isolation in single user environments. +

+

Platform MMIO <-> GPU Shadow Pages

+

In the context of VFIO pinned MMIO pages in RAM act as an interface to communicate with VRAM shadow pages allowing GPU drivers on the platform to send instructions to the GPU. When the GPU or Platform alters memory contained in a shadow page or pinned MMIO page the change is mirrored in the corresponding IO Virtual Address (IOVA). For example if shadow page 0 is changed by the GPU this change is mirrored in MMIO page 0 on the platform (the reverse example also applies). When communications occur between the platform and GPU the information first moves through the MMU/GMMU and is then written to RAM/VRAM. +

+
Figure 7: A depiction of region overlays within a VFIO file descriptor.
Figure 7: A depiction of region overlays within a VFIO file descriptor. See slides from: [2]
+

VFIO Quirks (region traps)

+

Figure 7: Regions of the PCI BAR require emulation (slow path) via emulated traps (known as quirks). These regions are primarily in PCI configuration space. QEMU may overlap a region overlay which when read/written to/from triggers a VM-exit to trap and emulate the region in order that appropriate translations may occur (such as those concerned with IO Virtual Address - IOVA). +

+
Peer-to-Peer DMA Isolation under IOMMU
Figure 8: Peer-to-Peer DMA Isolation under IOMMU. See slides from: [2]
+

Known IOMMU Issues

+

DMA Aliasing +

+
  • Not all devices generate unique IDs.
  • +
  • Not all devices generate IDs they should.
+

DMA Isolation +

+
  • Figure 8: Peer-to-Peer DMA Isolation. In many circumstances IO Virtual Address (IOVA) translations do not occur properly in the context of DMA peering. Transactions that occur through the IOMMU are unaffected.
+
Figure 0: Approches to GPU Virtualization.
Figure 0: Approaches to GPU Virtualization. See slides from: [61]
+

Mdev Mode

+

Mdev Mode (VFIO Mediated Device) is a method of virtualizing I/O devices enabling full API capabilities without the requirement for hardware assistance. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Neo Jia, Kirti Wankhede, Kevin Tian, Yiying Zhang, David Cowperthwaite, Kun Tian, Yaozu Dong, Tina Zhang, Gerd Hoffmann, & Zhi Wang. +

See references 1, 7, 8, 17, 18, 19, 70 in the References (Talks & Reading Material) section. +

+

Mediated Core

+

The mediated device framework made 3 major changes to the VFIO driver. +

+ +

The full list of these changes can be seen in the lists.gnu.org Qemu-devel mailing list archive. +

+

Device Initialization

+

This section will deal with how an Mdev driver is initialized. +

Sample mdev code for device initialization can be found here. +

+

Registering VFIO MDEV as a driver

+

VFIO Mdev must be registered as a driver. This register event occurs between the Mdev Driver Register Interface and the VFIO MDEV interface. +

+

Registering PCIE Device with the Mediated Core

+
Registering the mediated device.
Figure 9: Registering the mediated device. This step may be accomplished via the vendor driver or via GVM/Mdev-GPU for drivers which do not include support for Mdev functionality and/or do not support arbitrary Mdev types.
+

Figure 9: The vendor driver must register with the Mediated Core's Device Register Interface. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Registering Mediated Callbacks (CBs)

+

Figure 9: The vendor driver must now register Mediated Callbacks which it expects to receive from Mdev devices. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Creating a Mediated Device via mdev-sysfsdev API

+
Figure 10: Echoing a UUID into the mdev-sysfsdev API. This functionality is included in mdevctl and in . See slides from: [1]
+

Figure 10: The user of an mdev capable device driver may echo values such as a UUID into the mdev-sysfsdev interface to create a unique mediated device. UUIDs must be unique per mdev device within a host. +

+
Figure 10: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor.
Figure 11: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor. See slides from: [1]
+

QEMU adds VFIO device to IOMMU container-group

+

Figure 11: When starting a QEMU process with a VFIO-mdev attached QEMU calls the VFIO API to add the VFIO device to an IOMMU container/group. QEMU then runs the IOCTL to obtain a file descriptor for the device. +

+

QEMU passes mdev device file descriptor to VM

+
Figure 11: QEMU presenting the VFIO file descriptor into the virtual machine.
Figure 12: QEMU presenting the VFIO file descriptor into the virtual machine. See slides from: [1]
+

Figure 12: Once QEMU has obtained the VFIO file descriptor for the Mdev device via IOCTL it is then QEMU's job to present the file descriptor into the virtual machine so that the mdev may be used by the guest. +

+

Instruction Execution

+
Figure 13: A simple diagram of signalling from host to guest (via irqfd) & guest to host (via ioeventfd) From blog.allenx
+

Figure 13: Mdev Mode moves instruction information across a virtual function (VF) device using Remote Procedure Calls generally by way of software interrupt (IOCTL). Signals to and from the guest and the host GPU driver may be passed over file descriptors such as the Interrupt Request File Descriptor (irqfd) and IO Event File Descriptor (ioeventfd). +The irqfd may be used to signal from the host into the guest whereas the ioeventfd may be used to signal from the guest into the host. Guest GPU instructions which would normally serialize as pRPCs (physical Remote Procedure Calls) are instead serialized from the guest as vRPCs (virtual Remote Procedure Calls) which are executed by the host mediated driver. +

+

IRQ remapping

+

Interrupt Requests (IRQs) must be remapped (trapped for virtualized execution) to protect the host from sensitive instructions which may affect global memory state. +

+

Interrupt Injection

+

-- +

--Researching-- +

-- +

+

Memory Management

+

Mdev memory management is handled by vendor driver software. +

+

Region Passthrough

+

Guests may be presented with emulated memory regions or via passthrough regions or a mixture of the two such as in the case of passthrough regions with BAR 0 configuration space emulation while other regions are passthrough'd. +

+
Emulated Regions
+

Emulated memory regions use indirect emulated communication requiring a VM-exit (slow). These regions are often used for virtual PCI config space such as in this sample code. +

+
Passthrough Regions
+

Passthrough memory regions use direct communication requiring no VM-exit (fast). +

+
Region Access
+
Figure 13: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs
Figure 14: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs. See slides from: [1]
+

Figure 14: QEMU gets region information via VFIO User API (UAPI) from the vendor driver through VFIO-mdev and Mediated Callbacks. +

+
Error creating thumbnail: File missing
Figure 15: Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation. See slides from: [1]
+

Figure 15: The guest's vendor driver accesses the Mdev MMIO trapped region backed by a mdev file descriptor (fd) which triggers an Extended Page Table (EPT) violation. +

+
Figure 15: KVM services EPT violation and forwards to QEMU VFIO PCI driver.
Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. See slides from: [1]
+

Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. +

+
Figure 16: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor.
Figure 17: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor. See slides from: [1]
+

Figure 17: QEMU convert request from KVM to R/W access to Mdev file descriptor. +

+

EPT Page Violations

+

Guest Memory Mapped IO (MMIO) trips Extended Page Table (EPT) violations which are trapped by the host MMU. KVM services EPT violations and forwards to QEMU VFIO PCI driver. QEMU then converts the request from KVM to R/W access to the Mdev File Descriptor (FD). Reads and writes are then handled by the host GPU device driver via mediated callbacks (CBs) and VFIO-mdev. +

+

Mediated DMA Translations

+

-- +

--Researching-- +

-- +

Because memory is not statically allocated by the vendor driver under the mediated device framework there is no requirement to make use of traditional VFIO pinned pages (via the vfio-pci module) rather MMIO memory can be mapped at runtime incrementally. As a result non-standard mediated device vfio stub modules may be used. +

Figure 18: Memory regions get added by QEMU. +

+
Memory Regions Added by QEMU
Figure 18: Memory Regions Added by QEMU. See slides from: [1]
+

Figure 19: QEMU calls VFIO_DMA_MAP via Memory listener. (not just guest physical memory but also device memory will be added through this memory listener) +

+
QEMU calls VFIO DMA MAP via Memory listener
Figure 19: QEMU calls VFIO DMA MAP via Memory listener. See slides from: [1]
+
Type 1 IOMMU Tracks VA-GFN
Figure 20: Type 1 IOMMU Tracks <VA, GFN>. See slides from: [1]
+

Figure 20: Type 1 IOMMU tracks <VA, GFN (Guest Frame Number)>. We build a table to list the QEMU VAs and track the their mapping relation to Guest Frame Numbers (GFNs). +

+

Scheduling

+

Scheduling is handled by the host mdev driver. +

+

Kernel API

+

Kernel documentation used for implementing a VFIO Mediated Device may be found at kernel.org. +

+

Sample Code

+

Sample code for various mdev implementations may be found below: +

Mediated Virtual PCI Display Host Device: +

+
  1. mdpy.c
  2. +
  3. mdpy-fb.c
  4. +
  5. mbochs.c.
+

Serial PCI Port-based Mediated Device: +

+
  1. mtty.c.
+
Compilation
+

To compile the kernel modules linked above you should have your distro's equivalent of the build-essential package installed. The included Makefile should provide all that is necessary to successfully compile the kernel modules. You can type the following command to compile the modules from within the directory: +

make +

When the make operation has been completed successfully the directory will now contain .ko files. These files are the binary kernel modules. +

+
Loading Kernel Modules
+

Now that you have compiled the kernel modules you may load them via the insmod command. +

For example to load the mtty.ko module run the following command from within the directory where you built the modules: +

insmod mtty.ko +

+
Unloading Kernel Modules
+

To unload any of the kernel modules you may make use of the rmmod command. +

For example to unload the mtty.ko module run the following command: +

rmmod mtty.ko +

+
Additional Documentation
+

An additional guide explaining how to make use of the mtty.c sample code may be found at line 308 of the kernel.org VFIO Mediated Device documentation. +

+

Mdev Mode Requirements

+

Driver Support. +

Software HPA<->GPA Boundary Enforcement. +

+

SR-IOV Mode

+

SR-IOV Mode (Single Root I/O Virtualization) involves hardware assisted virtualization on I/O peripherals. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Zheng Xiao, Jerry Jiang, & Ken Xue. +

See reference 6 in the References (Talks & Reading Material) section. +

+

Instruction Execution

+

SR-IOV communicates instructions from a virtual function (VF) directly to the PCI BAR. +

+

Memory Management

+

Guests are presenting with passthrough memory regions by the device firmware. +

+

Scheduling

+

Scheduling may be handled by the host mdev driver and/or the device firmware. +

+

SR-IOV Mode Requirements

+

Driver Support. +

Device SR-IOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

SIOV Mode

+

SIOV (Scalable I/O Virtualization) involves the combination of concepts form both SR-IOV Mode and Mdev Mode as well as novel concepts like shared IOMMU aware buffers and offloading of PCI config space VM-exits (slow path) to a discrete controller. +

Revision 1.0 of the SIOV specification can be read on the Open Compute Project website. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Kevin Tian, Tina Zhang, Xin Zeng, Yi Liu. +

See references 3, 4, 5, 16, 17, 18, 19, 20, 21 in the References (Talks & Reading Material) section. +

+

Memory Management

+

Enhancements to Intel VT-d introduce new 'Scalable Mode' to allow the platform to assign more granular IOMMU allocations to mediated devices (mdev memory management). This change is referred to as an IOMMU Aware Mediated Device. +

+

IOMMU Aware Mediated Device

+

SIOV made several changes to the VFIO driver, Intel IOMMU, and Mediated Device Framework. +

The full list of these changes can be seen in the mailing list archive on lwn.net under (vfio/mdev: IOMMU aware mediated device). +

+

Shared Hardware Workqueues

+

SIOV makes use of Shared Hardware Workqueues which may be accessed by processes or Virtual Machines. +

According to kernel.org: "In order to allow the hardware to distinguish the context for which work is being executed in the hardware by SWQ interface, SIOV uses Process Address Space ID (PASID), which is a 20-bit number defined by the PCIe SIG. PASID value is encoded in all transactions from the device. This allows the IOMMU to track I/O on a per-PASID granularity in addition to using the PCIe Resource Identifier (RID) which is the Bus/Device/Function." +

+

SIOV Mode Requirements

+

Driver Support. +

Device SIOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

References (Talks & Reading Material)

+
  1. [2016] vGPU on KVM - A VFIO Based Framework by Neo Jia & Kirti Wankhede - slides
  2. +
  3. [2016] An Introduction to PCI Device Assignment with VFIO by Alex Williamson - slides
  4. +
  5. [2017] Scalable I/O Virtualization by Kevin Tian
  6. +
  7. [2019] Bring a Scalable IOV Capable Device into Linux World by Xin Zeng & Yi Liu - slides
  8. +
  9. Scalable I/O Virtualization Revision 1.0
  10. +
  11. [2018] Live Migration Support for GPU with SRIOV by Zheng Xiao, Jerry Jiang & Ken Xue - slides
  12. +
  13. [2017] Intel GVT-g: From Production to Upstream - Zhi Wang, Intel
  14. +
  15. [2016] Qemu Graphics Update 2016 by Gerd Hoffmann
  16. +
  17. IOCTL
  18. +
  19. eventfd - root/virt/kvm/eventfd.c
  20. +
  21. (kernel diff:: KVM: irqfd)
  22. +
  23. (kernel diff:: KVM: add ioeventfd support)
  24. +
  25. KVM irqfd & ioeventfd
  26. +
  27. VFIO - Virtual Function I/O - root/virt/kvm/vfio.c
  28. +
  29. VFIO Mediated Devices
  30. +
  31. IOMMU Aware Mediated Device
  32. +
  33. Hardware-Assisted Mediated Pass-Through with VFIO by Kevin Tian
  34. +
  35. [2017] Generic Buffer Sharing Mechanism for Mediated Devices by Tina Zhang
  36. +
  37. [2019] Toward a Virtualization World Built on Mediated Pass-Through - Kevin Tian
  38. +
  39. Auxiliary Bus
  40. +
  41. Shared Virtual Addressing
  42. +
  43. vfio.blogspot.com
  44. +
  45. XenGT by Kevin Tian
  46. +
  47. VMWare Academic Publications: GPU Virtualization by Micah Dowty & Jeremy Sugerman
  48. +
  49. PCI SIG I/O Virtualization
  50. +
  51. VMGL by the University of Toronto Computer Science Department
  52. +
  53. Kepler VGX Hypervisor
  54. +
  55. Intel Virtualization Technology for Directed I/O (VT-d): Enhancing Intel platforms for efficient virtualization of I/O devices
  56. +
  57. DMA-Mapping.txt (Dynamic DMA Mapping)
  58. +
  59. KVM MMU Virtualization by Xiao Guangrong
  60. +
  61. OSDEV: PCI
  62. +
  63. Down to the TLP: How PCI express devices talk (Part I)
  64. +
  65. Down to the TLP: How PCI express devices talk (Part II)
  66. +
  67. Intel ACRN: Enabling SR-IOV Virtualization
  68. +
  69. Kernel.org sysfs-bus-pci
  70. +
  71. Linux Kernel Labs: Memory Mapping
  72. +
  73. Inside Windows Page Frame Number (PFN) - Part 1
  74. +
  75. Direct Rendering Infrastructure (DRI)
  76. +
  77. DRI User Guide
  78. +
  79. Linux Kernel Labs: IO Virtualization
  80. +
  81. Gallium3D: Main Page
  82. +
  83. Gallium3D Wiki
  84. +
  85. Gallium3D talk from XDS 2007
  86. +
  87. Memory Management High Level Design (ARCN)
  88. +
  89. Block Architecture Diagrams for Geforce series
  90. +
  91. Block diagrams for 40 series instruction format
  92. +
  93. PCI Configuration Space
  94. +
  95. GPU virtual memory in WDDM 2.0
  96. +
  97. Intel Graphics Programmer's Reference Manuals (PRM)
  98. +
  99. i915: Hardware Contexts (and some bits about batchbuffers)
  100. +
  101. i915: The Global GTT Part 1
  102. +
  103. i915: Aliasing PPGTT Part 2
  104. +
  105. i915: True PPGTT Part 3
  106. +
  107. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  108. +
  109. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  110. +
  111. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  112. +
  113. A deep dive into QEMU: PCI slave devices
  114. +
  115. Debugging QEMU Guests with GDB (start & stop, examine state like registers & memory, set breakpoints & watchpoints)
  116. +
  117. IOMMU Introduction
  118. +
  119. Arch Wiki: Intel Graphics
  120. +
  121. An Introduction to Intel Graphics Virtualization Technology (legacy GVT-g) by Zhi Wang
  122. +
  123. Kernel.org: vfio iommu type1: Add support for mediated devices
  124. +
  125. Hardware and Compute Abstraction Layers For Accelerated Computing Using Graphics Hardware and Conventional CPUs
  126. +
  127. More Shadow Walker: The Progression of TLB-Splitting on x86
  128. +
  129. MMU Virtualization Via Intel EPT: Technical Details
  130. +
  131. Alex Williamson Github: VFIO Development (tree next)
  132. +
  133. GPU PMU: performance monitoring with perf event
  134. +
  135. Remote Procedure Call (RPC)
  136. +
  137. Virtual Open Systems: API Remoting
  138. +
  139. A Full GPU Virtualization Solution with Mediated Pass-Through by Yiying Zhang, David Cowperthwaite, Kun Tian, and Yaozu Dong - [Paper] - [Video] - [Slides 1] - [Slides 2]
  140. +
  141. [2014] KvmGT: A Full GPU Virtualization Solution by Jike Song
  142. +
  143. docs.kernel.org: DRM Memory Management
  144. +
  145. docs.kernel.org: PCI Bus Subsystem
  146. +
  147. openglbook.com: What is OpenGL?
  148. +
  149. [2020] Getting pixels on screen: introduction to Kernel Mode Setting (KMS) by Simon Ser - slides
  150. +
  151. Dynamic Mediation for Live Migration VFIO-PCI
  152. +
  153. DRM Management Via CGroups
  154. +
  155. DRM: Add GEM ("graphics execution manager") to i915 driver.
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Virtual_IO_Internals.html b/wiki/open-iov.org/index.php/Virtual_IO_Internals.html new file mode 100644 index 0000000..9975a3e --- /dev/null +++ b/wiki/open-iov.org/index.php/Virtual_IO_Internals.html @@ -0,0 +1,1014 @@ + + + + +Virtual I/O Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtual I/O Internals

+
+
From Open-IOV
+
(Redirected from Virtual IO Internals)
+
+ +
+ Jump to navigation + Jump to search +

The following document details the internals of a VFIO (Virtual Function I/O) driven Shared I/O Device.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

This article places emphasis on the Virtual GPU (vGPU) use case however these concepts apply generically to virtualization of I/O devices (TPUs, NICs, storage peripherals, ect..). +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comparison of Assistance Modes +
Mdev Mode +SR-IOV Mode +SIOV Mode +
No hardware assistance needed. +Hardware assistance needed. +Hardware assistance needed. +
Host requires insight about guest workload. +Host ignorance of guest workload. +Host requires insight about guest workload. +
Error reporting. +No guest driver error reporting. +Error reporting. +
In depth dynamic monitoring. +Basic dynamic monitoring. +In depth dynamic monitoring. +
Software defined MMU guest separation. +Firmware defined MMU guest separation. +Firmware defined MMU guest separation. +
Requires deferred instructions to be supported by host software (support libraries). +Guest is ignorant of host supported software such as support libraries. + +
Routing interrupts. +Routing interrupts. +Routing interrupts. +
Device reset. +Device reset. +Device reset. +
Enable/Disable device. +Enable/Disable device. +Enable/Disable device. +
Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +
Single PCI requester ID. +Multiple PCI requester IDs. +Multiple PCI requester IDs. +
+ + +

All Modes

+

This section will cover concepts which apply both to Mdev Mode, SR-IOV Mode & SIOV Mode. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Alex Williamson. +

See references 2, 14, & 22 in the References (Talks & Reading Material) section. +

+

Binding VFIO devices

+
Figure 1: VFIO group nodes are unit of ownership that VFIO uses. See slides from: [2]
+
Figure 2: IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO Group inside the VFIO Container. See slides from: [2]
+
Figure 3: Using interrupts IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP), IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) to map memory and pin pages. See slides from: [2]
+
Figure 4: Using interrupt IOCTL(GROUP2, VFIO_GROUP_GET_FD, "0000:01:00.0") to obtain the VFIO Group file descriptor. See slides from: [2]
+

Figure 1: Binding devices to the vfio-pci driver results in VFIO group nodes. +

Opening the file "/dev/vfio/vfio" creates a VFIO Container. +

Figure 2: The interrupt routine IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO group inside the VFIO container. +

+

Programming the IOMMU

+

When this has been done IOCTL(CONTAINER, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU) can then be used to set an IOMMU type for the container which places it in a user interactable state. +

Once this IOMMU type state has been set and the VFIO container has been made interactable additional VFIO groups may be added to the container without requiring that the group's IOMMU type be set again as newly added groups automatically inherit the container's IOMMU context. +

+

VFIO Memory Mapped IO

+

Figure 3: Once the VFIO Groups have been placed inside the VFIO container and the IOMMU type has been set the user may then map and unmap which will automatically inserts Memory Mapped IO (MMIO) entries into the IOMMU as well as pin/unpin pages as necessary. This can be accomplished using IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP) for map/pin and IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) for unmap/unpin. +

+

Getting the VFIO Group File Descriptor

+

Figure 4: Once the device has been bound to a VFIO driver, set in a VFIO container, the VFIO container has it's IOMMU type set, and a memory map/page pin of the VFIO device has been completed a file descriptor can then be obtained for the device. This file descriptor can be used for interrupts (ioctls), to probe for information about the BAR regions, and configure the IRQs. +

+

VFIO device file descriptor

+

VFIO device file descriptors are divided into regions and each region is mapped into a device resource. Region count and info (file offset, allowable access, ect..) can be discovered through interrupt (IOCTL). Each file descriptor region corresponding to a PCI resource is represented as a file offset. +

In the case of RPC Mode this structure is emulated whereas in SR-IOV Mode the structure is mapped to a real PCI resource. +

+ + + + + + + + + + + + + + + + + +
BAR regions in a VGA PCI device. +
00:00.0 VGA compatible controller +
Region 0 Bar0 (Config Space) starts at offset 0 +
Region 1 Bar1 (MSI - Message Signaled Interrupts) +
Region 2 Bar2 (MSIX) +
Region 3 Bar3 +
Region 4 Bar4 +
Region 5 Bar5 (IO port space) +
Expansion ROM +
+

Below is what the file offsets looks like internally for each BAR region starting from address 0 and growing with the addition of former regions as you progress through the file. +

+ + + + + + + + + + + + + + + +
VFIO representation of PCI BAR regions offsets. +
<- File Offset -> +
0 -> A +A -> (A+B) +(A+B) -> (A+B+C) +(A+B+C) -> (A+B+C+D) +... +
Region 0 (size A) +Region 1 (size B) +Region 2 (size C) +Region 3 (size D) +... +
+

VFIO Interrupts

+

Guests communicate with the host via VFIO Interrupt Requests (IRQs). These are sent via an irqfd (IRQ File Descriptor). Similarly, the host receives these interrupts via eventfd (Event File Descriptor). The resulting data can be returned via a callback. +

+

IRQs

+

Device properties discovered via interrupt (IOCTL). +

+
Get Device Info
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_INFO +
struct vfio_device_info +
+argz + +
flags + +
+VFIO_DEVICE_FLAGS_PCI +
VFIO_DEVICE_FLAGS_PLATFORM +
VFIO_DEVICE_FLAGS_RESET +
num_irqs + +
num_regions + +
+

The IRQ VFIO_DEVICE_GET_INFO can provide information to distinguish between PCI and platform devices as well as the number of regions and IRQs for a particular device. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get Region Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_REGION_INFO +
struct vfio_region_info +
+argz + +
cap_offset + +
flags + +
+VFIO_REGION_INFO_FLAG_CAPS +
VFIO_REGION_INFO_FLAG_MMAP +
VFIO_REGION_INFO_FLAG_READ +
VFIO_REGION_INFO_FLAG_WRITE +
index + +
offset + +
size + +
+

Once the interrupt user knows the number of regions within a VFIO device they can use IRQ VFIO_DEVICE_GET_REGION_INFO to probe each region for additional information. This interrupt will return information such as if it can be read from or written to, if the device supports MMAP, as well as what the offset and size of the region is within the VFIO file descriptor. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get IRQ Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_IRQ_INFO +
struct vfio_irq_info +
+argz + +
count + +
flags + +
+VFIO_IRQ_INFO_AUTOMASKED +
VFIO_IRQ_INFO_EVENTFD +
VFIO_IRQ_INFO_MASKABLE +
VFIO_IRQ_INFO_NORESIZE +
index + +
+

VFIO_DEVICE_GET_IRQ_INFO is used to retrieve information about a device IRQ. +

VFIO_IRQ_INFO_AUTOMASKED is used to mask interrupts when they occur to protect the host. +

The upstream API can be read here (vfio.h) +

Sample mdev code to service this request can be found here, and here. +

+
Set IRQs
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_SET_IRQS +
struct vfio_irq_set +
+argz + +
count + +
data[] + +
flags + +
+VFIO_IRQ_SET_ACTION_MASK +
VFIO_IRQ_SET_ACTION_TRIGGER +
VFIO_IRQ_SET_ACTION_UNMASK +
VFIO_IRQ_SET_DATA_BOOL +
VFIO_IRQ_SET_DATA_EVENTFD +
VFIO_IRQ_SET_DATA_NONE +
index + +
start + +
+

VFIO_DEVICE_SET_IRQS is used to setup IRQs. Actions can be configured such as trigger which is when the device triggers an interrupt (IOCTL), masking and unmasking actions can be set. Bool and None data types are used for loopback testing of the device. Start and index may be used to modify subregions. +

The upstream API can be read here (vfio.h). +

+

Device Decomposure/Recomposure

+
Figure 5: Device Decomposure and Recomposure via VFIO.
Figure 5: Device Decomposure and Recomposure via VFIO. See slides from: [2]
+

Figure 5: Virtual Function IO (VFIO) devices are deconstructed in userspace into a set of VFIO primitives (MMIO pages, VFIO/IOMMU Groups, VFIO IRQs, File Descriptors). Recomposure of these devices occurs upon assignment of a Virtual Function (VF) to a QEMU virtual machine. +

+

Memory Management Unit (MMU)

+
Error creating thumbnail: File missing
Figure 6: MMU - GMMU IOVA translation/isolation.
+

Figure 6: This section will touch upon the mechanisms used for enforcement of Host Physical Address (HPA) to Guest Physical Address (GPA) isolation. +

+

MMIO Isolation (Platform MMU)

+

The platform's CPU communicates with the GPU by reading/writing to and from pinned MMIO pages in Random Access Memory (RAM). MMIO pages within the RAM are subject to IO Virtual Address (IOVA) translations by the platform's discrete MMU controller which is programmed by the CPU. These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the platform. +

+

VRAM Isolation (GPU GMMU)

+

The GPU core performs virtualized operations by reading/writing to and from shadow page tables in onboard Video Random Access Memory (VRAM). Shadow pages within the VRAM are subject to IO Virtual Address (IOVA) translations by the GPU's discrete GPU MMU controller (GMMU) which is programmed by the Embedded CPU (GPU co-processor). These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the virtual GPUs and multi-process isolation in single user environments. +

+

Platform MMIO <-> GPU Shadow Pages

+

In the context of VFIO pinned MMIO pages in RAM act as an interface to communicate with VRAM shadow pages allowing GPU drivers on the platform to send instructions to the GPU. When the GPU or Platform alters memory contained in a shadow page or pinned MMIO page the change is mirrored in the corresponding IO Virtual Address (IOVA). For example if shadow page 0 is changed by the GPU this change is mirrored in MMIO page 0 on the platform (the reverse example also applies). When communications occur between the platform and GPU the information first moves through the MMU/GMMU and is then written to RAM/VRAM. +

+
Figure 7: A depiction of region overlays within a VFIO file descriptor.
Figure 7: A depiction of region overlays within a VFIO file descriptor. See slides from: [2]
+

VFIO Quirks (region traps)

+

Figure 7: Regions of the PCI BAR require emulation (slow path) via emulated traps (known as quirks). These regions are primarily in PCI configuration space. QEMU may overlap a region overlay which when read/written to/from triggers a VM-exit to trap and emulate the region in order that appropriate translations may occur (such as those concerned with IO Virtual Address - IOVA). +

+
Peer-to-Peer DMA Isolation under IOMMU
Figure 8: Peer-to-Peer DMA Isolation under IOMMU. See slides from: [2]
+

Known IOMMU Issues

+

DMA Aliasing +

+
  • Not all devices generate unique IDs.
  • +
  • Not all devices generate IDs they should.
+

DMA Isolation +

+
  • Figure 8: Peer-to-Peer DMA Isolation. In many circumstances IO Virtual Address (IOVA) translations do not occur properly in the context of DMA peering. Transactions that occur through the IOMMU are unaffected.
+
Figure 0: Approches to GPU Virtualization.
Figure 0: Approaches to GPU Virtualization. See slides from: [61]
+

Mdev Mode

+

Mdev Mode (VFIO Mediated Device) is a method of virtualizing I/O devices enabling full API capabilities without the requirement for hardware assistance. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Neo Jia, Kirti Wankhede, Kevin Tian, Yiying Zhang, David Cowperthwaite, Kun Tian, Yaozu Dong, Tina Zhang, Gerd Hoffmann, & Zhi Wang. +

See references 1, 7, 8, 17, 18, 19, 70 in the References (Talks & Reading Material) section. +

+

Mediated Core

+

The mediated device framework made 3 major changes to the VFIO driver. +

+ +

The full list of these changes can be seen in the lists.gnu.org Qemu-devel mailing list archive. +

+

Device Initialization

+

This section will deal with how an Mdev driver is initialized. +

Sample mdev code for device initialization can be found here. +

+

Registering VFIO MDEV as a driver

+

VFIO Mdev must be registered as a driver. This register event occurs between the Mdev Driver Register Interface and the VFIO MDEV interface. +

+

Registering PCIE Device with the Mediated Core

+
Registering the mediated device.
Figure 9: Registering the mediated device. This step may be accomplished via the vendor driver or via GVM/Mdev-GPU for drivers which do not include support for Mdev functionality and/or do not support arbitrary Mdev types.
+

Figure 9: The vendor driver must register with the Mediated Core's Device Register Interface. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Registering Mediated Callbacks (CBs)

+

Figure 9: The vendor driver must now register Mediated Callbacks which it expects to receive from Mdev devices. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Creating a Mediated Device via mdev-sysfsdev API

+
Figure 10: Echoing a UUID into the mdev-sysfsdev API. This functionality is included in mdevctl and in . See slides from: [1]
+

Figure 10: The user of an mdev capable device driver may echo values such as a UUID into the mdev-sysfsdev interface to create a unique mediated device. UUIDs must be unique per mdev device within a host. +

+
Figure 10: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor.
Figure 11: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor. See slides from: [1]
+

QEMU adds VFIO device to IOMMU container-group

+

Figure 11: When starting a QEMU process with a VFIO-mdev attached QEMU calls the VFIO API to add the VFIO device to an IOMMU container/group. QEMU then runs the IOCTL to obtain a file descriptor for the device. +

+

QEMU passes mdev device file descriptor to VM

+
Figure 11: QEMU presenting the VFIO file descriptor into the virtual machine.
Figure 12: QEMU presenting the VFIO file descriptor into the virtual machine. See slides from: [1]
+

Figure 12: Once QEMU has obtained the VFIO file descriptor for the Mdev device via IOCTL it is then QEMU's job to present the file descriptor into the virtual machine so that the mdev may be used by the guest. +

+

Instruction Execution

+
Figure 13: A simple diagram of signalling from host to guest (via irqfd) & guest to host (via ioeventfd) From blog.allenx
+

Figure 13: Mdev Mode moves instruction information across a virtual function (VF) device using Remote Procedure Calls generally by way of software interrupt (IOCTL). Signals to and from the guest and the host GPU driver may be passed over file descriptors such as the Interrupt Request File Descriptor (irqfd) and IO Event File Descriptor (ioeventfd). +The irqfd may be used to signal from the host into the guest whereas the ioeventfd may be used to signal from the guest into the host. Guest GPU instructions which would normally serialize as pRPCs (physical Remote Procedure Calls) are instead serialized from the guest as vRPCs (virtual Remote Procedure Calls) which are executed by the host mediated driver. +

+

IRQ remapping

+

Interrupt Requests (IRQs) must be remapped (trapped for virtualized execution) to protect the host from sensitive instructions which may affect global memory state. +

+

Interrupt Injection

+

-- +

--Researching-- +

-- +

+

Memory Management

+

Mdev memory management is handled by vendor driver software. +

+

Region Passthrough

+

Guests may be presented with emulated memory regions or via passthrough regions or a mixture of the two such as in the case of passthrough regions with BAR 0 configuration space emulation while other regions are passthrough'd. +

+
Emulated Regions
+

Emulated memory regions use indirect emulated communication requiring a VM-exit (slow). These regions are often used for virtual PCI config space such as in this sample code. +

+
Passthrough Regions
+

Passthrough memory regions use direct communication requiring no VM-exit (fast). +

+
Region Access
+
Figure 13: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs
Figure 14: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs. See slides from: [1]
+

Figure 14: QEMU gets region information via VFIO User API (UAPI) from the vendor driver through VFIO-mdev and Mediated Callbacks. +

+
Error creating thumbnail: File missing
Figure 15: Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation. See slides from: [1]
+

Figure 15: The guest's vendor driver accesses the Mdev MMIO trapped region backed by a mdev file descriptor (fd) which triggers an Extended Page Table (EPT) violation. +

+
Figure 15: KVM services EPT violation and forwards to QEMU VFIO PCI driver.
Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. See slides from: [1]
+

Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. +

+
Figure 16: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor.
Figure 17: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor. See slides from: [1]
+

Figure 17: QEMU convert request from KVM to R/W access to Mdev file descriptor. +

+

EPT Page Violations

+

Guest Memory Mapped IO (MMIO) trips Extended Page Table (EPT) violations which are trapped by the host MMU. KVM services EPT violations and forwards to QEMU VFIO PCI driver. QEMU then converts the request from KVM to R/W access to the Mdev File Descriptor (FD). Reads and writes are then handled by the host GPU device driver via mediated callbacks (CBs) and VFIO-mdev. +

+

Mediated DMA Translations

+

-- +

--Researching-- +

-- +

Because memory is not statically allocated by the vendor driver under the mediated device framework there is no requirement to make use of traditional VFIO pinned pages (via the vfio-pci module) rather MMIO memory can be mapped at runtime incrementally. As a result non-standard mediated device vfio stub modules may be used. +

Figure 18: Memory regions get added by QEMU. +

+
Memory Regions Added by QEMU
Figure 18: Memory Regions Added by QEMU. See slides from: [1]
+

Figure 19: QEMU calls VFIO_DMA_MAP via Memory listener. (not just guest physical memory but also device memory will be added through this memory listener) +

+
QEMU calls VFIO DMA MAP via Memory listener
Figure 19: QEMU calls VFIO DMA MAP via Memory listener. See slides from: [1]
+
Type 1 IOMMU Tracks VA-GFN
Figure 20: Type 1 IOMMU Tracks <VA, GFN>. See slides from: [1]
+

Figure 20: Type 1 IOMMU tracks <VA, GFN (Guest Frame Number)>. We build a table to list the QEMU VAs and track the their mapping relation to Guest Frame Numbers (GFNs). +

+

Scheduling

+

Scheduling is handled by the host mdev driver. +

+

Kernel API

+

Kernel documentation used for implementing a VFIO Mediated Device may be found at kernel.org. +

+

Sample Code

+

Sample code for various mdev implementations may be found below: +

Mediated Virtual PCI Display Host Device: +

+
  1. mdpy.c
  2. +
  3. mdpy-fb.c
  4. +
  5. mbochs.c.
+

Serial PCI Port-based Mediated Device: +

+
  1. mtty.c.
+
Compilation
+

To compile the kernel modules linked above you should have your distro's equivalent of the build-essential package installed. The included Makefile should provide all that is necessary to successfully compile the kernel modules. You can type the following command to compile the modules from within the directory: +

make +

When the make operation has been completed successfully the directory will now contain .ko files. These files are the binary kernel modules. +

+
Loading Kernel Modules
+

Now that you have compiled the kernel modules you may load them via the insmod command. +

For example to load the mtty.ko module run the following command from within the directory where you built the modules: +

insmod mtty.ko +

+
Unloading Kernel Modules
+

To unload any of the kernel modules you may make use of the rmmod command. +

For example to unload the mtty.ko module run the following command: +

rmmod mtty.ko +

+
Additional Documentation
+

An additional guide explaining how to make use of the mtty.c sample code may be found at line 308 of the kernel.org VFIO Mediated Device documentation. +

+

Mdev Mode Requirements

+

Driver Support. +

Software HPA<->GPA Boundary Enforcement. +

+

SR-IOV Mode

+

SR-IOV Mode (Single Root I/O Virtualization) involves hardware assisted virtualization on I/O peripherals. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Zheng Xiao, Jerry Jiang, & Ken Xue. +

See reference 6 in the References (Talks & Reading Material) section. +

+

Instruction Execution

+

SR-IOV communicates instructions from a virtual function (VF) directly to the PCI BAR. +

+

Memory Management

+

Guests are presenting with passthrough memory regions by the device firmware. +

+

Scheduling

+

Scheduling may be handled by the host mdev driver and/or the device firmware. +

+

SR-IOV Mode Requirements

+

Driver Support. +

Device SR-IOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

SIOV Mode

+

SIOV (Scalable I/O Virtualization) involves the combination of concepts form both SR-IOV Mode and Mdev Mode as well as novel concepts like shared IOMMU aware buffers and offloading of PCI config space VM-exits (slow path) to a discrete controller. +

Revision 1.0 of the SIOV specification can be read on the Open Compute Project website. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Kevin Tian, Tina Zhang, Xin Zeng, Yi Liu. +

See references 3, 4, 5, 16, 17, 18, 19, 20, 21 in the References (Talks & Reading Material) section. +

+

Memory Management

+

Enhancements to Intel VT-d introduce new 'Scalable Mode' to allow the platform to assign more granular IOMMU allocations to mediated devices (mdev memory management). This change is referred to as an IOMMU Aware Mediated Device. +

+

IOMMU Aware Mediated Device

+

SIOV made several changes to the VFIO driver, Intel IOMMU, and Mediated Device Framework. +

The full list of these changes can be seen in the mailing list archive on lwn.net under (vfio/mdev: IOMMU aware mediated device). +

+

Shared Hardware Workqueues

+

SIOV makes use of Shared Hardware Workqueues which may be accessed by processes or Virtual Machines. +

According to kernel.org: "In order to allow the hardware to distinguish the context for which work is being executed in the hardware by SWQ interface, SIOV uses Process Address Space ID (PASID), which is a 20-bit number defined by the PCIe SIG. PASID value is encoded in all transactions from the device. This allows the IOMMU to track I/O on a per-PASID granularity in addition to using the PCIe Resource Identifier (RID) which is the Bus/Device/Function." +

+

SIOV Mode Requirements

+

Driver Support. +

Device SIOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

References (Talks & Reading Material)

+
  1. [2016] vGPU on KVM - A VFIO Based Framework by Neo Jia & Kirti Wankhede - slides
  2. +
  3. [2016] An Introduction to PCI Device Assignment with VFIO by Alex Williamson - slides
  4. +
  5. [2017] Scalable I/O Virtualization by Kevin Tian
  6. +
  7. [2019] Bring a Scalable IOV Capable Device into Linux World by Xin Zeng & Yi Liu - slides
  8. +
  9. Scalable I/O Virtualization Revision 1.0
  10. +
  11. [2018] Live Migration Support for GPU with SRIOV by Zheng Xiao, Jerry Jiang & Ken Xue - slides
  12. +
  13. [2017] Intel GVT-g: From Production to Upstream - Zhi Wang, Intel
  14. +
  15. [2016] Qemu Graphics Update 2016 by Gerd Hoffmann
  16. +
  17. IOCTL
  18. +
  19. eventfd - root/virt/kvm/eventfd.c
  20. +
  21. (kernel diff:: KVM: irqfd)
  22. +
  23. (kernel diff:: KVM: add ioeventfd support)
  24. +
  25. KVM irqfd & ioeventfd
  26. +
  27. VFIO - Virtual Function I/O - root/virt/kvm/vfio.c
  28. +
  29. VFIO Mediated Devices
  30. +
  31. IOMMU Aware Mediated Device
  32. +
  33. Hardware-Assisted Mediated Pass-Through with VFIO by Kevin Tian
  34. +
  35. [2017] Generic Buffer Sharing Mechanism for Mediated Devices by Tina Zhang
  36. +
  37. [2019] Toward a Virtualization World Built on Mediated Pass-Through - Kevin Tian
  38. +
  39. Auxiliary Bus
  40. +
  41. Shared Virtual Addressing
  42. +
  43. vfio.blogspot.com
  44. +
  45. XenGT by Kevin Tian
  46. +
  47. VMWare Academic Publications: GPU Virtualization by Micah Dowty & Jeremy Sugerman
  48. +
  49. PCI SIG I/O Virtualization
  50. +
  51. VMGL by the University of Toronto Computer Science Department
  52. +
  53. Kepler VGX Hypervisor
  54. +
  55. Intel Virtualization Technology for Directed I/O (VT-d): Enhancing Intel platforms for efficient virtualization of I/O devices
  56. +
  57. DMA-Mapping.txt (Dynamic DMA Mapping)
  58. +
  59. KVM MMU Virtualization by Xiao Guangrong
  60. +
  61. OSDEV: PCI
  62. +
  63. Down to the TLP: How PCI express devices talk (Part I)
  64. +
  65. Down to the TLP: How PCI express devices talk (Part II)
  66. +
  67. Intel ACRN: Enabling SR-IOV Virtualization
  68. +
  69. Kernel.org sysfs-bus-pci
  70. +
  71. Linux Kernel Labs: Memory Mapping
  72. +
  73. Inside Windows Page Frame Number (PFN) - Part 1
  74. +
  75. Direct Rendering Infrastructure (DRI)
  76. +
  77. DRI User Guide
  78. +
  79. Linux Kernel Labs: IO Virtualization
  80. +
  81. Gallium3D: Main Page
  82. +
  83. Gallium3D Wiki
  84. +
  85. Gallium3D talk from XDS 2007
  86. +
  87. Memory Management High Level Design (ARCN)
  88. +
  89. Block Architecture Diagrams for Geforce series
  90. +
  91. Block diagrams for 40 series instruction format
  92. +
  93. PCI Configuration Space
  94. +
  95. GPU virtual memory in WDDM 2.0
  96. +
  97. Intel Graphics Programmer's Reference Manuals (PRM)
  98. +
  99. i915: Hardware Contexts (and some bits about batchbuffers)
  100. +
  101. i915: The Global GTT Part 1
  102. +
  103. i915: Aliasing PPGTT Part 2
  104. +
  105. i915: True PPGTT Part 3
  106. +
  107. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  108. +
  109. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  110. +
  111. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  112. +
  113. A deep dive into QEMU: PCI slave devices
  114. +
  115. Debugging QEMU Guests with GDB (start & stop, examine state like registers & memory, set breakpoints & watchpoints)
  116. +
  117. IOMMU Introduction
  118. +
  119. Arch Wiki: Intel Graphics
  120. +
  121. An Introduction to Intel Graphics Virtualization Technology (legacy GVT-g) by Zhi Wang
  122. +
  123. Kernel.org: vfio iommu type1: Add support for mediated devices
  124. +
  125. Hardware and Compute Abstraction Layers For Accelerated Computing Using Graphics Hardware and Conventional CPUs
  126. +
  127. More Shadow Walker: The Progression of TLB-Splitting on x86
  128. +
  129. MMU Virtualization Via Intel EPT: Technical Details
  130. +
  131. Alex Williamson Github: VFIO Development (tree next)
  132. +
  133. GPU PMU: performance monitoring with perf event
  134. +
  135. Remote Procedure Call (RPC)
  136. +
  137. Virtual Open Systems: API Remoting
  138. +
  139. A Full GPU Virtualization Solution with Mediated Pass-Through by Yiying Zhang, David Cowperthwaite, Kun Tian, and Yaozu Dong - [Paper] - [Video] - [Slides 1] - [Slides 2]
  140. +
  141. [2014] KvmGT: A Full GPU Virtualization Solution by Jike Song
  142. +
  143. docs.kernel.org: DRM Memory Management
  144. +
  145. docs.kernel.org: PCI Bus Subsystem
  146. +
  147. openglbook.com: What is OpenGL?
  148. +
  149. [2020] Getting pixels on screen: introduction to Kernel Mode Setting (KMS) by Simon Ser - slides
  150. +
  151. Dynamic Mediation for Live Migration VFIO-PCI
  152. +
  153. DRM Management Via CGroups
  154. +
  155. DRM: Add GEM ("graphics execution manager") to i915 driver.
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php/Virtualization_Fundamentals.html b/wiki/open-iov.org/index.php/Virtualization_Fundamentals.html new file mode 100644 index 0000000..eed916d --- /dev/null +++ b/wiki/open-iov.org/index.php/Virtualization_Fundamentals.html @@ -0,0 +1,247 @@ + + + + +Virtualization Fundamentals - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtualization Fundamentals

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

This following page is intended to index and summarize information related to the fundamentals of virtualization of computer systems.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Popek and Goldberg Virtualization Requirements

+

The Popek and Goldberg virtualization requirements are a set of conditions sufficient for a computer architecture to support system virtualization efficiently. They were introduced by Gerald J. Popek and Robert P. Goldberg in their 1974 article "Formal Requirements for Virtualizable Third Generation Architectures". Even though the requirements are derived under simplifying assumptions, they still represent a convenient way of determining whether a computer architecture supports efficient virtualization and provide guidelines for the design of virtualized computer architectures. +

+

Goldberg Survey of Virtual Machine Research

+

The complete instruction-by-instruction simulation of one computer system on a different system is a well-known computing technique. It is often used for software development when a hardware base is being altered. For example, if a programmer is developing software for some new special purpose (e.g., aerospace) computer X which is under construction and as yet unavailable, he will likely begin by writing a simulator for that computer on some available general-purpose machine G. The simulator will provide a detailed simulation of the special-purpose environment X, including its processor, memory, and I/O devices. Except for possible timing dependencies, programs which run on the “simulated machine X” can later run on the “real machine X” (when it is finally built and checked out) with identical effect. The programs running on X can be arbitrary — including code to exercise simulated I/O devices, move data and instructions anywhere in simulated memory, or execute any instruction of the simulated machine. The simulator provides a layer of software filtering which protects the resources of the machine G from being misused by programs on X. +

+

Microkernels Meet Recursive Virtual Machines

+

This paper describes a novel approach to providing mod- ular and extensible operating system functionality and en- capsulated environments based on a synthesis of micro- kernel and virtual machine concepts. We have developed a software-based virtualizable architecture called Fluke that allows recursive virtual machines (virtual machines running on other virtual machines) to be implemented ef- ficiently by a microkernel running on generic hardware. A complete virtual machine interface is provided at each level; efficiency derives from needing to implement only new functionality at each level. This infrastructure allows common OS functionality, such as process management, demand paging, fault tolerance, and debugging support, to be provided by cleanly modularized, independent, stack- able virtual machine monitors, implemented as user pro- cesses. It can also provide uncommon or unique OS fea- tures, including the above features specialized for particu- lar applications’ needs, virtual machines transparently dis- tributed cross-node, or security monitors that allow arbi- trary untrusted binaries to be executed safely. Our proto- type implementation of this model indicates that it is prac- tical to modularize operating systems this way. Some types of virtual machine layers impose almost no overhead at all, while others impose some overhead (typically 0–35%), but only on certain classes of applications. +

+

A Comparison of Software and Hardware Techniques for x86 Virtualization

+

Until recently, the x86 architecture has not permitted classical trap-and-emulate virtualization. Virtual Machine Monitors for x86, such as VMwareR Workstation and Virtual PC, have instead used binary translation of the guest kernel code. However, both Intel and AMD have now introduced architectural extensions to support classical virtualization. We compare an existing software VMM with a new VMM designed for the emerging hardware support. Surprisingly, the hardware VMM often suffers lower performance than the pure software VMM. To determine why, we study architecture-level events such as page table updates, context switches and I/O, and find their costs vastly different among native, software VMM and hardware VMM execution. We find that the hardware support fails to provide an unambiguous performance advantage for two primary reasons: first, it offers no support for MMU virtualization; second, it fails to co-exist with existing software techniques for MMU virtualization. We look ahead to emerging techniques for addressing this MMU virtualization problem in the context of hardware-assisted virtualization. +

+

Virtualizing I/O Devices on VMware Workstation’s Hosted Virtual Machine Monitor

+

Virtual machines were developed by IBM in the 1960’s to provide concurrent, interactive access to a mainframe computer. Each virtual machine is a replica of the underlying physical machine and users are given the illusion of running directly on the physical machine. Virtual machines also provide benefits like isolation and resource sharing, and the ability to run multiple flavors and configurations of operating systems. VMware tmWorkstation brings such mainframe-class virtual machine technology to PC-based desktop and workstation computers. This paper focuses on VMware Workstation’s approach to virtualizing I/O devices. PCs have a staggering variety of hardware, and are usually pre-installed with an operating system. Instead of replacing the pre-installed OS, VMware Workstation uses it to host a user-level application (VMApp) component, as well as to schedule a privileged virtual machine monitor (VMM) component. The VMM directly provides high-performance CPU virtualization while the VMApp uses the host OS to virtualize I/O devices and shield the VMM from the variety of devices. A crucial question is whether virtualizing devices via such a hosted architecture can meet the performance required of high throughput, low latency devices. To this end, this paper studies the virtualization and performance of an Ethernet adapter on VMware Workstation. Results indicate that with optimizations, VMware Workstation’s hosted virtualization architecture can match native I/O throughput on standard PCs. Although a straightforward hosted implementation is CPU-limited due to virtualization overhead on a 733 MHz PentiumR III system on a 100 Mb/s Ethernet, a series of optimizations targeted at reducing CPU utilization allows the system to match native network throughput. Further optimizations are discussed both within and outside a hosted architecture. +

+

Dynamic binary translation and optimization

+

We describe a VLIW architecture designed specifically as a target for dynamic compilation of an existing instruction set architecture. This design approach o�ers the simplicity and high performance of statically scheduled architectures, achieves compatibility with an established architecture, and makes use of dynamic adaptation. Thus, the original architecture is implemented using dynamic compilation, a process we refer to as DAISY (Dynamically Architected Instruction Set from Yorktown). The dynamic compiler exploits runtime pro�le information to optimize translations so as to extract instruction level parallelism. This work reports different design trade-offs in the DAISY system, and their impact on �nal system performance. The results show high degrees of instruction parallelism with reasonable translation overhead and memory usage. Keywords| dynamic compilation, binary translation, dynamic optimization, just-in-time compilation, adaptive code generation, pro�le-directed feedback, instruction-level parallelism, very long instruction word architectures, virtual machines, instruction set architectures, instruction set layering. +

+

Xen and the Art of Virtualization

+

Numerous systems have been designed which use virtualization to subdivide the ample resources of a modern computer. Some require specialized hardware, or cannot support commodity operating systems. Some target 100% binary compatibility at the expense of performance. Others sacrifice security or functionality for speed. Few offer resource isolation or performance guarantees; most provide only best-effort provisioning, risking denial of service. This paper presents Xen, an x86 virtual machine monitor which allows multiple commodity operating systemsto share conventional hardware in a safe and resource managed fashion, but without sacrificing either performance or functionality. This is achieved by providing an idealized virtual machine abstraction to which operating systems such as Linux, BSD and Windows XP, can be ported with minimal effort. Our design is targeted at hosting up to 100 virtual machine instances simultaneously on a modern server. The virtualization approach taken by Xen is extremely efficient: we allow operating systems such as Linux and Windows XP to be hosted simultaneously for a negligible performance overhead — at most a few percent compared with the unvirtualized case. We considerably outperform competing commercial and freely available solutions in a range of microbenchmarks and system-wide tests. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMD&action=edit.html b/wiki/open-iov.org/index.php?title=AMD&action=edit.html new file mode 100644 index 0000000..76732fb --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMD&action=edit.html @@ -0,0 +1,200 @@ + + + + +View source for AMD - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for AMD

+
+ +
← AMD
+
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to AMD.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMD&action=history.html b/wiki/open-iov.org/index.php?title=AMD&action=history.html new file mode 100644 index 0000000..41fa2b6 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMD&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "AMD" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "AMD"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMD&action=info.html b/wiki/open-iov.org/index.php?title=AMD&action=info.html new file mode 100644 index 0000000..d604134 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMD&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "AMD" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "AMD"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleAMD
Default sort keyAMD
Page length (in bytes)43
Page ID10
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:35, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:35, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMD&oldid=38.html b/wiki/open-iov.org/index.php?title=AMD&oldid=38.html new file mode 100644 index 0000000..c73e284 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMD&oldid=38.html @@ -0,0 +1,213 @@ + + + + +AMD - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

AMD

+
+
From Open-IOV
+
Revision as of 00:35, 18 December 2021 by Arthur (talk | contribs) (Boilerplate)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

Mdev Drivers

+

Hardware Support

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMDGPU&action=edit.html b/wiki/open-iov.org/index.php?title=AMDGPU&action=edit.html new file mode 100644 index 0000000..78a441b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMDGPU&action=edit.html @@ -0,0 +1,209 @@ + + + + +View source for AMDGPU - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for AMDGPU

+
+ +
← AMDGPU
+
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to AMDGPU.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMDGPU&action=history.html b/wiki/open-iov.org/index.php?title=AMDGPU&action=history.html new file mode 100644 index 0000000..2aad6c2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMDGPU&action=history.html @@ -0,0 +1,209 @@ + + + + +Revision history of "AMDGPU" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "AMDGPU"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMDGPU&action=info.html b/wiki/open-iov.org/index.php?title=AMDGPU&action=info.html new file mode 100644 index 0000000..f3068f1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMDGPU&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "AMDGPU" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "AMDGPU"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleAMDGPU
Default sort keyAMDGPU
Page length (in bytes)1,230
Page ID88
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation15:19, 17 August 2022
Latest editorArthur (talk | contribs)
Date of latest edit00:32, 2 March 2023
Total number of edits3
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=AMDGPU&oldid=23746.html b/wiki/open-iov.org/index.php?title=AMDGPU&oldid=23746.html new file mode 100644 index 0000000..9bf0b37 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=AMDGPU&oldid=23746.html @@ -0,0 +1,221 @@ + + + + +AMDGPU - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

AMDGPU

+
+
From Open-IOV
+
Revision as of 00:32, 2 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

The AMDGPU driver is AMD's open source GPU driver which comes included with the Linux kernel.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

This software's source code can be viewed here. +


+

This Open-IOV page should aim to provide similar insights about APIs exposed to Linux developers to those documented on the OpenRM Driver API page. +


+This page may provide some of the required information from which details immediately relevant to graphics mediation can be consolidated: +

https://dri.freedesktop.org/docs/drm/gpu/amdgpu.html +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Articles&action=edit.html b/wiki/open-iov.org/index.php?title=Articles&action=edit.html new file mode 100644 index 0000000..e31a68b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Articles&action=edit.html @@ -0,0 +1,319 @@ + + + + +View source for Articles - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Articles

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Articles.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Articles&action=history.html b/wiki/open-iov.org/index.php?title=Articles&action=history.html new file mode 100644 index 0000000..610ca43 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Articles&action=history.html @@ -0,0 +1,256 @@ + + + + +Revision history of "Articles" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Articles"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)
+ + + +
+
+
+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Articles&action=info.html b/wiki/open-iov.org/index.php?title=Articles&action=info.html new file mode 100644 index 0000000..564f689 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Articles&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Articles" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Articles"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleArticles
Default sort keyArticles
Page length (in bytes)5,196
Page ID28
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Counted as a content pageYes
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation04:19, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit16:27, 19 April 2024
Total number of edits109
Total number of distinct authors2
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Articles&oldid=23794.html b/wiki/open-iov.org/index.php?title=Articles&oldid=23794.html new file mode 100644 index 0000000..e0108f1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Articles&oldid=23794.html @@ -0,0 +1,324 @@ + + + + +Articles - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Articles

+
+
From Open-IOV
+
Revision as of 16:27, 19 April 2024 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This page indexes the articles contained within Open-IOV. +

If you're new to GPU Virtualization start by reading the Introduction article. +

+ + +

Start Here

+

Introduction +

About Open-IOV (CC-BY-4.0) +

+

Abstract

+

Glossary +

Virtualization Fundamentals +

Merged Drivers +

+

Design Documents

+

Virtual I/O Internals +

GPU Driver Internals +

+

Driver Integration Documents

+

Nvidia +

Intel +

AMD +

+

Projects

+

LIME Is Mediated Emulation +

Looking Glass +

OpenXT +

OpenXT: vGlass +

OpenXT: Surfman (legacy DRM) +

Bromium/uXen +

Xen Project +

Qubes OS +

Intel Celadon +

vGPU_Unlock +

+

Device Support

+

GPU Support +

CPU Support +

GPU Firmware +

+

Software Support

+

Hypervisor Support +

GPU Software Bill Of Materials (SBOM) +

+

API Documentation

+

Kernel APIs

+

Kernel.org Driver Core Documentation +

NT Kernel (Windows) IOMMU-based GPU Isolation +

VFIO - vfio.h - mdev.h +

VFIO Mediated Device +

+

Driver APIs

+

i915 GVT-g API +

Nouveau Tools & API +

+

Sample Code

+

GPLv2 sources mirrored from elixir.bootlin.com with simple makefile changes. +

mtty.c - mdpy.c - mdpy-fb.c - mdpy-defs.h - mbochs.c +

+

Virtualization APIs

+

GVM/Mdev-CLI API +

QEMU Machine Protocol (QMP) Reference Manual +

Inter-VM Shared Memory (IVSHMEM) +

+

User Guides

+

Setup Guide +

Looking Glass Quickstart Guide +

Intel GVT-g Setup Guide +

AMD GPU-IOV Module Docs +

PCI passthrough via OVMF +

RedHat Virtualization Guide +

+

Developer Guides

+

Hypervisor From Scratch +

Linux Device Drivers (3rd Edition) +

GPU Driver Developer's Guide +

How To Write PCI Drivers +

Data Plane Development Kit: IVSHMEM Programming Guide +

+

Specifications

+

Hyper-V Hypervisor Top Level Functional Specification (TLFS) +

+

Communities & Mailing Lists

+

Open-IOV Discord +

Intel-gfx Mailing List +

Nouveau Mailing List +

AMD-gfx Mailing List +

VFIO-users Mailing List +

Level1Techs Forum [VFIO Topic] +

VFIO Subreddit +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=CPU_Support&action=edit.html b/wiki/open-iov.org/index.php?title=CPU_Support&action=edit.html new file mode 100644 index 0000000..3e00f00 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=CPU_Support&action=edit.html @@ -0,0 +1,232 @@ + + + + +View source for CPU Support - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for CPU Support

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to CPU Support.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=CPU_Support&action=history.html b/wiki/open-iov.org/index.php?title=CPU_Support&action=history.html new file mode 100644 index 0000000..4178608 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=CPU_Support&action=history.html @@ -0,0 +1,220 @@ + + + + +Revision history of "CPU Support" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "CPU Support"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=CPU_Support&action=info.html b/wiki/open-iov.org/index.php?title=CPU_Support&action=info.html new file mode 100644 index 0000000..140c223 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=CPU_Support&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "CPU Support" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "CPU Support"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleCPU Support
Default sort keyCPU Support
Page length (in bytes)1,536
Page ID22
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation01:09, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:31, 2 March 2023
Total number of edits14
Total number of distinct authors2
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=CPU_Support&oldid=23744.html b/wiki/open-iov.org/index.php?title=CPU_Support&oldid=23744.html new file mode 100644 index 0000000..14666fc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=CPU_Support&oldid=23744.html @@ -0,0 +1,234 @@ + + + + +CPU Support - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

CPU Support

+
+
From Open-IOV
+
Revision as of 00:31, 2 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

In order to use mediated device functionality you may need to set some or all of the following settings in your machine's UEFI.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

UEFI Setup

+

Intel CPUs (VT-d)

+

Optimal UEFI Settings +

IOMMU >> Enabled +

SR-IOV Support >> Enabled +

VT-x >> Enabled +

ARI Mode >> Enabled +

+

AMD CPUs (AMD-v)

+

Optimal UEFI Settings +

SVM Mode >> Enabled +

SR-IOV Support >> Enabled +

ACS Enable >> Enabled +

IOMMU >> Enabled +

PCI AER Support >> Enabled +

ACS Enable >> Enabled +

ARI Mode >> Enabled +

Note to AMD CPU users: If you are using a first generation Ryzen or ThreadRipper platform you may need to update your motherboard UEFI to make proper use of IOMMU Groups. If your motherboard manufacturer has not made an update available you may need to apply an ACS override patch. Successive AMD CPU platforms are unaffected. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=edit.html new file mode 100644 index 0000000..d4865b4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Application Binary Interface (ABI).png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Application Binary Interface (ABI).png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Application Binary Interface (ABI).png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=history.html b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=history.html new file mode 100644 index 0000000..4eb56e8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Application Binary Interface (ABI).png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Application Binary Interface (ABI).png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=info.html b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=info.html new file mode 100644 index 0000000..ba469e3 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Application Binary Interface (ABI).png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Application Binary Interface (ABI).png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Application Binary Interface (ABI).png
Default sort keyApplication Binary Interface (ABI).png
Page length (in bytes)34
NamespaceFile
Page ID17
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value23604e00ccebc9abefb8ece5c012e70d84408eb5
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:47, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:47, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&oldid=48.html b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&oldid=48.html new file mode 100644 index 0000000..2ccc61e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Application_Binary_Interface_(ABI).png&oldid=48.html @@ -0,0 +1,234 @@ + + + + +File:Application Binary Interface (ABI).png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Application Binary Interface (ABI).png

+
+
From Open-IOV
+
Revision as of 00:47, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Application_Binary_Interface_(ABI).png ‎(800 × 600 pixels, file size: 146 KB, MIME type: image/png) +

Application Binary Interface (ABI) +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:47, 18 December 2021Thumbnail for version as of 00:47, 18 December 2021800 × 600 (146 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=edit.html new file mode 100644 index 0000000..54b5027 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Device Decomposure and Recomposure via VFIO.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Device Decomposure and Recomposure via VFIO.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Device Decomposure and Recomposure via VFIO.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=history.html new file mode 100644 index 0000000..09af36a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Device Decomposure and Recomposure via VFIO.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Device Decomposure and Recomposure via VFIO.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=info.html new file mode 100644 index 0000000..5ebae01 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Device Decomposure and Recomposure via VFIO.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Device Decomposure and Recomposure via VFIO.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Device Decomposure and Recomposure via VFIO.png
Default sort keyDevice Decomposure and Recomposure via VFIO.png
Page length (in bytes)43
NamespaceFile
Page ID53
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value754cbe6ba657097c75976d6bf691eba8e8bef85a
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation15:06, 6 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit15:06, 6 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&oldid=399.html b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&oldid=399.html new file mode 100644 index 0000000..b7cf286 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Device_Decomposure_and_Recomposure_via_VFIO.png&oldid=399.html @@ -0,0 +1,234 @@ + + + + +File:Device Decomposure and Recomposure via VFIO.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Device Decomposure and Recomposure via VFIO.png

+
+
From Open-IOV
+
Revision as of 15:06, 6 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,135 × 558 pixels, file size: 60 KB, MIME type: image/png) +

Device Decomposure and Recomposure via VFIO +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current15:06, 6 May 2022Thumbnail for version as of 15:06, 6 May 20221,135 × 558 (60 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=edit.html new file mode 100644 index 0000000..30a36fe --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Echoing a UUID into the sysfsdev API.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Echoing a UUID into the sysfsdev API.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Echoing a UUID into the sysfsdev API.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=history.html new file mode 100644 index 0000000..077f07f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Echoing a UUID into the sysfsdev API.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Echoing a UUID into the sysfsdev API.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=info.html new file mode 100644 index 0000000..c98e385 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Echoing a UUID into the sysfsdev API.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Echoing a UUID into the sysfsdev API.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Echoing a UUID into the sysfsdev API.png
Default sort keyEchoing a UUID into the sysfsdev API.png
Page length (in bytes)36
NamespaceFile
Page ID59
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuee1c2d5cb2445033156017723ae0d3692513d90fc
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation16:20, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit16:20, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&oldid=462.html b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&oldid=462.html new file mode 100644 index 0000000..adbc6d8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Echoing_a_UUID_into_the_sysfsdev_API.png&oldid=462.html @@ -0,0 +1,234 @@ + + + + +File:Echoing a UUID into the sysfsdev API.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Echoing a UUID into the sysfsdev API.png

+
+
From Open-IOV
+
Revision as of 16:20, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,717 × 1,344 pixels, file size: 56 KB, MIME type: image/png) +

Echoing a UUID into the sysfsdev API +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current16:20, 24 May 2022Thumbnail for version as of 16:20, 24 May 20221,717 × 1,344 (56 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=edit.html new file mode 100644 index 0000000..b4a1944 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 0- Approches to GPU Virtualization..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 0- Approches to GPU Virtualization..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 0- Approches to GPU Virtualization..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=history.html new file mode 100644 index 0000000..ea04ebe --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 0- Approches to GPU Virtualization..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 0- Approches to GPU Virtualization..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=info.html new file mode 100644 index 0000000..354ff87 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 0- Approches to GPU Virtualization..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 0- Approches to GPU Virtualization..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 0- Approches to GPU Virtualization..png
Default sort keyFigure 0- Approches to GPU Virtualization..png
Page length (in bytes)42
NamespaceFile
Page ID4508
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value58693ba5429c94ced021387ef03845710397f736
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation22:11, 12 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit22:11, 12 December 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&oldid=5587.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&oldid=5587.html new file mode 100644 index 0000000..ef37a68 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_Approches_to_GPU_Virtualization..png&oldid=5587.html @@ -0,0 +1,234 @@ + + + + +File:Figure 0- Approches to GPU Virtualization..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 0- Approches to GPU Virtualization..png

+
+
From Open-IOV
+
Revision as of 22:11, 12 December 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,910 × 976 pixels, file size: 230 KB, MIME type: image/png) +

Figure 0: Approches to GPU Virtualization. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current22:11, 12 December 2022Thumbnail for version as of 22:11, 12 December 20221,910 × 976 (230 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=edit.html new file mode 100644 index 0000000..f3d44ea --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 0- i915 vGPU Scheduling.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 0- i915 vGPU Scheduling.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 0- i915 vGPU Scheduling.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=history.html new file mode 100644 index 0000000..4e2229b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 0- i915 vGPU Scheduling.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 0- i915 vGPU Scheduling.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=info.html new file mode 100644 index 0000000..aada36e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 0- i915 vGPU Scheduling.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 0- i915 vGPU Scheduling.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 0- i915 vGPU Scheduling.png
Default sort keyFigure 0- i915 vGPU Scheduling.png
Page length (in bytes)30
NamespaceFile
Page ID4509
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value8831b4be27a5a42f6697339838103f3383f13e2f
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation16:57, 14 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit16:57, 14 December 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&oldid=5617.html b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&oldid=5617.html new file mode 100644 index 0000000..b1517bc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_0-_i915_vGPU_Scheduling.png&oldid=5617.html @@ -0,0 +1,234 @@ + + + + +File:Figure 0- i915 vGPU Scheduling.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 0- i915 vGPU Scheduling.png

+
+
From Open-IOV
+
Revision as of 16:57, 14 December 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,460 × 1,103 pixels, file size: 48 KB, MIME type: image/png) +

Figure 0: i915 vGPU Scheduling +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current16:57, 14 December 2022Thumbnail for version as of 16:57, 14 December 20221,460 × 1,103 (48 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=edit.html new file mode 100644 index 0000000..9c3b4b7 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 2- Firmware status information for an Intel DG2 device..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 2- Firmware status information for an Intel DG2 device..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 2- Firmware status information for an Intel DG2 device..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=history.html new file mode 100644 index 0000000..b4724f6 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 2- Firmware status information for an Intel DG2 device..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 2- Firmware status information for an Intel DG2 device..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=info.html new file mode 100644 index 0000000..e7c3117 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 2- Firmware status information for an Intel DG2 device..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 2- Firmware status information for an Intel DG2 device..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 2- Firmware status information for an Intel DG2 device..png
Default sort keyFigure 2- Firmware status information for an Intel DG2 device..png
Page length (in bytes)62
NamespaceFile
Page ID98
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuec6fdb9edb105b9fb79b6a974a17dc3bd0efb2f37
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation16:51, 23 November 2022
Latest editorArthur (talk | contribs)
Date of latest edit16:51, 23 November 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&oldid=884.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&oldid=884.html new file mode 100644 index 0000000..7f04376 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Firmware_status_information_for_an_Intel_DG2_device..png&oldid=884.html @@ -0,0 +1,234 @@ + + + + +File:Figure 2- Firmware status information for an Intel DG2 device..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 2- Firmware status information for an Intel DG2 device..png

+
+
From Open-IOV
+
Revision as of 16:51, 23 November 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(461 × 942 pixels, file size: 136 KB, MIME type: image/png) +

Figure 2: Firmware status information for an Intel DG2 device. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current16:51, 23 November 2022Thumbnail for version as of 16:51, 23 November 2022461 × 942 (136 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=edit.html new file mode 100644 index 0000000..3f44798 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 2- Intel vGPU Scheduler.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 2- Intel vGPU Scheduler.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 2- Intel vGPU Scheduler.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=history.html new file mode 100644 index 0000000..1522f4c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 2- Intel vGPU Scheduler.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 2- Intel vGPU Scheduler.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=info.html new file mode 100644 index 0000000..a02125d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 2- Intel vGPU Scheduler.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 2- Intel vGPU Scheduler.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 2- Intel vGPU Scheduler.png
Default sort keyFigure 2- Intel vGPU Scheduler.png
Page length (in bytes)30
NamespaceFile
Page ID4512
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value3380a43af887be3c209af534d82a480dc0a5b5e6
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation17:52, 20 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:52, 20 December 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&oldid=5644.html b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&oldid=5644.html new file mode 100644 index 0000000..0fb2e60 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_2-_Intel_vGPU_Scheduler.png&oldid=5644.html @@ -0,0 +1,234 @@ + + + + +File:Figure 2- Intel vGPU Scheduler.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 2- Intel vGPU Scheduler.png

+
+
From Open-IOV
+
Revision as of 17:52, 20 December 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,384 × 1,073 pixels, file size: 49 KB, MIME type: image/png) +

Figure 2: Intel vGPU Scheduler +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current17:52, 20 December 2022Thumbnail for version as of 17:52, 20 December 20221,384 × 1,073 (49 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=edit.html new file mode 100644 index 0000000..0322f9b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=history.html new file mode 100644 index 0000000..a36490a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=info.html new file mode 100644 index 0000000..91ca1e2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png
Default sort keyFigure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png
Page length (in bytes)59
NamespaceFile
Page ID21568
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuec471e1ffa9bf4205c45a1e7f2e95fa670bd48dd1
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation22:10, 3 January 2023
Latest editorArthur (talk | contribs)
Date of latest edit22:10, 3 January 2023
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&oldid=23658.html b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&oldid=23658.html new file mode 100644 index 0000000..fdf2b39 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_3-_GPU_BAR_to_Timeshared_Syhededuling_via_Channel_IO.png&oldid=23658.html @@ -0,0 +1,234 @@ + + + + +File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 3- GPU BAR to Timeshared Syhededuling via Channel IO.png

+
+
From Open-IOV
+
Revision as of 22:10, 3 January 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,843 × 1,387 pixels, file size: 67 KB, MIME type: image/png) +

Figure 3: GPU BAR to Timeshared Syhededuling via Channel IO +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current22:10, 3 January 2023Thumbnail for version as of 22:10, 3 January 20231,843 × 1,387 (67 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=edit.html new file mode 100644 index 0000000..7dc440f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 6- MMU - GMMU IOVA translation-isolation..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 6- MMU - GMMU IOVA translation-isolation..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 6- MMU - GMMU IOVA translation-isolation..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=history.html new file mode 100644 index 0000000..f12f386 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 6- MMU - GMMU IOVA translation-isolation..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 6- MMU - GMMU IOVA translation-isolation..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=info.html new file mode 100644 index 0000000..3eeb0e8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 6- MMU - GMMU IOVA translation-isolation..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 6- MMU - GMMU IOVA translation-isolation..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 6- MMU - GMMU IOVA translation-isolation..png
Default sort keyFigure 6- MMU - GMMU IOVA translation-isolation..png
Page length (in bytes)48
NamespaceFile
Page ID55
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value393d25d9261cdf2aa5ca2721ce3e96b19476e064
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:18, 6 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit18:18, 6 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&oldid=416.html b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&oldid=416.html new file mode 100644 index 0000000..3d89b3d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_6-_MMU_-_GMMU_IOVA_translation-isolation..png&oldid=416.html @@ -0,0 +1,234 @@ + + + + +File:Figure 6- MMU - GMMU IOVA translation-isolation..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 6- MMU - GMMU IOVA translation-isolation..png

+
+
From Open-IOV
+
Revision as of 18:18, 6 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(822 × 753 pixels, file size: 66 KB, MIME type: image/png) +

Figure 6: MMU - GMMU IOVA translation/isolation. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:18, 6 May 2022
Error creating thumbnail: File missing
822 × 753 (66 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=edit.html new file mode 100644 index 0000000..643a351 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=history.html b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=history.html new file mode 100644 index 0000000..fb6a55e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=info.html b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=info.html new file mode 100644 index 0000000..aba57f6 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Figure 7- A depiction of region overlays within a VFIO file descriptor..png
Default sort keyFigure 7- A depiction of region overlays within a VFIO file descriptor..png
Page length (in bytes)71
NamespaceFile
Page ID57
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value4c95a700063b198e0d796740e5703d90c29077fd
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation15:36, 11 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit15:36, 11 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&oldid=447.html b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&oldid=447.html new file mode 100644 index 0000000..8cda550 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Figure_7-_A_depiction_of_region_overlays_within_a_VFIO_file_descriptor..png&oldid=447.html @@ -0,0 +1,234 @@ + + + + +File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Figure 7- A depiction of region overlays within a VFIO file descriptor..png

+
+
From Open-IOV
+
Revision as of 15:36, 11 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,072 × 959 pixels, file size: 102 KB, MIME type: image/png) +

Figure 7: A depiction of region overlays within a VFIO file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current15:36, 11 May 2022Thumbnail for version as of 15:36, 11 May 20221,072 × 959 (102 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=edit.html new file mode 100644 index 0000000..ad871c4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=history.html b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=history.html new file mode 100644 index 0000000..b58167c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=info.html b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=info.html new file mode 100644 index 0000000..74e7e45 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png
Default sort keyGuest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png
Page length (in bytes)93
NamespaceFile
Page ID67
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value6373b231a718d1e4faf09143d044f87a5b961bc2
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:55, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:55, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&oldid=492.html b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&oldid=492.html new file mode 100644 index 0000000..20356a8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Guest_driver_accessing_Mdev_MMIO_space_backed_by_mdev_file_descriptor_triggers_EPT_violation..png&oldid=492.html @@ -0,0 +1,234 @@ + + + + +File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation..png

+
+
From Open-IOV
+
Revision as of 19:55, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,688 × 1,338 pixels, file size: 56 KB, MIME type: image/png) +

Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:55, 24 May 2022
Error creating thumbnail: File missing
1,688 × 1,338 (56 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=edit.html new file mode 100644 index 0000000..a2f36e7 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:I915 Scheduling Events and Requests.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:I915 Scheduling Events and Requests.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:I915 Scheduling Events and Requests.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=history.html b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=history.html new file mode 100644 index 0000000..8c5c3f9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=history.html @@ -0,0 +1,207 @@ + + + + +Revision history of "File:I915 Scheduling Events and Requests.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:I915 Scheduling Events and Requests.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=info.html b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=info.html new file mode 100644 index 0000000..f9558fc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:I915 Scheduling Events and Requests.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:I915 Scheduling Events and Requests.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:I915 Scheduling Events and Requests.png
Default sort keyI915 Scheduling Events and Requests.png
Page length (in bytes)35
NamespaceFile
Page ID4511
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value99dcdc4a83d7eab64c38b2aaa005395343e39ba4
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:33, 14 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:36, 14 December 2022
Total number of edits2
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&oldid=5633.html b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&oldid=5633.html new file mode 100644 index 0000000..1e2bc05 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:I915_Scheduling_Events_and_Requests.png&oldid=5633.html @@ -0,0 +1,235 @@ + + + + +File:I915 Scheduling Events and Requests.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:I915 Scheduling Events and Requests.png

+
+
From Open-IOV
+
Revision as of 19:36, 14 December 2022 by Arthur (talk | contribs) (Arthur uploaded a new version of File:I915 Scheduling Events and Requests.png)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,280 × 990 pixels, file size: 38 KB, MIME type: image/png) +

I915 Scheduling Events and Requests +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + + +
Date/TimeThumbnailDimensionsUserComment
current19:36, 14 December 2022Thumbnail for version as of 19:36, 14 December 20221,280 × 990 (38 KB)Arthur (talk | contribs)
19:33, 14 December 2022
Error creating thumbnail: File missing
1,264 × 987 (37 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=edit.html new file mode 100644 index 0000000..bdddef4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:IOCTL set VFIO container.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:IOCTL set VFIO container.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:IOCTL set VFIO container.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=history.html b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=history.html new file mode 100644 index 0000000..ddf3896 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:IOCTL set VFIO container.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:IOCTL set VFIO container.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=info.html b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=info.html new file mode 100644 index 0000000..d910ee5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:IOCTL set VFIO container.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:IOCTL set VFIO container.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:IOCTL set VFIO container.png
Default sort keyIOCTL set VFIO container.png
Page length (in bytes)45
NamespaceFile
Page ID48
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuef0cf9dca5cf395d66ce527e6f237519a1e09a2bd
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:37, 26 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit18:37, 26 April 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&oldid=343.html b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&oldid=343.html new file mode 100644 index 0000000..b2f7b5a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IOCTL_set_VFIO_container.png&oldid=343.html @@ -0,0 +1,234 @@ + + + + +File:IOCTL set VFIO container.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:IOCTL set VFIO container.png

+
+
From Open-IOV
+
Revision as of 18:37, 26 April 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,722 × 1,390 pixels, file size: 113 KB, MIME type: image/png) +

Placing a VFIO binding into a VFIO Container. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:37, 26 April 2022Thumbnail for version as of 18:37, 26 April 20221,722 × 1,390 (113 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=edit.html new file mode 100644 index 0000000..9ede32b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:IVSHMEM.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:IVSHMEM.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:IVSHMEM.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=history.html b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=history.html new file mode 100644 index 0000000..60f053c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:IVSHMEM.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:IVSHMEM.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=info.html b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=info.html new file mode 100644 index 0000000..9a79453 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:IVSHMEM.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:IVSHMEM.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:IVSHMEM.png
Default sort keyIVSHMEM.png
Page length (in bytes)7
NamespaceFile
Page ID14
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuea0ed2b2ce9a942d2c1382ada8ce005beec82bdb4
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:45, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:45, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&oldid=45.html b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&oldid=45.html new file mode 100644 index 0000000..6b208cf --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:IVSHMEM.png&oldid=45.html @@ -0,0 +1,234 @@ + + + + +File:IVSHMEM.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:IVSHMEM.png

+
+
From Open-IOV
+
Revision as of 00:45, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(834 × 564 pixels, file size: 29 KB, MIME type: image/png) +

IVSHMEM +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:45, 18 December 2021Thumbnail for version as of 00:45, 18 December 2021834 × 564 (29 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=edit.html new file mode 100644 index 0000000..c5e2a20 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Intel GVT-g Capabilities.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Intel GVT-g Capabilities.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Intel GVT-g Capabilities.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=history.html new file mode 100644 index 0000000..c80326f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Intel GVT-g Capabilities.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Intel GVT-g Capabilities.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=info.html new file mode 100644 index 0000000..5d4aca1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Intel GVT-g Capabilities.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Intel GVT-g Capabilities.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Intel GVT-g Capabilities.png
Default sort keyIntel GVT-g Capabilities.png
Page length (in bytes)35
NamespaceFile
Page ID31
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuee0359604afbabc8d8b417fbf546e9f01d607b63f
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:20, 20 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit18:20, 20 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&oldid=105.html b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&oldid=105.html new file mode 100644 index 0000000..827c81b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_GVT-g_Capabilities.png&oldid=105.html @@ -0,0 +1,234 @@ + + + + +File:Intel GVT-g Capabilities.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Intel GVT-g Capabilities.png

+
+
From Open-IOV
+
Revision as of 18:20, 20 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(958 × 717 pixels, file size: 175 KB, MIME type: image/png) +

"Accelerate up to 8 VMs plus DOM0." +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:20, 20 December 2021Thumbnail for version as of 18:20, 20 December 2021958 × 717 (175 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=edit.html new file mode 100644 index 0000000..f88ff3d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Intel i915 Host DRM + VFIO-Mdev..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Intel i915 Host DRM + VFIO-Mdev..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Intel i915 Host DRM + VFIO-Mdev..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=history.html b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=history.html new file mode 100644 index 0000000..01edd80 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Intel i915 Host DRM + VFIO-Mdev..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Intel i915 Host DRM + VFIO-Mdev..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=info.html b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=info.html new file mode 100644 index 0000000..9bb85f3 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Intel i915 Host DRM + VFIO-Mdev..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Intel i915 Host DRM + VFIO-Mdev..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Intel i915 Host DRM + VFIO-Mdev..png
Default sort keyIntel i915 Host DRM + VFIO-Mdev..png
Page length (in bytes)105
NamespaceFile
Page ID29
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valueb44cd4cce09af99ea1ab0b2f6a7388bb802c1d1b
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:16, 20 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit18:16, 20 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&oldid=103.html b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&oldid=103.html new file mode 100644 index 0000000..c9561ed --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Intel_i915_Host_DRM_+_VFIO-Mdev..png&oldid=103.html @@ -0,0 +1,234 @@ + + + + +File:Intel i915 Host DRM + VFIO-Mdev..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Intel i915 Host DRM + VFIO-Mdev..png

+
+
From Open-IOV
+
Revision as of 18:16, 20 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(958 × 717 pixels, file size: 193 KB, MIME type: image/png) +

Intel's i915 driver provides host and guest GPU acceleration via host DRM + VFIO-Mdev in the same driver. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:16, 20 December 2021Thumbnail for version as of 18:16, 20 December 2021958 × 717 (193 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=edit.html new file mode 100644 index 0000000..575301a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Ioctl-VFIO GROUP GET FD.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Ioctl-VFIO GROUP GET FD.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Ioctl-VFIO GROUP GET FD.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=history.html new file mode 100644 index 0000000..7e5a32d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Ioctl-VFIO GROUP GET FD.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Ioctl-VFIO GROUP GET FD.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=info.html new file mode 100644 index 0000000..0b7502e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Ioctl-VFIO GROUP GET FD.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Ioctl-VFIO GROUP GET FD.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Ioctl-VFIO GROUP GET FD.png
Default sort keyIoctl-VFIO GROUP GET FD.png
Page length (in bytes)68
NamespaceFile
Page ID49
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value41a7ba7742bb3a5153e21fbe89aa891d25cf43fd
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:38, 26 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:38, 26 April 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&oldid=347.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&oldid=347.html new file mode 100644 index 0000000..cbd541c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_GROUP_GET_FD.png&oldid=347.html @@ -0,0 +1,234 @@ + + + + +File:Ioctl-VFIO GROUP GET FD.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Ioctl-VFIO GROUP GET FD.png

+
+
From Open-IOV
+
Revision as of 19:38, 26 April 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,782 × 1,210 pixels, file size: 110 KB, MIME type: image/png) +

Using an interrupt routine to obtain the VFIO Group file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:38, 26 April 2022Thumbnail for version as of 19:38, 26 April 20221,782 × 1,210 (110 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=edit.html new file mode 100644 index 0000000..3ded910 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=history.html new file mode 100644 index 0000000..37abcd2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=info.html new file mode 100644 index 0000000..a44e7ca --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png
Default sort keyIoctl-VFIO IOMMU MAP-UNMAP DMA.png
Page length (in bytes)71
NamespaceFile
Page ID50
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valueff30a1b7ff5dd52af651f3dc26159deed6c7aa0f
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:56, 26 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:56, 26 April 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&oldid=351.html b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&oldid=351.html new file mode 100644 index 0000000..85be63d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioctl-VFIO_IOMMU_MAP-UNMAP_DMA.png&oldid=351.html @@ -0,0 +1,234 @@ + + + + +File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Ioctl-VFIO IOMMU MAP-UNMAP DMA.png

+
+
From Open-IOV
+
Revision as of 19:56, 26 April 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,748 × 1,246 pixels, file size: 109 KB, MIME type: image/png) +

Using interrupts VFIO_IOMMU_MAP/UNMAP_DMA to pin/map regions of memory. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:56, 26 April 2022Thumbnail for version as of 19:56, 26 April 20221,748 × 1,246 (109 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=edit.html new file mode 100644 index 0000000..b8f1c54 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Ioeventfd-and-irqfd.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Ioeventfd-and-irqfd.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Ioeventfd-and-irqfd.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=history.html new file mode 100644 index 0000000..546135e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Ioeventfd-and-irqfd.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Ioeventfd-and-irqfd.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=info.html new file mode 100644 index 0000000..0f82840 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Ioeventfd-and-irqfd.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Ioeventfd-and-irqfd.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Ioeventfd-and-irqfd.png
Default sort keyIoeventfd-and-irqfd.png
Page length (in bytes)47
NamespaceFile
Page ID51
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value83ad7d0b3e6d05ad5d6e3542cd19b0320d5eb235
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation21:42, 26 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit21:42, 26 April 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&oldid=377.html b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&oldid=377.html new file mode 100644 index 0000000..57e035a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Ioeventfd-and-irqfd.png&oldid=377.html @@ -0,0 +1,234 @@ + + + + +File:Ioeventfd-and-irqfd.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Ioeventfd-and-irqfd.png

+
+
From Open-IOV
+
Revision as of 21:42, 26 April 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,390 × 994 pixels, file size: 73 KB, MIME type: image/png) +

"A very simple" diagram of ioeventfd and irqfd. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current21:42, 26 April 2022Thumbnail for version as of 21:42, 26 April 20221,390 × 994 (73 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=edit.html new file mode 100644 index 0000000..0cd44b4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:KVMFR Looking Glass.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:KVMFR Looking Glass.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:KVMFR Looking Glass.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=history.html b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=history.html new file mode 100644 index 0000000..1eb9197 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:KVMFR Looking Glass.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:KVMFR Looking Glass.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=info.html b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=info.html new file mode 100644 index 0000000..238eade --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:KVMFR Looking Glass.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:KVMFR Looking Glass.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:KVMFR Looking Glass.png
Default sort keyKVMFR Looking Glass.png
Page length (in bytes)19
NamespaceFile
Page ID15
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value46671ad15474dbb4b85b34f9f7e4ff4df66cc2e1
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:46, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:46, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&oldid=46.html b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&oldid=46.html new file mode 100644 index 0000000..03f3007 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVMFR_Looking_Glass.png&oldid=46.html @@ -0,0 +1,234 @@ + + + + +File:KVMFR Looking Glass.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:KVMFR Looking Glass.png

+
+
From Open-IOV
+
Revision as of 00:46, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,280 × 762 pixels, file size: 1.17 MB, MIME type: image/png) +

KVMFR Looking Glass +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:46, 18 December 2021Thumbnail for version as of 00:46, 18 December 20211,280 × 762 (1.17 MB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=edit.html new file mode 100644 index 0000000..37c8f51 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=history.html b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=history.html new file mode 100644 index 0000000..d3ad2cb --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=info.html b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=info.html new file mode 100644 index 0000000..f0b7899 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png
Default sort keyKVM services EPT violation and forwards to QEMU VFIO PCI driver..png
Page length (in bytes)64
NamespaceFile
Page ID68
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuefa8b2081bf81a852e72a45b5cdeda1820e73c9e2
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation20:26, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit20:26, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&oldid=498.html b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&oldid=498.html new file mode 100644 index 0000000..0087ec5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:KVM_services_EPT_violation_and_forwards_to_QEMU_VFIO_PCI_driver..png&oldid=498.html @@ -0,0 +1,234 @@ + + + + +File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:KVM services EPT violation and forwards to QEMU VFIO PCI driver..png

+
+
From Open-IOV
+
Revision as of 20:26, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,695 × 1,328 pixels, file size: 57 KB, MIME type: image/png) +

KVM services EPT violation and forwards to QEMU VFIO PCI driver. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current20:26, 24 May 2022Thumbnail for version as of 20:26, 24 May 20221,695 × 1,328 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=edit.html new file mode 100644 index 0000000..9c2fd71 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Mdev-gpu.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Mdev-gpu.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Mdev-gpu.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=history.html new file mode 100644 index 0000000..3d04e15 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=history.html @@ -0,0 +1,207 @@ + + + + +Revision history of "File:Mdev-gpu.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Mdev-gpu.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=info.html new file mode 100644 index 0000000..973a607 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Mdev-gpu.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Mdev-gpu.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Mdev-gpu.png
Default sort keyMdev-gpu.png
Page length (in bytes)32
NamespaceFile
Page ID82
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuec5fc5733ac0ab2c8afad39fd34bdef07aae780cd
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:19, 19 July 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:40, 19 July 2022
Total number of edits2
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&oldid=706.html b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&oldid=706.html new file mode 100644 index 0000000..d5e9c9f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Mdev-gpu.png&oldid=706.html @@ -0,0 +1,234 @@ + + + + +File:Mdev-gpu.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Mdev-gpu.png

+
+
From Open-IOV
+
Revision as of 19:40, 19 July 2022 by Arthur (talk | contribs) (Arthur uploaded a new version of File:Mdev-gpu.png)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(2,796 × 1,940 pixels, file size: 221 KB, MIME type: image/png) +

Registering the mediated device. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:40, 19 July 2022Thumbnail for version as of 19:40, 19 July 20222,796 × 1,940 (221 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=edit.html new file mode 100644 index 0000000..205d2cc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Memory Regions Added by QEMU.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Memory Regions Added by QEMU.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Memory Regions Added by QEMU.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=history.html new file mode 100644 index 0000000..722cc8d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=history.html @@ -0,0 +1,207 @@ + + + + +Revision history of "File:Memory Regions Added by QEMU.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Memory Regions Added by QEMU.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=info.html new file mode 100644 index 0000000..5e0d03b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Memory Regions Added by QEMU.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Memory Regions Added by QEMU.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Memory Regions Added by QEMU.png
Default sort keyMemory Regions Added by QEMU.png
Page length (in bytes)28
NamespaceFile
Page ID90
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valueddbf664c9eb65aae1a1ca0e1d57544224033fc3b
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:49, 28 September 2022
Latest editorArthur (talk | contribs)
Date of latest edit18:51, 28 September 2022
Total number of edits2
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&oldid=815.html b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&oldid=815.html new file mode 100644 index 0000000..a00f14a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Memory_Regions_Added_by_QEMU.png&oldid=815.html @@ -0,0 +1,234 @@ + + + + +File:Memory Regions Added by QEMU.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Memory Regions Added by QEMU.png

+
+
From Open-IOV
+
Revision as of 18:51, 28 September 2022 by Arthur (talk | contribs) (Arthur uploaded a new version of File:Memory Regions Added by QEMU.png)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,920 × 1,440 pixels, file size: 21 KB, MIME type: image/png) +

Memory Regions Added by QEMU +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:51, 28 September 2022Thumbnail for version as of 18:51, 28 September 20221,920 × 1,440 (21 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=edit.html new file mode 100644 index 0000000..c0ef82b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:NUMA Node.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:NUMA Node.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:NUMA Node.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=history.html b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=history.html new file mode 100644 index 0000000..9c96d80 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:NUMA Node.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:NUMA Node.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=info.html b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=info.html new file mode 100644 index 0000000..4e5d338 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:NUMA Node.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:NUMA Node.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:NUMA Node.png
Default sort keyNUMA Node.png
Page length (in bytes)9
NamespaceFile
Page ID16
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value085154128beaafb5f51d0ee63d34fe267dd88008
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:46, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:46, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&oldid=47.html b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&oldid=47.html new file mode 100644 index 0000000..262c102 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:NUMA_Node.png&oldid=47.html @@ -0,0 +1,234 @@ + + + + +File:NUMA Node.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:NUMA Node.png

+
+
From Open-IOV
+
Revision as of 00:46, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

NUMA_Node.png ‎(624 × 314 pixels, file size: 24 KB, MIME type: image/png) +

NUMA Node +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:46, 18 December 2021Thumbnail for version as of 00:46, 18 December 2021624 × 314 (24 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=edit.html new file mode 100644 index 0000000..2305a7e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:QEMU calls VFIO DMA MAP via Memory listener.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:QEMU calls VFIO DMA MAP via Memory listener.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:QEMU calls VFIO DMA MAP via Memory listener.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=history.html b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=history.html new file mode 100644 index 0000000..70245d0 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:QEMU calls VFIO DMA MAP via Memory listener.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:QEMU calls VFIO DMA MAP via Memory listener.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=info.html b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=info.html new file mode 100644 index 0000000..0e1faf4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:QEMU calls VFIO DMA MAP via Memory listener.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:QEMU calls VFIO DMA MAP via Memory listener.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:QEMU calls VFIO DMA MAP via Memory listener.png
Default sort keyQEMU calls VFIO DMA MAP via Memory listener.png
Page length (in bytes)43
NamespaceFile
Page ID91
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value5345f0ddf5aa601ccb12bd538c7c50b68ecf66f7
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:44, 28 September 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:44, 28 September 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&oldid=817.html b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&oldid=817.html new file mode 100644 index 0000000..24ecf37 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_calls_VFIO_DMA_MAP_via_Memory_listener.png&oldid=817.html @@ -0,0 +1,234 @@ + + + + +File:QEMU calls VFIO DMA MAP via Memory listener.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU calls VFIO DMA MAP via Memory listener.png

+
+
From Open-IOV
+
Revision as of 19:44, 28 September 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,738 × 1,373 pixels, file size: 19 KB, MIME type: image/png) +

QEMU calls VFIO DMA MAP via Memory listener +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:44, 28 September 2022Thumbnail for version as of 19:44, 28 September 20221,738 × 1,373 (19 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=edit.html new file mode 100644 index 0000000..76b83ae --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=history.html b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=history.html new file mode 100644 index 0000000..486154e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=info.html b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=info.html new file mode 100644 index 0000000..90f31fd --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png
Default sort keyQEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png
Page length (in bytes)74
NamespaceFile
Page ID69
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value5a553468255f4c85e05b132be97e776968738acb
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation20:50, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit20:50, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&oldid=502.html b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&oldid=502.html new file mode 100644 index 0000000..cf97da8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_convert_request_from_KVM_to_Read-Write_acess_to_Mdev_file_descriptor..png&oldid=502.html @@ -0,0 +1,234 @@ + + + + +File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU convert request from KVM to Read-Write acess to Mdev file descriptor..png

+
+
From Open-IOV
+
Revision as of 20:50, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,700 × 1,333 pixels, file size: 57 KB, MIME type: image/png) +

QEMU convert request from KVM to Read/Write acess to Mdev file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current20:50, 24 May 2022Thumbnail for version as of 20:50, 24 May 20221,700 × 1,333 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=edit.html new file mode 100644 index 0000000..3aa3830 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=history.html b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=history.html new file mode 100644 index 0000000..832daaa --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=info.html b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=info.html new file mode 100644 index 0000000..1c2547a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png
Default sort keyQEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png
Page length (in bytes)71
NamespaceFile
Page ID63
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuead2aeb33479401c0906ee349bd55be124a0d1700
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation17:50, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:50, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&oldid=470.html b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&oldid=470.html new file mode 100644 index 0000000..a962d95 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_creates_VFIO-mdev_IOMMU_binding_and_acquires_mdev_file_descriptor..png&oldid=470.html @@ -0,0 +1,234 @@ + + + + +File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor..png

+
+
From Open-IOV
+
Revision as of 17:50, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,738 × 1,341 pixels, file size: 57 KB, MIME type: image/png) +

QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current17:50, 24 May 2022Thumbnail for version as of 17:50, 24 May 20221,738 × 1,341 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=edit.html new file mode 100644 index 0000000..dec8afc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=history.html b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=history.html new file mode 100644 index 0000000..5118dde --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=info.html b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=info.html new file mode 100644 index 0000000..e522124 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png
Default sort keyQEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png
Page length (in bytes)89
NamespaceFile
Page ID66
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value617018e356268759a7782e3f11dc6f4614a04535
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:36, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:36, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&oldid=487.html b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&oldid=487.html new file mode 100644 index 0000000..bad99ca --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_gets_region_info_via_VFIO_UAPI_from_vendor_driver_through_vfio-mdev_and_Mediated_CBs.png&oldid=487.html @@ -0,0 +1,234 @@ + + + + +File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs.png

+
+
From Open-IOV
+
Revision as of 19:36, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,695 × 1,332 pixels, file size: 57 KB, MIME type: image/png) +

QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:36, 24 May 2022Thumbnail for version as of 19:36, 24 May 20221,695 × 1,332 (57 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=edit.html b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=edit.html new file mode 100644 index 0000000..679b81e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:QEMU presenting the VFIO file descriptor into the virtual machine..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:QEMU presenting the VFIO file descriptor into the virtual machine..png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:QEMU presenting the VFIO file descriptor into the virtual machine..png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=history.html b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=history.html new file mode 100644 index 0000000..5102bb3 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:QEMU presenting the VFIO file descriptor into the virtual machine..png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:QEMU presenting the VFIO file descriptor into the virtual machine..png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=info.html b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=info.html new file mode 100644 index 0000000..2d79820 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:QEMU presenting the VFIO file descriptor into the virtual machine..png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:QEMU presenting the VFIO file descriptor into the virtual machine..png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:QEMU presenting the VFIO file descriptor into the virtual machine..png
Default sort keyQEMU presenting the VFIO file descriptor into the virtual machine..png
Page length (in bytes)66
NamespaceFile
Page ID64
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value0d53e7128ecf9fe51f9821e5af70b5f8000dc0ad
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:35, 24 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit18:35, 24 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&oldid=477.html b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&oldid=477.html new file mode 100644 index 0000000..712c543 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:QEMU_presenting_the_VFIO_file_descriptor_into_the_virtual_machine..png&oldid=477.html @@ -0,0 +1,234 @@ + + + + +File:QEMU presenting the VFIO file descriptor into the virtual machine..png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:QEMU presenting the VFIO file descriptor into the virtual machine..png

+
+
From Open-IOV
+
Revision as of 18:35, 24 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,698 × 1,322 pixels, file size: 56 KB, MIME type: image/png) +

QEMU presenting the VFIO file descriptor into the virtual machine. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:35, 24 May 2022Thumbnail for version as of 18:35, 24 May 20221,698 × 1,322 (56 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=edit.html new file mode 100644 index 0000000..ce49951 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:SR-IOV-Diagram.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:SR-IOV-Diagram.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:SR-IOV-Diagram.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=history.html b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=history.html new file mode 100644 index 0000000..b3c9047 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:SR-IOV-Diagram.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:SR-IOV-Diagram.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=info.html b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=info.html new file mode 100644 index 0000000..7564813 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:SR-IOV-Diagram.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:SR-IOV-Diagram.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:SR-IOV-Diagram.png
Default sort keySR-IOV-Diagram.png
Page length (in bytes)14
NamespaceFile
Page ID19
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value393ebc6fd7b52dcf2e9a4777440f44f7da435d9d
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:48, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:48, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&oldid=50.html b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&oldid=50.html new file mode 100644 index 0000000..4aaafd7 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV-Diagram.png&oldid=50.html @@ -0,0 +1,234 @@ + + + + +File:SR-IOV-Diagram.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:SR-IOV-Diagram.png

+
+
From Open-IOV
+
Revision as of 00:48, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

SR-IOV-Diagram.png ‎(649 × 559 pixels, file size: 121 KB, MIME type: image/png) +

SR-IOV-Diagram +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:47, 18 December 2021Thumbnail for version as of 00:47, 18 December 2021649 × 559 (121 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=edit.html new file mode 100644 index 0000000..30bf0b8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:SR-IOV.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:SR-IOV.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:SR-IOV.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=history.html b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=history.html new file mode 100644 index 0000000..6cc6cc1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:SR-IOV.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:SR-IOV.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=info.html b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=info.html new file mode 100644 index 0000000..9545f82 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:SR-IOV.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:SR-IOV.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:SR-IOV.png
Default sort keySR-IOV.png
Page length (in bytes)6
NamespaceFile
Page ID18
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valueeb1f437510e0af578c29ac7e399536c30cc8b221
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:47, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:47, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:SR-IOV.png&oldid=49.html b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&oldid=49.html new file mode 100644 index 0000000..d8613fa --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:SR-IOV.png&oldid=49.html @@ -0,0 +1,234 @@ + + + + +File:SR-IOV.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:SR-IOV.png

+
+
From Open-IOV
+
Revision as of 00:47, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(765 × 608 pixels, file size: 85 KB, MIME type: image/png) +

SR-IOV +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:47, 18 December 2021Thumbnail for version as of 00:47, 18 December 2021765 × 608 (85 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=edit.html new file mode 100644 index 0000000..f0154a5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Screen Shot 2022-05-06 at 10.46.59 AM.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Screen Shot 2022-05-06 at 10.46.59 AM.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Screen Shot 2022-05-06 at 10.46.59 AM.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=history.html new file mode 100644 index 0000000..9aa934c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Screen Shot 2022-05-06 at 10.46.59 AM.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Screen Shot 2022-05-06 at 10.46.59 AM.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=info.html new file mode 100644 index 0000000..6d8a046 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Screen Shot 2022-05-06 at 10.46.59 AM.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Screen Shot 2022-05-06 at 10.46.59 AM.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Screen Shot 2022-05-06 at 10.46.59 AM.png
Default sort keyScreen Shot 2022-05-06 at 10.46.59 AM.png
Page length (in bytes)38
NamespaceFile
Page ID52
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value41c4baef687cb63b4f80fdf20d3accff74217e8c
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation14:47, 6 May 2022
Latest editorArthur (talk | contribs)
Date of latest edit14:47, 6 May 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&oldid=396.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&oldid=396.html new file mode 100644 index 0000000..3100b2d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-05-06_at_10.46.59_AM.png&oldid=396.html @@ -0,0 +1,234 @@ + + + + +File:Screen Shot 2022-05-06 at 10.46.59 AM.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Screen Shot 2022-05-06 at 10.46.59 AM.png

+
+
From Open-IOV
+
Revision as of 14:47, 6 May 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Screen_Shot_2022-05-06_at_10.46.59_AM.png ‎(584 × 436 pixels, file size: 23 KB, MIME type: image/png) +

Peer-to-Peer DMA Isolation under IOMMU +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current14:47, 6 May 2022Thumbnail for version as of 14:47, 6 May 2022584 × 436 (23 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=edit.html new file mode 100644 index 0000000..021b32d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Screen Shot 2022-11-18 at 4.14.32 PM.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Screen Shot 2022-11-18 at 4.14.32 PM.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Screen Shot 2022-11-18 at 4.14.32 PM.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=history.html new file mode 100644 index 0000000..525d0da --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Screen Shot 2022-11-18 at 4.14.32 PM.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Screen Shot 2022-11-18 at 4.14.32 PM.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=info.html new file mode 100644 index 0000000..54c62b4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Screen Shot 2022-11-18 at 4.14.32 PM.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Screen Shot 2022-11-18 at 4.14.32 PM.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Screen Shot 2022-11-18 at 4.14.32 PM.png
Default sort keyScreen Shot 2022-11-18 at 4.14.32 PM.png
Page length (in bytes)106
NamespaceFile
Page ID95
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valueddbac2977bd91e9c7f77f06d55b8cfe553b0bd63
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation21:15, 18 November 2022
Latest editorArthur (talk | contribs)
Date of latest edit21:15, 18 November 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&oldid=869.html b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&oldid=869.html new file mode 100644 index 0000000..645bebd --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Screen_Shot_2022-11-18_at_4.14.32_PM.png&oldid=869.html @@ -0,0 +1,234 @@ + + + + +File:Screen Shot 2022-11-18 at 4.14.32 PM.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Screen Shot 2022-11-18 at 4.14.32 PM.png

+
+
From Open-IOV
+
Revision as of 21:15, 18 November 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Screen_Shot_2022-11-18_at_4.14.32_PM.png ‎(603 × 525 pixels, file size: 45 KB, MIME type: image/png) +

Pictured: The FSP Binary Layout from Intel® Firmware Support Package External Architecture Specification. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current21:15, 18 November 2022Thumbnail for version as of 21:15, 18 November 2022603 × 525 (45 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=edit.html new file mode 100644 index 0000000..83f9df4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Telescope LG-Proxy.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Telescope LG-Proxy.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Telescope LG-Proxy.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=history.html new file mode 100644 index 0000000..5ff67d9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Telescope LG-Proxy.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Telescope LG-Proxy.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=info.html new file mode 100644 index 0000000..babc61a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Telescope LG-Proxy.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Telescope LG-Proxy.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Telescope LG-Proxy.png
Default sort keyTelescope LG-Proxy.png
Page length (in bytes)58
NamespaceFile
Page ID43
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value655ab4d1a0b59fb3ba108915c65d75ca0f697145
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation17:37, 20 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:37, 20 April 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&oldid=296.html b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&oldid=296.html new file mode 100644 index 0000000..9860ccf --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Telescope_LG-Proxy.png&oldid=296.html @@ -0,0 +1,234 @@ + + + + +File:Telescope LG-Proxy.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Telescope LG-Proxy.png

+
+
From Open-IOV
+
Revision as of 17:37, 20 April 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(2,524 × 1,408 pixels, file size: 213 KB, MIME type: image/png) +

An RDMA based proxy for the Looking Glass Memory Protocol. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current17:37, 20 April 2022Thumbnail for version as of 17:37, 20 April 20222,524 × 1,408 (213 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=edit.html new file mode 100644 index 0000000..37fa58a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Type 1 IOMMU Tracks VA-GFN.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Type 1 IOMMU Tracks VA-GFN.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Type 1 IOMMU Tracks VA-GFN.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=history.html new file mode 100644 index 0000000..809d013 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Type 1 IOMMU Tracks VA-GFN.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Type 1 IOMMU Tracks VA-GFN.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=info.html new file mode 100644 index 0000000..171ccff --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Type 1 IOMMU Tracks VA-GFN.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Type 1 IOMMU Tracks VA-GFN.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Type 1 IOMMU Tracks VA-GFN.png
Default sort keyType 1 IOMMU Tracks VA-GFN.png
Page length (in bytes)26
NamespaceFile
Page ID92
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value8aa3c3f810977f3812579d3208d8a940aa90bfab
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:58, 28 September 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:58, 28 September 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&oldid=821.html b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&oldid=821.html new file mode 100644 index 0000000..87913ef --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Type_1_IOMMU_Tracks_VA-GFN.png&oldid=821.html @@ -0,0 +1,234 @@ + + + + +File:Type 1 IOMMU Tracks VA-GFN.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Type 1 IOMMU Tracks VA-GFN.png

+
+
From Open-IOV
+
Revision as of 19:58, 28 September 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,709 × 1,352 pixels, file size: 60 KB, MIME type: image/png) +

Type 1 IOMMU Tracks VA-GFN +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current19:58, 28 September 2022Thumbnail for version as of 19:58, 28 September 20221,709 × 1,352 (60 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=edit.html new file mode 100644 index 0000000..4c80e02 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:VFIO-Mdev Diagram.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:VFIO-Mdev Diagram.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:VFIO-Mdev Diagram.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=history.html b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=history.html new file mode 100644 index 0000000..2121a44 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:VFIO-Mdev Diagram.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:VFIO-Mdev Diagram.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=info.html b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=info.html new file mode 100644 index 0000000..47953d0 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:VFIO-Mdev Diagram.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:VFIO-Mdev Diagram.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:VFIO-Mdev Diagram.png
Default sort keyVFIO-Mdev Diagram.png
Page length (in bytes)23
NamespaceFile
Page ID12
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value70e81d0644755c2da74d9133eeced48ffcf791fb
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:39, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:39, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&oldid=41.html b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&oldid=41.html new file mode 100644 index 0000000..a9930ae --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO-Mdev_Diagram.png&oldid=41.html @@ -0,0 +1,234 @@ + + + + +File:VFIO-Mdev Diagram.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:VFIO-Mdev Diagram.png

+
+
From Open-IOV
+
Revision as of 00:39, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(593 × 785 pixels, file size: 139 KB, MIME type: image/png) +

A diagram of VFIO-Mdev. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:39, 18 December 2021Thumbnail for version as of 00:39, 18 December 2021593 × 785 (139 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=edit.html new file mode 100644 index 0000000..75c5610 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:VFIO Diagram.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:VFIO Diagram.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:VFIO Diagram.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=history.html b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=history.html new file mode 100644 index 0000000..5b41cad --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:VFIO Diagram.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:VFIO Diagram.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=info.html b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=info.html new file mode 100644 index 0000000..f24c8f8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:VFIO Diagram.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:VFIO Diagram.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:VFIO Diagram.png
Default sort keyVFIO Diagram.png
Page length (in bytes)15
NamespaceFile
Page ID11
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value2ae1b356080c66b55514373dae40ed34bd642dfc
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:38, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:38, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&oldid=40.html b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&oldid=40.html new file mode 100644 index 0000000..31b95ca --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:VFIO_Diagram.png&oldid=40.html @@ -0,0 +1,234 @@ + + + + +File:VFIO Diagram.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:VFIO Diagram.png

+
+
From Open-IOV
+
Revision as of 00:38, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

VFIO_Diagram.png ‎(398 × 527 pixels, file size: 62 KB, MIME type: image/png) +

A VFIO diagram. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:38, 18 December 2021Thumbnail for version as of 00:38, 18 December 2021398 × 527 (62 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=edit.html new file mode 100644 index 0000000..f93715c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Vfio-pci driver bindings.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Vfio-pci driver bindings.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Vfio-pci driver bindings.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=history.html new file mode 100644 index 0000000..423eabb --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Vfio-pci driver bindings.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Vfio-pci driver bindings.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=info.html new file mode 100644 index 0000000..58bf01e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Vfio-pci driver bindings.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Vfio-pci driver bindings.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Vfio-pci driver bindings.png
Default sort keyVfio-pci driver bindings.png
Page length (in bytes)54
NamespaceFile
Page ID47
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash valuefa4853f74678261518afcd191dbe9834980be18a
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:25, 26 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit18:25, 26 April 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&oldid=341.html b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&oldid=341.html new file mode 100644 index 0000000..c54cd7c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Vfio-pci_driver_bindings.png&oldid=341.html @@ -0,0 +1,234 @@ + + + + +File:Vfio-pci driver bindings.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Vfio-pci driver bindings.png

+
+
From Open-IOV
+
Revision as of 18:25, 26 April 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Original file ‎(1,010 × 734 pixels, file size: 36 KB, MIME type: image/png) +

VFIO group nodes are unit of ownership that VFIO uses. +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current18:25, 26 April 2022Thumbnail for version as of 18:25, 26 April 20221,010 × 734 (36 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Virgl.png&action=edit.html b/wiki/open-iov.org/index.php?title=File:Virgl.png&action=edit.html new file mode 100644 index 0000000..185c752 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Virgl.png&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for File:Virgl.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for File:Virgl.png

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to File:Virgl.png.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Virgl.png&action=history.html b/wiki/open-iov.org/index.php?title=File:Virgl.png&action=history.html new file mode 100644 index 0000000..6404fff --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Virgl.png&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "File:Virgl.png" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "File:Virgl.png"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Virgl.png&action=info.html b/wiki/open-iov.org/index.php?title=File:Virgl.png&action=info.html new file mode 100644 index 0000000..988988d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Virgl.png&action=info.html @@ -0,0 +1,221 @@ + + + + +Information for "File:Virgl.png" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "File:Virgl.png"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleFile:Virgl.png
Default sort keyVirgl.png
Page length (in bytes)5
NamespaceFile
Page ID20
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Hash value9f8bb9f3ef501b32708b9e7de73ab7c03c0cc0f4
+

Page protection

+ + + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
UploadAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:52, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:52, 18 December 2021
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=File:Virgl.png&oldid=52.html b/wiki/open-iov.org/index.php?title=File:Virgl.png&oldid=52.html new file mode 100644 index 0000000..8e9d9a8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=File:Virgl.png&oldid=52.html @@ -0,0 +1,234 @@ + + + + +File:Virgl.png - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

File:Virgl.png

+
+
From Open-IOV
+
Revision as of 00:52, 18 December 2021 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+

Virgl.png ‎(384 × 509 pixels, file size: 66 KB, MIME type: image/png) +

Virgl +

+ + + + +

File history

+
+

Click on a date/time to view the file as it appeared at that time. +

+ + + +
Date/TimeThumbnailDimensionsUserComment
current00:52, 18 December 2021Thumbnail for version as of 00:52, 18 December 2021384 × 509 (66 KB)Arthur (talk | contribs)
+ +
+ +
+

The following page uses this file: +

+
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=edit.html b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=edit.html new file mode 100644 index 0000000..92c220d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=edit.html @@ -0,0 +1,550 @@ + + + + +View source for GPU Driver Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for GPU Driver Internals

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to GPU Driver Internals.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=history.html b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=history.html new file mode 100644 index 0000000..741d80c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=history.html @@ -0,0 +1,256 @@ + + + + +Revision history of "GPU Driver Internals" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "GPU Driver Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)
+ + + +
+
+
+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=info.html b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=info.html new file mode 100644 index 0000000..9079f84 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "GPU Driver Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "GPU Driver Internals"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleGPU Driver Internals
Default sort keyGPU Driver Internals
Page length (in bytes)22,686
Page ID4505
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:58, 9 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:53, 19 June 2023
Total number of edits74
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&oldid=23791.html b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&oldid=23791.html new file mode 100644 index 0000000..71ac8c7 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Driver_Internals&oldid=23791.html @@ -0,0 +1,662 @@ + + + + +GPU Driver Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Driver Internals

+
+
From Open-IOV
+
Revision as of 17:53, 19 June 2023 by Arthur (talk | contribs) (→‎References (Talks & Reading Material))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This page will detail the internals of various GPU drivers for use with I/O Virtualization.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Article Structure

+

This article will aim to provide information about the following details of GPU drivers: +

+

High Level Architecture

+

This section will detail high level architectures of each driver. +

+

Initialization

+

This section will cover how the GPU's embedded components, the GPU driver, and virtualization functions are initialized. +

+

Scheduling

+

This section will detail how the device schedules instructions for execution. +

This will attempt to provide a comprehensive view of scheduling from virtualized processes down to execution within the device. +

+

In-VM Scheduling

+

The In-VM Scheduling section will detail how instructions scheduled within the virtual machine's GPU device driver. +

+

Between-VM Scheduling

+

The Between-VM Scheduling section will detail how the host kernel module and/or virtual GPU helper functions handle scheduling / context swaps between virtual machines on a computer system. +

+

Firmware Scheduling (if applicable)

+

The Firmware Scheduling section will cover the GPU's internal scheduling model if a deferred execution pathway is used (like i915's GuC or OpenRM's GSP). +

In the case an intermediate scheduling microcontroller is not used this section may be less applicable (ie: vExeclist scheduling under Intel vGPUs). +

+

Memory Management

+

The Memory Management section will cover how the GPU driver manages memory for virtual GPUs and host processes. +

This will aim detail paging abstractions used for global memory translation, and per-process memory translation. +

+

Display Surface Virtualization

+

The Display Surface Virtualization section will detail how virtual displays are provided to guests and/or graphics rendering buffers (pixel surfaces) are shared from guest to host if such functions are provided via the driver. +

+

Graphics Buffer Sharing

+

This section will cover methods provided by the GPU driver suitable for high performance graphics sharing. +

+

Vendor Neutral

+

This section will detail functions in common between GPU drivers. +

Also see Display Virtualization for Windows OS. +

+

Knowledge Resources Used

+

This section is supported by significant contributions to documentation and open source by Satyeshwar Singh. +

+

Display Surface Virtualization

+

The Display Surface Virtualization section will detail how virtual displays are provided to guests and/or graphics rendering buffers (pixel surfaces) are shared from guest to host if such functions are provided via the driver. +

+

Graphics Buffer Sharing

+

This section will deal with graphics buffer sharing for vendor neutral GPUs. +

+
Display Flow in Linux
+

Userspace applications provide their buffers to compositor. +

Compositor asks Mesa to create a framebuffer. +

Framebuffer is allocated through vendor driver. +

Vendor driver flips the framebuffer on the screen. +

+
SR-IOV and Mdev
+

SR-IOV VFs don't have access to the display controller (only PF does). +

Known issue is displaying a VF's framebuffer on the screen. +

+
VFs in QEMU Hypervisor (VirtIO-GPU)
+

SR-IOV and Mdev VFs run in QEMU Hypervisor. +

QEMU has full access to all pages in VF's address space. +

VirtIO-GPU allows for allocating buffers (not API remoting in this case). +

Mesa's KMSRO allocates framebuffer via virtio-gpu. +

Mesa's KMSRO asks vendor driver to import framebuffer (no specific compositor dependancy). +

+
Transport
+

A Scatter Gather List (SGL) of physical pages is constructed by VirtIO-GPU of VF. +

+
QEMU Host-Side u-dma-buf
+

Host QEMU uses u-dma-buf driver to reconstruct a virtual memory pointer from the SGL shared by VF. +

u-dma-buf driver allocates contiguous memory blocks in kernel as DMA buffers. +

+
QEMU Host-Side Modules
+

Once virtio-qemu has a DMA buffer, it shares it with the QEMU UI. +

QEMU UI has several toolkits to support like GTK, SDL, etc. with GTK. being the default. +

GTK uses EGL and passes it the DMABUF as a texture. +

+
Windows VFs
+

Windows OS doesn't support DMABUF capability so we can't allocate buffers from VirtIO-GPU and share them with the Windows Kernel Mode Driver (KMD). +

Windows OS is different in the way that the FB is allocated via the OS rather than the miniport driver. +

Modified version of RedHat virtio-gpu-do (short for Display Only) driver used. +

+
Windows Driver Stack
+

OS (DWM) allocates frame buffers and asks GPU to write to them through Miniport. +

DVServer UMD (IDD) asks the OS for the FB copy. +

DVServer UMD (IDD) passes the virtual memory address to DVServer KMD. +

+
DVServer KMD
+

DVServer KMD finds the SGL (Scatter Gather List) of physical pages for this virtual memory address. +

This SGL is passed via virt-queue from the VF to the host QEMU. +

+
Android VFs
+

Android uses Linux kernel underneath. VirtIO-GPU is present in Android's kernel. +

KMSRO patch to allocate framebuffer via VirtIO-GPU also ported over to Android. +

Need modifications in the minigbm lib of Android to connect with KMSRO part. +

Rest of stack looks identical to Linux VF/PF. +

+

i915

+

Knowledge Resources Used

+

This section is supported by significant contributions to documentation and open source by Zhi Wang, Ben Widawsky, and Igor Bogdanov. +

See references 2, 3, 4, 5, 6, 7, 8, and 9 in the References (Talks & Reading Material) section. +

+

High Level Architecture

+

i915 Clients

+

Processes which make use of the Intel i915 driver receive an i915 Client ID. +

+

Initialization

+

During initialization of the i915 driver the GuC binary blob is offloaded into the Graphics Translation Table (GTT). This allows the GuC to read GTT-loaded binary blob from shared framebuffer memory so that it may boot. +

+

Scheduling

+
Figure 0: i915 vGPU Scheduling
Figure 0: i915 vGPU high-level Scheduling. See slides from: [9]
+

There are several abstractions for GPU virtual machine scheduling. Those are as follows: +

+
  • Guest kernel (i915.ko)
  • +
  • Host kernel (i915.ko)
  • +
  • Device Firmware (GuC)
+
In-VM Scheduling
+
Guest kernel (i915.ko)
+
vExeclist
+

The vExeclist is a method to submit commands directly to the GPU without the use of an intermediate microcontroller. +

+
vGuC
+

vGuC is a command submission interface used to process commands to the Intel Graphics Microcontroller (GuC). +

+

Between-VM Scheduling

+
Figure 1: i915 vGPU Scheduling Requests & Events
Figure 1: i915 vGPU Scheduling Requests & Events. See slides from: [9]
+
Host kernel (i915.ko)
+

Submitting commands to the GPU under i915 can take several paths. One pathway makes use of direct command submission without an intermediate micro-controller whereas the other uses an intermediate micro-controller. The intermediate micro-controller approach increases the amount of binary-blob code used and abstracts the kernel module from the device's internal scheduling model. +

+
Execlist
+

Execlist executes commands synchronously on the device without an intermediate microcontroller. This is the preferred method of executing commands by some driver developers because of it's stability and transparency under current i915 development. +

+
GuC
+

GuC provides an execution pathway with an intermediate microcontroller providing a scheduling abstraction for Intel's preferred internal scheduling model. +

+
Figure 2: Intel vGPU Scheduler request flow.
Figure 2: i915 vGPU Scheduler request flow. See slides from: [9]
+
Device Firmware (GuC)
+

Memory Management

+
Translation Tables
+
GTT (Graphics Translation Table)
+

GPU Memory on-device is a part of a GTT or Graphics Translation Table. This table stores information globally for all graphics processes within the system. Some processes access the Global Graphics Translation Table (GGTT) such as DRI while other's receive a Per Process Graphics Translation Table (PPGTT) buffer based on their i915 Client ID. +

+
GGTT (Global Graphics Translation Table)
+
PPGTT (Per Process Graphics Translation Table)
+

Process-specific memory buffers are stored inside a Per Process Graphics Translation Table or PPGTT. This is a GPU MMU translated subregion or IOVA of global GPU memory specific to a GPU process's client ID. +

+
Aliasing PPGTT
+

Aliasing PPGTT (Per Process Graphics Translation Table) refers to partially separated GPU resources (process context). +

+
Real PPGTT
+

Real PPGTT (Per Process Graphics Translation Table) refers to fully separated GPU resources (process context). +

+

Display Surface Virtualization

+

The Intel vGPU makes use of two modes for Display Surface Virtualization. +

+
  • VirtIO-GPU (Linux)
  • +
  • Indirect Display Driver (Windows)
+

VirtIO-GPU

+

IDD (Indirect Display Driver)

+

The IDD (Indirect Display Driver) provides virtual display functions with arbitrary resolutions to any rendering device virtual or physical. +

Intel's IDD can be found in their Display Virtualization for Windows OS repository. +

+

Graphics Buffer Sharing

+

Intel's i915 driver provides functionality to directly map display memory from a guest vGPU Virtual Function (either SR-IOV or VFIO-Mdev) into the host GPU's Physical Function without slow memory copies or graphics compression. For users running GPU virtualization on their local device this results in a significant performance uplift compared to traditional graphics sharing functionality built for remote access use-cases such as VDI. +

Intel's 0copy display virtualization tools are simple to implement as sharing does not rely upon an added IVSHMEM (Inter-VM Shared Memory device) - rather the host directly maps the guest's display memory via udmabuf as the buffer sharing functions are provided within the i915 open source driver. +

+

OpenRM

+
Figure 3: GPU BAR to Timeshared Syhededuling via Channel IO
Figure 3: GPU BAR to Timeshared Scheduling via Channel IO.
+

Knowledge Resources Used

+

This section is supported by significant contributions to documentation and open source by Andy Currid, Neo Jia, John Fanelli, and Neha Joshi. +

+

High Level Architecture

+

The Open Resource Manager (RM driver) makes use of a highly object oriented paradigm comprised of multiple "engines" which act as micro-services for servicing driver requests. +

The Open Resource Manager driver (also known as OpenRM) refers to Nvidia's open-kernel-modules. +

Broadly speaking the OpenRM driver consists of two parts. +

+
  • The Platform RM (OpenRM)
  • +
  • The Firmware RM (GSP RM / RM Core)
+

The Platform RM is loaded into the Linux Kernel as nvidia.ko. This module communicates with the GSP RM for via Remote Procedure Calls (RPCs) to communicate with engines from the RM Core. +

+
RM Clients
+

Processes (local, remote, or virtualized) which make use of the RM driver receive an RM Client ID. +

+

RM Server

+

The RM Server (or Resource Server) tracks RM Clients as well as the hardware and software resources they control, allocate, and free. +

+

RM API

+

API to control the Resource Manager Server. +

+

RM Core

+

Core functions of the RM driver controlling resource locking, mapping, unmapping, control calls, constructors, and deconstructors. Under OpenRM the RM Core runs within the GPU System Processor (GSP micro-controller) while in pre-open source versions of the Resource Manager the RM Core ran within the nvidia.ko kernel module +

+

Initialization

+

During bring up of the hardware several binary blobs are loaded from embedded Boot ROM memory to bootstrap embedded controller bring up from which point additional software is loaded from onboard SPI flash memory. +

Software loaded from SPI flash is necessary for the full initialization of the Falcon/NvRISC processor as well as a cached version of the software necessary to run the GPU System Processor (GSP). +

Once the platform is posted it is ready to communicate with the host platform's RM driver. The OpenRM driver offloads a binary blob containing the RM Core to the GPU System Processor (GSP) which is likely to contain a more recent version than the cached version contained in on-board SPI flash. +

+

Scheduling

+

There are several abstractions for GPU virtual machine scheduling. Those are as follows: +

+
  • Guest kernel (nvidia.ko)
  • +
  • Host kernel (nvidia.ko)
  • +
  • Host usermode (gpu-mgr / libnvidiavgpu.so)
  • +
  • Device Firmware (GSP)
+

Command Submission

+
Runlist
+

In-VM Scheduling

+

Virtual machines contain their own GPU scheduling within the Nvidia kernel module in the guest OS. +

+
Guest kernel (nvidia.ko)
+

Within a virtual machine running the Nvidia driver messages to the GPU are first sent to the guest nvidia.ko kernel module. +

+The guest then determines whether a vRPC (virtual Remote Procedure Call) or a pRPC (physical Remote Procedure Call) should be sent. Both pRPCs and vRPCs are sent through the host RM driver (Resource Manager).

Note: Unclear on execution pathway for pRPCs vs vRPCs. pRPCs may go directly to device.

+

Between-VM Scheduling

+

In addition to scheduling which occurs within the virtual machine the Resource Manager driver also schedules messages to the GPU between GPU-accelerated virtual machines and host processes. +

+
Host kernel (nvidia.ko)
+

Messages sent by the guest (via vRPC or pRPC) are received by the host Nvidia.ko driver. +

Nvidia.ko contains a virtual GPU state machine which contains status information for the virtual GPU. +

Nvidia.ko also contains a virtual GPU kernel scheduler which interacts with virtual GPU objects. +

Nvidia.ko also contains an RM Call scheduler which schedules calls on an RM class. +

The Nividia.ko kernel module exits to userspace to execute the nvidia-vgpu-mgr and VMIOP (Virtual Machine Input Output Plugin). +

+
Host usermode (nvidia-vgpu-mgr / libnvidia-vgpu.so)
+

After exiting to userspace a daemon process (the nvidia-vgpu-mgr, and it's library libnvidia-vgpu.so) are executed to schedule VM-exits described below. +

+
nvidia-vgpu-mgr
+

The nvidia-vgpu-mgr is a process which provides the spawning of virtual GPU stubs and population with capability information. +

This daemon process interacts with the libnvidia-vgpu.so, nvidia.ko, and nvidia-vgpu-vfio.ko components. +

This process and the libnvidia-vgpu.so contain, and execute the VMIOP. +

This process (and the VMIOP) schedules RPCs sent by the guest, receives VFIO BAR-exits, and relays requests to allocate, deallocate, pin, unpin, map, unmap to the RM Core. +

+
vmiop
+

VMIOP (Virtual Machine Input Output Plugin) handles presenting virtualized functionality into the guest. +

The Virtual Machine Input Output Plugin software handles virtual displays, compute API offload, and most importantly BAR (Base Address Register) quirks. +

The VMIOP is an SDK (Software Development Kit) provided in binary format split between the libnvidiavgpu.so and nvidia-vgpu-mgr which provides userland helper functions for GPU virtualization. +

Messages to the VMIOP are scheduled by Linux kernel niceness (scheduling abstraction). +

+
Device Firmware (GSP)
+

Messages received by the host RM driver (Resource Manager) are then scheduled by the RM Core contained within the GSP (GPU System Processor). The GSP handles the device's internal scheduling model. +

+

Memory Management

+

Managing virtual machine memory is very important to the security of virtualization. +

This section will cover the method by which secure memory "enclaves" or IO Virtual Addresses (IOVAs) may be provisioned and separation enforced by hardware constructs within the GPU. +

+
Programming the MMU
+

In order to hardware enforce separation between memory allocated to Virtual Machines (VMs) virtualization software must program the GPU's MMU (GMMU controller) to create IO Virtual Addresses (IOVAs). +

In order to create such configurations several abstractions are used to translate high level representations of virtualization programmed via the vmiop and gpu-mgr into practical, architecture specific instructions. +

+
AMAPLibrary
+

The AMAPLibrary acts as a device abstraction framework for GPU driver software to program using high level representations of MMU configuration. +

The AMAPLibrary translates high level representations of GPU virtualization into graphics architecture-specific logic contained within architecture HALs (Hardware Abstraction Layers). +

+
Architecture HALs
+

GPU Hardware Abstraction Layers (HALs) contain logic specific to graphics architectures, for instance the precise method by which the GPU driver may interact with the Falcon to provision MMU protected memory. +

+
DMA from Falcon / NvRISC-V to Frame Buffer Interface (FBIF)
+

The Falcon (FAst Logic CONtroller) / NvRISC-V embedded controller emits DMAs to the Frame Buffer Interface (FBIF) in order to interact with the device's GMMU controller. +

User programs and VMs have their memory translated through the GMMU. +

Once created memory translations within a virtual machine's IO Virtual Address (IOVA) will be protected by the device's GMMU controller. +

+
Translation Tables
+
vmiop_gva
+

Display Surface Virtualization

+

amdgpu

+

References (Talks & Reading Material)

+
  1. Intel Graphics Programmer's Reference Manuals (PRM)
  2. +
  3. i915: Hardware Contexts (and some bits about batchbuffers)
  4. +
  5. i915: The Global GTT Part 1
  6. +
  7. i915: Aliasing PPGTT Part 2
  8. +
  9. i915: True PPGTT Part 3
  10. +
  11. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  12. +
  13. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  14. +
  15. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  16. +
  17. i915: An Introduction to Intel GVT-g (with new architecture)
  18. +
  19. lwn.net: Add udmabuf misc device
  20. +
  21. Nvidia RISC-v Story
  22. +
  23. IOMMU Introduction
  24. +
  25. Hardware and Compute Abstraction Layers For Accelerated Computing Using Graphics Hardware and Conventional CPUs
  26. +
  27. nVidia GPU Introduction (envytools)
  28. +
  29. Delivering High Performance Remote Graphics With Nvidia GRID Virtual GPU
  30. +
  31. NVIDIA Multi-Instance GPU
  32. +
  33. i915: Kaby Lake Intel Graphics Programmer's Reference Manual [Volume 5: Memory Views]
  34. +
  35. Lifecycle of a Triangle - Nvidia's logical pipeline
  36. +
  37. Nvidia Parallel Thread Execution (PTX)
  38. +
  39. i915/GEM Crashcourse
  40. +
  41. drm: Add GEM ("graphics execution manager") to i915 driver.
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Firmware&action=edit.html b/wiki/open-iov.org/index.php?title=GPU_Firmware&action=edit.html new file mode 100644 index 0000000..94593d2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Firmware&action=edit.html @@ -0,0 +1,357 @@ + + + + +View source for GPU Firmware - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for GPU Firmware

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to GPU Firmware.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Firmware&action=history.html b/wiki/open-iov.org/index.php?title=GPU_Firmware&action=history.html new file mode 100644 index 0000000..a10a66f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Firmware&action=history.html @@ -0,0 +1,227 @@ + + + + +Revision history of "GPU Firmware" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "GPU Firmware"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Firmware&action=info.html b/wiki/open-iov.org/index.php?title=GPU_Firmware&action=info.html new file mode 100644 index 0000000..ee5d937 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Firmware&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "GPU Firmware" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "GPU Firmware"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleGPU Firmware
Default sort keyGPU Firmware
Page length (in bytes)7,506
Page ID94
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation20:12, 24 October 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:13, 9 April 2023
Total number of edits21
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Firmware&oldid=23779.html b/wiki/open-iov.org/index.php?title=GPU_Firmware&oldid=23779.html new file mode 100644 index 0000000..a435894 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Firmware&oldid=23779.html @@ -0,0 +1,454 @@ + + + + +GPU Firmware - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Firmware

+
+
From Open-IOV
+
Revision as of 17:13, 9 April 2023 by Arthur (talk | contribs) (→‎Firmware Images)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

GPUs have become highly complex systems containing a number of different embedded controllers. This page will attempt to document embedded GPU firmware and support for IO virtualization through various firmware functions.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Intel

+

Firmware Images

+This section will cover firmware images used in Intel GPUs.

Figure 1: The FSP Binary Layout from Intel® Firmware Support Package External Architecture Specification.
Figure 1: The FSP Binary Layout from Intel® Firmware Support Package External Architecture Specification. Source
+

Intel Firmware Support Package (FSP)

+

Much like CPUs Intel's GPUs also contain a Firmware Support Package (FSP). +

The Coreboot project provides public domain information on the FSP here. +

+
FSP Configuration
+

In the context of GPUs the FSP configures several functions of the device. +

Those functions are as follows: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GPU Firmware Support Package +
FSP Parameter +Possible Values +
GFSP Status +0x00 +
FIVR SSC Value +*.*% +
FIVR RFI Value +*.*MHz +
GT Subsystem Vendor ID +0x8086 +
GT Subsystem Device ID +0x** +
HDA Subsystem Vendor ID +0x0000 +
HDA Subsystem Device ID +0x0000 +
P2SB Enable +Yes/No +
LMEBAR +Max +
GTMMADDR Prefetch Capability +Prefetch Enabled +
Display Present +Enabled/Disabled +
I2C For Third Party Devices +Enabled/Disabled +
I2C Device Address 1 +0x0000 +
I2C Device Address 2 +0x0000 +
I2C Bus Speed +Standard mode (0 to 100Kbps) +
+
Editing FSP Configuration
+

The FSP configuration editor can be downloaded here and it's user manual is available here. +

+
FSP Binary Format
+

The FSP's binary layout is detailed within the Intel® FSP External Architecture Specification v2.4 on page 14. +

+

Known Firmware Package Variations

+

Some firmware packages may include an **End of Manufacturing Flash Protection Mode** status of Protected or Unprotected. +

+
Figure 2: Firmware status information for an Intel DG2 device.
Figure 2: Firmware status information for an Intel DG2 device.
+

Similar SPI Write Protection functionality is made available through Intel CPUs under System Management Mode (SMM). +

+

Embedded Controllers

+

This section will cover firmware images as they apply to various embedded controllers within the Intel GPU. +

+

GuC

+

The Graphics micro (µ) Controller (GuC) is an embedded controller contained within Intel's embedded and discrete graphics (DG*) series GPUs. +

+
Hardware Architecture
+

The following section is supported by igor-blue.github.io (see reference 1, 2): +

"The GuC - an embedded i486 core that supports graphics scheduling, power management and firmware attestation." +

+
Software Architecture
+

The following section is supported by igor-blue.github.io (see reference 1, 2): +

"The μOS kernel runs in 32-bit protected mode, with no paging and old-style segments model (CS, DS, etc’). All code run in ring0. The OS handles HW/SW exceptions and crashes, and supplies debugging and logging services." +

"It runs a single process - which initializes the system and then waits for interrupts/events in a loop." +

+
GuC Blob Checksum & Code Signing
+

"The bootrom verifies the firmware with a digital signature using a SHA256 hash + PKCSv2.1 RSA signature, and if the test passes copies it to SRAM and starts executing." +

+

Nvidia

+

Firmware Images

+

This section will cover firmware images used in Nvidia GPUs. +

+

Embedded Controllers

+

This section will cover firmware images as they apply to various embedded controllers within the Nvidia GPU. +

+

Falcon / NV-RISCV

+

The Fast Logic CONtroller (Falcon) and Nvidia RISC-V (NV-RISCV) processors run the NvOS. +

+

GSP

+

The GPU System Processor (GSP) is an embedded controller used for offload of the RM Core. +

The GSP runs Library Operating System (LibOS). +

+
GSP Initialization & Offload
+

The GSP is initialized multiple times during the system's bring up and runtime. +

GSP offload may occur during: +

+
  • Hardware bring up when a cached version of the RM Core is loaded from SPI flash
+
  • During host driver bring up when the RM Core is offloaded by the OpenRM driver.
  • +
  • During guest driver bring up when the RM Core is offloaded.
+ + + + + + + + + + + + + + + + + +
Possible GSP Offloads +
Load Source +Payload +Notes +
SPI Flash +Cached RM Core +Used as a fallback in case of no rm offload. +
OpenRM +RM Core +This is the RM Core which was traditionally contained in the proprietary RM driver. +
VGX Guest +Guest RM Core +Future OpenRM guests may accomplish RM offload via GSP stubs (controlled via gspHeapSize?). +
+

CMU

+

AMD

+

References (Talks & Reading Material)

+
  1. Security of the Intel Graphics Stack - Part 1 - Introduction
  2. +
  3. Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  4. +
  5. Firmware Security Realizations Part 3: SPI Write Protections
  6. +
  7. Intel® FSP: Firmware Solutions for the Internet of Things
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=edit.html b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=edit.html new file mode 100644 index 0000000..17806b8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=edit.html @@ -0,0 +1,374 @@ + + + + +View source for GPU Software Bill Of Materials (SBOM) - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for GPU Software Bill Of Materials (SBOM)

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to GPU Software Bill Of Materials (SBOM).

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=history.html b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=history.html new file mode 100644 index 0000000..1a36f7b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=history.html @@ -0,0 +1,248 @@ + + + + +Revision history of "GPU Software Bill Of Materials (SBOM)" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "GPU Software Bill Of Materials (SBOM)"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=info.html b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=info.html new file mode 100644 index 0000000..fb24e76 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "GPU Software Bill Of Materials (SBOM)" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "GPU Software Bill Of Materials (SBOM)"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleGPU Software Bill Of Materials (SBOM)
Default sort keyGPU Software Bill Of Materials (SBOM)
Page length (in bytes)10,238
Page ID4506
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Counted as a content pageYes
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation23:09, 9 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit14:58, 13 June 2023
Total number of edits42
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html new file mode 100644 index 0000000..413b63a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Software_Bill_Of_Materials_(SBOM)&oldid=23786.html @@ -0,0 +1,529 @@ + + + + +GPU Software Bill Of Materials (SBOM) - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Software Bill Of Materials (SBOM)

+
+
From Open-IOV
+
Revision as of 14:58, 13 June 2023 by Arthur (talk | contribs) (Updated Nvidia VGX vGPU version to 15.2 in GPU SBOM.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This page will keep a running list of components used to achieve GPU Virtualization.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Component Table +
Vendor +Component +Description +Version +OSS or Blob +Filesize +Vendor Docs +Release Date +Interfaces / APIs +Notes +
Microsoft +Indirect Display Driver (IDD) +Driver + +OSS + +Indirect Display Driver Overview + +UMDF, KMDF +The Indirect Display Driver (IDD) enables GPUs to render graphics at arbitrary resolutions without a physical display connected on Windows OS systems. +
RedHat +vfio_pci +Driver +6.2-rc1 +OSS +in-kernel +RedHat, kernel.org +2022.12.15 +irqfd, ioeventfd, IOCTL +Reference VFIO Stub driver used for discrete assignment of IO, and assignment of some SR-IOV-backed vGPU devices into virtual machines. This driver is commonly replaced with a vendor built VFIO interface with differing memory management and/or page pinning mechanisms which are specific to the vGPU software internals. +
Mediated Core (mdev.ko) +Driver +6.2-rc1 +OSS +0.044 MB +kernel.org +2016.xx.xx +irqfd, ioeventfd, IOCTL, Type 1 IOMMU +The Mediated Core driver provides a common interface for mediated device management that can be used by drivers of different devices. It is an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment (based on VFIO). +
+guest communication daemon +Daemon +0.1.0 +OSS + + +2023.02.08 +Virtio-Serial, CLI +Handles IO to and from guests and the host using Virtio-Serial to handle multiple different guest modules. +
mdev management CLI +1.0 +OSS +0.084 MB + +2023.01.06 +CLI, IOCTL, RMAPI, Mediated Core +Configures the the nvidia-vgpu-mgr process. +
Intel +i915 SR-IOV +Driver +5.15 +OSS +in-kernel + + + +Intel's open source GPU driver for GuC-equipped graphics accelerators. +
GuC μOS +Firmware +Blob + + + +IOMMU Interrupts, Power Management Interrupts, GTT +Handles scheduling, and power management. +
HuC + + + +GTT +Handles video encoding/decoding. +
Display Virtualization for Windows OS +Driver +791 +OSS + +github.com/intel/Display-Virtualization-for-Windows-OS/blob/main/Readme.txt + +udmabuf, UMDF, KMDF +Intel's 'Display Virtualization for Windows OS' provides a virtual pixel surface used for hardware graphics rendering using Microsoft's open source 'Indirect Display Driver (IDD)'. Display virtualization for Windows OS makes use of display memory sharing primitives provided in-driver by the i915 host. +
Nvidia +OpenRM +Driver +525.85.12 +OSS + +github.com/NVIDIA/open-gpu-kernel-modules/blob/main/README.md +2023.01.31 + +Nvidia's open source GPU driver for GSP-equipped graphics accelerators. +
GSP RM (uproc) +Firmware +Blob + + +2023.01.31 +RPC +Embedded firmware based on LibOS containing the RM Core. +
Falcon/NvRISC (uproc) + + + + +FBIF (Frame Buffer Interface) / GMMU +Embedded firmware which handles many aspects of the device including configuring the GPU's GMMU controller. +
nvidia-vgpud +Daemon +v15.2 +Blob +0.108 MB +docs.nvidia.com/grid +2023.01.xx +CLI, IOCTL, RMAPI, Mediated Core +Configures the the nvidia-vgpu-mgr process. +
nvidia-vgpu-mgr +0.132 MB +2023.01.xx +vmiop, IOCTL, RMAPI, vRPC, pRPC, Mediated Core +Handles IO to and from guest RM, host RM, and hardware. +
libnvidia-vgpu.so +Library +3.1 MB +2023.01.xx +vmiop, RMAPI, Mediated Core +Handles IO to and from guest RM, host RM, and hardware. Contains circular dependancies with nvidia-vgpu-mgr. +
nvidia-vgpu-vfio.ko +Driver +0.108 MB +2023.01.xx +Type 1 IOMMU, irqfd, ioeventfd, IOCTL, Mediated Core +Handles incremental memory mapping (non-page pinning per the standard vfio-pci driver). +
+

More Information

+
  1. Nvidia RISC-V Story
  2. +
  3. +
  4. Intel Graphics Programmer's Reference Manuals (PRM)
  5. +
  6. i915: Hardware Contexts (and some bits about batchbuffers)
  7. +
  8. i915: The Global GTT Part 1
  9. +
  10. i915: Aliasing PPGTT Part 2
  11. +
  12. i915: True PPGTT Part 3
  13. +
  14. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  15. +
  16. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  17. +
  18. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  19. +
  20. i915: An Introduction to Intel GVT-g (with new architecture)
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Support&action=edit.html b/wiki/open-iov.org/index.php?title=GPU_Support&action=edit.html new file mode 100644 index 0000000..e02ca39 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Support&action=edit.html @@ -0,0 +1,550 @@ + + + + +View source for GPU Support - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for GPU Support

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to GPU Support.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Support&action=history.html b/wiki/open-iov.org/index.php?title=GPU_Support&action=history.html new file mode 100644 index 0000000..9e7b331 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Support&action=history.html @@ -0,0 +1,256 @@ + + + + +Revision history of "GPU Support" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "GPU Support"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)
+ + + +
+
+
+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Support&action=info.html b/wiki/open-iov.org/index.php?title=GPU_Support&action=info.html new file mode 100644 index 0000000..c934e44 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Support&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "GPU Support" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "GPU Support"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleGPU Support
Default sort keyGPU Support
Page length (in bytes)9,794
Page ID21
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation01:06, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit21:54, 13 March 2023
Total number of edits87
Total number of distinct authors3
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=GPU_Support&oldid=23752.html b/wiki/open-iov.org/index.php?title=GPU_Support&oldid=23752.html new file mode 100644 index 0000000..41542de --- /dev/null +++ b/wiki/open-iov.org/index.php?title=GPU_Support&oldid=23752.html @@ -0,0 +1,814 @@ + + + + +GPU Support - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

GPU Support

+
+
From Open-IOV
+
Revision as of 21:54, 13 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+ +

Abstract

+The following document will detail GPU Support for SR-IOV, SIOV, and VFIO-Mdev functionality.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

Overview

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Feature Matrix +
Hardware +Drivers +Virtual I/O Assistance Modes +Userspace +
Vendor +Architecture +Model +Libre Drivers +Blob Drivers +'Merged' Host+Guest Acceleration +Manufacturer Support +Mdev Support +SR-IOV Support +SIOV Support +mdev management CLI Support + Support +
Intel +6th Generation (Skylake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +7th Generation (Kaby Lake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +8th Generation (Coffee Lake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +9th Generation (Cannon Lake) +*HD +i915 + +Yes +Yes (Legacy) +Yes +No +No +No +Yes +
Intel +10th Generation (Ice Lake) + +i915 + +No +Yes (Legacy) +No +No +No +No +No +
Intel +11th Generation (Tiger Lake) +Xe* +i915 + +Yes +Yes + +Yes + +Yes +Yes +
Intel +12th Generation (Alder Lake) +Xe* +i915 + +Yes +Yes + +Yes +In Development +Yes +Yes +
Nvidia +Maxell +*(see exceptions below) +Nouveau, OpenRM +RM +Yes +Yes +Yes +No +No +Yes +Yes +
Nvidia +Pascal +* +Nouveau, OpenRM +RM +Yes +Yes +Yes +No +No +Yes +Yes +
Nvidia +Turing +* +Nouveau, OpenRM +RM +Yes +Yes +Yes +No +No +Yes +Yes +
Nvidia +Ampere +A* +Nouveau (Development), OpenRM +RM +No (DisplayModeSelector) +Yes +Yes +Yes +In Development +Yes +Yes +
Nvidia +Ampere +RTX 30** +Nouveau (Development), OpenRM +RM +In Development +Yes +Yes +No +In Development +In Development +In Development +
Nvidia +Ada Lovelace +* +OpenRM + + +Yes +Yes +Yes +In Development +In Development +In Development +
Nvidia +Hopper +* +OpenRM + + +Yes +Yes +Yes +In Development + + +
AMD +Tonga +W7100 +AMDGPU, MxGPU / GIM / GPU-IOV Module (Deprecated) +AMDGPU-Pro +No +EOL (2017) +No +Yes +

(patched) +

+
No +No +Yes +
AMD +Tonga +S71** +AMDGPU, MxGPU / GIM / GPU-IOV Module (Deprecated) +AMDGPU-Pro +No +EOL (2017) +No +Yes +No +No +Yes +
AMD +Vega +* +AMDGPU +AMDGPU-Pro +No +Partial +Unknown +Yes +No +No +No +
AMD +Navi +* +AMDGPU +AMDGPU-Pro +No +Partial +Unknown +Yes +No +No +No +
+

Intel

+

This section will cover Mdev support on Intel GPUs. +

+

Hardware

+

GPUs supporting GVT-g (software based mediation)[1]: +

+
  • Intel HD Graphics 5500
  • +
  • Intel HD Graphics 6000
  • +
  • Intel HD Graphics 510
  • +
  • Intel HD Graphics 520
  • +
  • Intel HD Graphics 530
  • +
  • Intel HD Graphics 620
  • +
  • Intel HD Graphics 630
  • +
  • Intel UHD Graphics 620
  • +
  • Intel UHD Graphics 630
+

GPUs supporting SR-IOV (hardware based mediation): +

+
  • Intel Iris Xe Graphics [2][3]
  • +
  • Intel Iris Xe MAX Graphics
+

Drivers

+

Drivers with GVT-g support (6th - 9th gen): +

+ +

Drivers with SR-IOV support (11th gen+): +

+ +

Nvidia

+

This section will cover Mdev support on Nvidia GPUs. +

+

Hardware

+
  • All(?) Volta based GPUs (V-series)
  • +
  • All(?) Turing based GPUs (20-series)
  • +
  • All(?) Pascal based GPUs (10-series)
  • +
  • Most Maxwell based GPUs (9-series) with the following notable exceptions: +
    • GTX 970 (mixed FB regions)
    • +
    • Quadro M2000 (mixed FB regions)
    • +
    • Tesla M40 [4]
+
  • NVIDIA A100 HGX 80GB
  • +
  • NVIDIA A100 PCIe 80GB (SR-IOV: 20VF [5])
  • +
  • NVIDIA A100X
  • +
  • NVIDIA A100 HGX 40GB
  • +
  • NVIDIA A100 PCIe 40GB (SR-IOV: 16VF [6])
  • +
  • NVIDIA A40 (SR-IOV: 32VF [7])
  • +
  • NVIDIA A30 (SR-IOV: 8VF [8])
  • +
  • NVIDIA A30X
  • +
  • NVIDIA A16 (SR-IOV: 16VF [9])
  • +
  • NVIDIA A10 (SR-IOV: 32VF [10])
  • +
  • NVIDIA A2 (SR-IOV: 16VF [11])
  • +
  • NVIDIA RTX A6000
  • +
  • NVIDIA RTX A5000
  • +
  • Quadro RTX 8000 (SR-IOV: 24 VF [12])
  • +
  • Quadro RTX 8000 passive
  • +
  • Quadro RTX 6000 (SR-IOV: 24 VF [13])
  • +
  • Quadro RTX 6000 passive
  • +
  • Tesla V100
  • +
  • Tesla T4 (SR-IOV: 16VF [14])
  • +
  • Tesla P100
  • +
  • Tesla P40
  • +
  • Tesla P6
  • +
  • Tesla P4
  • +
  • Tesla M60
  • +
  • Tesla M10
  • +
  • Tesla M6
  • +
  • GRID K2 (Citrix XenServer and VMware ESXi only)
  • +
  • GRID K1 (Citrix XenServer and VMware ESXi only)
+

Drivers

+

The most widely used method of enabling Mdev functionality on Nvidia GPUs is via the use of Nvidia's proprietary driver package. +

Nvidia's proprietary Mdev driver supports both SR-IOV as well as software based mediation. The appropriate mode is chosen between the two methods based on hardware architecture. +

+

AMD

+

This section will cover Mdev support on AMD GPUs. +

+

Hardware

+

Supported GPUs: +

+
  • AMD FirePro S7150
  • +
  • AMD Radeon Pro V520 [15]
  • +
  • AMD FirePro W7100 [15]
+

Drivers

+

The open source GIM driver supports AMD Tonga architecture GPUs such as the FirePro S7150 & W7100. +

To make use of the MxGPU GIM driver on modern kernel versions you will require pull request 24. +

Virtualization driver support beyond AMD's Tonga architecture is unclear. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Glossary&action=edit.html b/wiki/open-iov.org/index.php?title=Glossary&action=edit.html new file mode 100644 index 0000000..4a4f577 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Glossary&action=edit.html @@ -0,0 +1,245 @@ + + + + +View source for Glossary - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Glossary

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Glossary.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Glossary&action=history.html b/wiki/open-iov.org/index.php?title=Glossary&action=history.html new file mode 100644 index 0000000..896decb --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Glossary&action=history.html @@ -0,0 +1,220 @@ + + + + +Revision history of "Glossary" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Glossary"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Glossary&action=info.html b/wiki/open-iov.org/index.php?title=Glossary&action=info.html new file mode 100644 index 0000000..31fc9ce --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Glossary&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Glossary" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Glossary"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleGlossary
Default sort keyGlossary
Page length (in bytes)6,694
Page ID13
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page1
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:41, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit19:24, 27 March 2023
Total number of edits14
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Glossary&oldid=23763.html b/wiki/open-iov.org/index.php?title=Glossary&oldid=23763.html new file mode 100644 index 0000000..062b47c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Glossary&oldid=23763.html @@ -0,0 +1,269 @@ + + + + +Glossary - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Glossary

+
+
From Open-IOV
+
Revision as of 19:24, 27 March 2023 by Arthur (talk | contribs) (→‎Virtual GPU (vGPU))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Definitions

+

This article will attempt to provide a glossary of common terms that are either related to/or often used in connection with virtualization for those who may need more context. +

If you have suggestions on how to improve the glossary you can contribute or join our community discussion thread to make suggestions. +

+

VFIO

+

Kernel.org defines VFIO or Virtual Function Input Output as "an IOMMU/device agnostic framework for exposing direct device access to userspace, in a secure, IOMMU protected environment." [1]

+
A diagram depicting direct VFIO passthrough of a GPU adapter.
+

Mdev

+

Kernel.org defines Virtual Function I/O (VFIO) Mediated devices as: "an IOMMU/device-agnostic framework for exposing direct device access to user space in a secure, IOMMU-protected environment... mediated core driver provides a common interface for mediated device management that can be used by drivers of different devices." [2]

+
A diagram depicting VFIO Mediated Device interacting with two vGPU guests.
+

Virtual CPU (vCPU)

+

A Virtual CPU (vCPU) is a CPU which has been virtualized to represent a percentage of the total hardware resource via preemptive scheduling.

+

Virtual GPU (vGPU)

+

A Virtual GPU (vGPU) is a GPU which has been virtualized to represent a percentage of the total hardware resource via preemptive scheduling or thread pinning (to EUs, or SMs) and/or a partition of the device's Video Random Access Memory (VRAM).

+

IVSHMEM

+

According to QEMU's GitHub repo: "The Inter-VM shared memory device (ivshmem) is designed to share a memory region between multiple QEMU processes running different guests and the host. In order for all guests to be able to pick up the shared memory area, it is modeled by QEMU as a PCI device exposing said memory to the guest as a PCI BAR." [3]

+
A diagram depicting an inter-vm shared memory device being used by two separate virtual machines.
+

KVMFR (Looking Glass)

+

looking-glass.io defines Looking Glass as: "an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse." [4]

+
A image posted by Gnif (Creator of the Looking Glass project) to a changelog thread on the Level1techs forum - an active community of VFIO users.
+

NUMA Node

+

Infogalactic defines NUMA as: "Non-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local memory faster than non-local memory (memory local to another processor or memory shared between processors)." [5]

+
A diagram depicting Non-Uniform Memory Access (NUMA) nodes.
+

Application Binary Interface (ABI)

+

Infogalactic defines an ABI as "the interface between two program modules, one of which is often a library or operating system, at the level of machine code." [6]

+
A diagram contrasting API and ABI as well as their respective roles in software compatibility.
+

SR-IOV

+

docs.microsoft.com defines SR-IOV as "The single root I/O virtualization (SR-IOV) interface is an extension to the PCI Express (PCIe) specification. SR-IOV allows a device, such as a network adapter, to separate access to its resources among various PCIe hardware functions." [7]

+
A diagram depicting host and guest interactions in a Single Root I/O Virtualization environment.
+

GVT-g

+

wiki.archlinux.org defines Intel GVT-g as "a technology that provides mediated device passthrough for Intel GPUs (Broadwell and newer). It can be used to virtualize the GPU for multiple guest virtual machines, effectively providing near-native graphics performance in the virtual machine and still letting your host use the virtualized GPU normally." [8]

+
A diagram of Intel's GVT-g (Graphics Virtualization Technology g).
+

VirGL

+
A diagram depicting GPU instruction redirects to a single host graphics driver.

lwn.net defines Virgl as: "a way for guests running in a virtual machine (VM) to access the host GPU using OpenGL and other APIs... The virgl stack consists of an application running in the guest that sends OpenGL to the Mesa virgl driver, which uses the virtio-gpu driver in the guest kernel to communicate with QEMU on the host." [9]

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=edit.html b/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=edit.html new file mode 100644 index 0000000..e623031 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=edit.html @@ -0,0 +1,262 @@ + + + + +View source for Hypervisor Support - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Hypervisor Support

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Hypervisor Support.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=history.html b/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=history.html new file mode 100644 index 0000000..735a807 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=history.html @@ -0,0 +1,217 @@ + + + + +Revision history of "Hypervisor Support" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Hypervisor Support"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=info.html b/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=info.html new file mode 100644 index 0000000..ce61fed --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Hypervisor_Support&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Hypervisor Support" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Hypervisor Support"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleHypervisor Support
Default sort keyHypervisor Support
Page length (in bytes)1,542
Page ID23
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation01:22, 18 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit19:15, 8 August 2022
Total number of edits11
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Hypervisor_Support&oldid=751.html b/wiki/open-iov.org/index.php?title=Hypervisor_Support&oldid=751.html new file mode 100644 index 0000000..4b5ce79 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Hypervisor_Support&oldid=751.html @@ -0,0 +1,333 @@ + + + + +Hypervisor Support - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Hypervisor Support

+
+
From Open-IOV
+
Revision as of 19:15, 8 August 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
Platform Hypervisor +Virtual GPU support +Memory Sharing APIs +IOMMU Groups support +PCI forwarding +Mdev Support +SR-IOV Support +SIOV Support +
KVM +Yes +IVSHMEM +Yes +Yes (via VFIO) +Yes +Yes +In Development +
Xen +Yes +Grant Tables +No +Yes (via xen-pciback) +No +Yes +Unknown +
NVMM +Unknown +Unknown +No +Unknown +No +Unknown +No +
+ + +

KVM

+

This section will cover existing support in KVM for VFIO-Mdev and ongoing issues with it's existing implementation. +

+

Missing Functionality

+

Nested SR-IOV. +

+

Xen

+

This section will cover efforts to support the Xen hypervisor with open device mediation software. +

XAPI docs for virtual GPUs can be read here. +

+

Mdev drivers outside Dom0

+

Xen Hyperlaunch aims to disaggregate Dom0's monolithic functions. This includes a discrete domain for device drivers. +

+

Missing Functionality

+

IOMMU Groups (discussions around extending or reworking Xen's IOMMU to include IOMMU Groups is ongoing). +

+

Additional Documentation

+

For additional documentation check the XenProject Wiki. +

+

NVMM

+

This section will cover NetBSD's NVMM. +

+

Missing Functionality

+

VFIO. +

+

Additional Documentation

+

For additional documentation read From Zero to NVMM. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel&action=edit.html b/wiki/open-iov.org/index.php?title=Intel&action=edit.html new file mode 100644 index 0000000..c0ca280 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel&action=edit.html @@ -0,0 +1,200 @@ + + + + +View source for Intel - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Intel

+
+ +
← Intel
+
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Intel.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel&action=history.html b/wiki/open-iov.org/index.php?title=Intel&action=history.html new file mode 100644 index 0000000..d7bfe5d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel&action=history.html @@ -0,0 +1,215 @@ + + + + +Revision history of "Intel" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Intel"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel&action=info.html b/wiki/open-iov.org/index.php?title=Intel&action=info.html new file mode 100644 index 0000000..11320af --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Intel" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Intel"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleIntel
Default sort keyIntel
Page length (in bytes)508
Page ID73
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page1
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:23, 15 June 2022
Latest editorArthur (talk | contribs)
Date of latest edit04:42, 23 March 2023
Total number of edits9
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel&oldid=23757.html b/wiki/open-iov.org/index.php?title=Intel&oldid=23757.html new file mode 100644 index 0000000..98bcfc9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel&oldid=23757.html @@ -0,0 +1,215 @@ + + + + +Intel - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Intel

+
+
From Open-IOV
+
Revision as of 04:42, 23 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This page will document points of integration for virtualization in the Intel i915 driver. +

The i915 added SR-IOV feature enablement in this commit (April 26th 2022). Work is ongoing to upstream this code to i915 in the mainline Linux kernel. +

Driver API documentation can be read here: https://01.org/linuxgraphics/gfx-docs/drm/gpu/i915.html +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=edit.html b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=edit.html new file mode 100644 index 0000000..424f71c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for Intel SR-IOV APIs - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Intel SR-IOV APIs

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Intel SR-IOV APIs.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=history.html b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=history.html new file mode 100644 index 0000000..a12619d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "Intel SR-IOV APIs" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Intel SR-IOV APIs"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=info.html b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=info.html new file mode 100644 index 0000000..2c720b8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Intel SR-IOV APIs" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Intel SR-IOV APIs"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleIntel SR-IOV APIs
Redirects toIntel (info)
Default sort keyIntel SR-IOV APIs
Page length (in bytes)19
Page ID21569
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation04:26, 23 March 2023
Latest editorArthur (talk | contribs)
Date of latest edit04:26, 23 March 2023
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&oldid=23756.html b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&oldid=23756.html new file mode 100644 index 0000000..05086e1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&oldid=23756.html @@ -0,0 +1,213 @@ + + + + +Intel SR-IOV APIs - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Intel SR-IOV APIs

+
+
From Open-IOV
+
Revision as of 04:26, 23 March 2023 by Arthur (talk | contribs) (Arthur moved page Intel SR-IOV APIs to Intel)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

+ Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&redirect=no.html b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&redirect=no.html new file mode 100644 index 0000000..b617674 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Intel_SR-IOV_APIs&redirect=no.html @@ -0,0 +1,211 @@ + + + + +Intel SR-IOV APIs - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Intel SR-IOV APIs

+
+
From Open-IOV
+
Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introduction&action=edit.html b/wiki/open-iov.org/index.php?title=Introduction&action=edit.html new file mode 100644 index 0000000..a181443 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introduction&action=edit.html @@ -0,0 +1,231 @@ + + + + +View source for Introduction - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Introduction

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Introduction.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introduction&action=history.html b/wiki/open-iov.org/index.php?title=Introduction&action=history.html new file mode 100644 index 0000000..e76c9fe --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introduction&action=history.html @@ -0,0 +1,216 @@ + + + + +Revision history of "Introduction" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Introduction"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introduction&action=info.html b/wiki/open-iov.org/index.php?title=Introduction&action=info.html new file mode 100644 index 0000000..0adc3d3 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introduction&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Introduction" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Introduction"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleIntroduction
Default sort keyIntroduction
Page length (in bytes)5,408
Page ID4507
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Counted as a content pageYes
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation17:04, 12 December 2022
Latest editorArthur (talk | contribs)
Date of latest edit03:21, 19 January 2023
Total number of edits10
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introduction&oldid=23688.html b/wiki/open-iov.org/index.php?title=Introduction&oldid=23688.html new file mode 100644 index 0000000..3e17ea4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introduction&oldid=23688.html @@ -0,0 +1,269 @@ + + + + +Introduction - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Introduction

+
+
From Open-IOV
+
Revision as of 03:21, 19 January 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This page will provide introductory context on where to begin reading. It will aim to give you a sense of primitives or foundational concepts used for GPU Virtualization. +

+ + +

Terminology

+

To get started with basic terminology around IO Virtualization read the Glossary page. This will get you familiar with a few terms and concepts used in IO Virtualization documentation. +

+

Primitives

+

The primitives section will cover a few notes on the basics of virtualizing a GPU or IO device. +

+

PCI BAR

+

PCI-e devices such as GPUs are used for input and output to and from a computer system. This input and output occurs using TLPs or Transaction Layer Packets over the PCI-e packet network. The IO device is presented to the host operating system as BARs or Base Address Registers. +

+

GPU Drivers

+

GPUs need software to communicate from a host computer system to the device - this software is called a GPU Driver and it typically interacts with the device using MMIO or Memory Mapped IO. MMIO is a set of operations used to allow normal CPU instructions to address registers in RAM in order to communicate with the PCI-e device. In the context of virtualization these registers must be presented into the device in a way that the guest operating system expects. Typically this is accomplished using VFIO or Virtual Function IO. VFIO is used for many methods of virtualizing the device including discrete assignment of a physical device, or virtual (partitioned) device assignment created with or without hardware assistance. +

+

IOMMU

+

MMU or Memory Management Units handle hardware enforced access to memory paging in computer systems. In the context of virtualized MMIO (Memory Mapped Input Output) devices an MMU is required to hardware enforce access to virtual devices (a Memory Management Unit for Input Output is known as an IOMMU). In the case of VFIO, groups of IOMMU devices (IOMMU Groups) are used to control access to the device. These IOMMU Groups often represent individual devices or sub-devices (in the context of Unassisted Virtualization (VFIO-Mdev), Hardware-Assisted Virtualization (SR-IOV), or Hardware-Assisted Paravirtualization) which may be bound to a VFIO bus driver (such as vfio-pci) which results in a VFIO Group (unit of ownership). +

+

Virtualization vs. Paravirtualization

+

Virtualization provides support for unmodified guest software or drivers in the context of GPUs. +

Paravirtualization provides support for "enlightened" guests or modified software which is aware of virtualization. +

+

Unassisted vs. Assisted

+

Similar to virtualization on CPUs with tools like Xen, IO devices can be virtualized on different kinds of computer hardware. Some devices provide hardware virtualization assistance (such as HVM mode in Xen) and some do not (such as PV mode in Xen), as a result an appropriate mode should be used depending on the availability of assistance. +

+

Further Reading

+

This section will cover what you should read to obtain more information about virtualization. +

+

Virtualization Fundamentals

+

The Virtualization Fundamentals article provides links to some of the foundational work which underly modern virtualization industry and development today. If you'd like to understand both the theories on which virtualization builds as well as the history of industry you should read several articles here. Notable Popek and Goldberg Virtualization Requirements as well as Xen and the Art of Virtualization provide a great foundations-first approach to learning about virtualization. +

+

Virtual I/O Internals

+

The Virtual I/O Internals article provides a detailed look into the interface layers between IO driver internals, the hypervisor, and the guest OS. This is a great article to read if you'd like to better understand how virtual machines can interact with both discretely assigned devices as well as those which have been partitioned using software or firmware. +

+

GPU Driver Internals

+

The GPU Driver Internals article provides information on how GPU drivers are structured internally as well as how they achieve virtualization. This includes high level architecture, device initialization, as well as memory mapping, and scheduling. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=edit.html b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=edit.html new file mode 100644 index 0000000..757e3e2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for Introductory Concepts & Definitions - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Introductory Concepts & Definitions

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Introductory Concepts & Definitions.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=history.html b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=history.html new file mode 100644 index 0000000..412d624 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "Introductory Concepts & Definitions" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Introductory Concepts & Definitions"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=info.html b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=info.html new file mode 100644 index 0000000..3de7a89 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Introductory Concepts & Definitions" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Introductory Concepts & Definitions"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleIntroductory Concepts & Definitions
Redirects toGlossary (info)
Default sort keyIntroductory Concepts & Definitions
Page length (in bytes)22
Page ID87
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:41, 2 August 2022
Latest editorArthur (talk | contribs)
Date of latest edit18:41, 2 August 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&oldid=723.html b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&oldid=723.html new file mode 100644 index 0000000..021f654 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&oldid=723.html @@ -0,0 +1,213 @@ + + + + +Introductory Concepts & Definitions - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Introductory Concepts & Definitions

+
+
From Open-IOV
+
Revision as of 18:41, 2 August 2022 by Arthur (talk | contribs) (Arthur moved page Introductory Concepts & Definitions to Glossary: Simplifying the page title to 'Glossary' so it can be linked from other pages to provide clarity on concepts/technical terms where needed.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

+ Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&redirect=no.html b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&redirect=no.html new file mode 100644 index 0000000..51e1192 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Introductory_Concepts_&_Definitions&redirect=no.html @@ -0,0 +1,211 @@ + + + + +Introductory Concepts & Definitions - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Introductory Concepts & Definitions

+
+
From Open-IOV
+
Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html new file mode 100644 index 0000000..06240c3 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html @@ -0,0 +1,231 @@ + + + + +View source for LIME Is Mediated Emulation - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for LIME Is Mediated Emulation

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to LIME Is Mediated Emulation.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=history.html b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=history.html new file mode 100644 index 0000000..86dade2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=history.html @@ -0,0 +1,227 @@ + + + + +Revision history of "LIME Is Mediated Emulation" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "LIME Is Mediated Emulation"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=info.html b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=info.html new file mode 100644 index 0000000..77c1721 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "LIME Is Mediated Emulation" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "LIME Is Mediated Emulation"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleLIME Is Mediated Emulation
Default sort keyLIME Is Mediated Emulation
Page length (in bytes)6,919
Page ID89
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation14:46, 22 August 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:14, 23 August 2022
Total number of edits21
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&oldid=786.html b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&oldid=786.html new file mode 100644 index 0000000..213e0e9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&oldid=786.html @@ -0,0 +1,260 @@ + + + + +LIME Is Mediated Emulation - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

LIME Is Mediated Emulation

+
+
From Open-IOV
+
Revision as of 17:14, 23 August 2022 by Arthur (talk | contribs) (→‎Compatibility With Other ABIs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

LIME Is Mediated Emulation is an in-development feature in which enables the execution of full performance Win64 binaries with full compatibility for all current and future software making use of the Windows ABI. An initial demo of this technology can be viewed here. +

+ + +

Design Goals

+

LIME aims to provide similar functionality to WINE Is Not Emulation, Valve's Proton / DXVK but with the use of graphics virtualization (vGPU/SR-IOV on consumer GPUs), a shared filesystem between host/guest, and KVM Frame Relay (high performance graphics buffer sharing via Inter-VM Shared Memory Device / IVSHMEM). +

Compared to WINE, and Proton the benefits of this approach are that Win64 binaries execute without the incompatibilities introduced in new games taking advantage of the latest version of DirectX, or when changes are introduced to the latest version of the Win64 ABI. +

This functionality is enabled via the use of GPU Virtual Machine (for consumer GPU Virtualization), VirtIO-FS (for host <-> guest filesystem sharing), Looking Glass (for host <-> guest shared frame buffer), and (for orchestration). +

+

Use-Cases

+

Win64 Subsystem

+

LIME's most immediate use case is around ABI compatibility with Win64 programs in environments without native support. +

A blog post detailing the problems which lead to this work can be read here. A summary of this post is traditional models for backwards compatibility with Application Binary Interfaces (ABIs) lock-in existing models for kernel/userland development and stagnate architectural innovation. On the other hand consumer oriented systems like those based on Darwin/XNU break backwards compatibility with user programs version to version of the system in order to introduce architectural improvements in the kernel / userland (for instance micro-service device drivers which may recover from faults at OS runtime). +

These two approaches might be considered two discretely separable models for software development 'enterprise' /'consumer' - LIME might then be considered a third approach which preserves the functions of both prior approaches (continual innovation afforded in the kernel-space and backwards compatibility with existing software libraries). +

ie: A method by which programs "import" a particular explicitly versioned ABI similar to how Docker provisions chroot resources like configuration files and support libraries, but extended to drivers, and the kernel. +

+

Win64 Orchestration

+

Because LIME necessarily provisions application data, program files, and NUMA-aware vCPU/vGPU resources (in the context of multi-GPU, multi-socket CPU systems) through for automatic execution by one or more VM guests LIME might provide an ideal architecture for orchestration of Win64 applications at scale. This could include execution of programs for game streaming in a server environment, or multiple applications in a single user environment for 'seamless-mode' execution of guest programs similar to that of QubesOS with hardware GPU acceleration added. +

+

Compatibility With Other ABIs

+

To solve the problems of 'ABI lock-in' discussed in the "Why Computers Suck" post it may be possible to port LIME support to multiple different guest operating systems allowing execution of any program with any ABI with near indistinguishable performance compared to native execution. +

+

Quality of Service (QoS)

+

VFIO-Mdev functionality like that used in GPU Virtual Machine (GVM) provides granular GPU resource allocation and load balancing functions similar to those seen in control groups (cgroups) as they are commonly applied today to RAM and CPU resources. In the context LIME VFIO-Mdev could be applied for load balancing of individual processes running in a virtualized state to ensure individual processes making use of the GPU cannot deny service to others on the system. +

+

Development Status

+

Development of this functionality is ongoing. Efforts to improve LIME are primarily focused on stabilization of shared filesystem functions. +

+

VirtIO-FS

+

VirtIO-FS provides shared filesystem functionality between host and guest using FUSE which is ideal for LIME, however in the context of Windows guests the C version of virtiofsd appears unstable (seen in virtio-win issue 550 [closed], 723 [closed], 724 [open]). Testing has been performed by members of the Open-IOV community which have shown initial signs of increased filesystem stability under continuous read/write loads using the Rust version of virtiofsd (virtiofsd-rs). +

While many programs can be stored in the VirtIO-FS shared directory some programs such as Steam don't want to install programs into the VirtIO-FS drive (seen as a secondary drive in Windows - in often as disk D:/ if no additional media is attached). This game installation behaviour (which drive the user may place their programs in) may not be in common with other game stores such as the Epic Games Store, or Good Old Games (GOG). +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=edit.html b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=edit.html new file mode 100644 index 0000000..881b3c6 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=edit.html @@ -0,0 +1,207 @@ + + + + +View source for Looking Glass KVMFR - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Looking Glass KVMFR

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Looking Glass KVMFR.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=history.html b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=history.html new file mode 100644 index 0000000..8e21d93 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=history.html @@ -0,0 +1,213 @@ + + + + +Revision history of "Looking Glass KVMFR" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Looking Glass KVMFR"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=info.html b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=info.html new file mode 100644 index 0000000..3eb7f79 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Looking Glass KVMFR" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Looking Glass KVMFR"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleLooking Glass KVMFR
Default sort keyLooking Glass KVMFR
Page length (in bytes)1,265
Page ID32
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation22:35, 30 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit21:18, 9 November 2022
Total number of edits7
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&oldid=855.html b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&oldid=855.html new file mode 100644 index 0000000..225912d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Looking_Glass_KVMFR&oldid=855.html @@ -0,0 +1,223 @@ + + + + +Looking Glass KVMFR - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Looking Glass KVMFR

+
+
From Open-IOV
+
Revision as of 21:18, 9 November 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

Looking Glass is an open source application that allows the use of a KVM (Kernel-based Virtual Machine) configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse. +

+

Looking Glass Memory Protocol (LGMP)

+

LGMP is an Inter-VM Shared Memory Device (IVHSMEM) based memory sharing protocol for the KVM Frame Relay use-case (sharing of MMIO memory for use by GPU drivers between host and guest). +

+

Xen Support

+

It may be possible to port the Looking Glass Memory Protocol to Xen by substituting the use of the Grant Table memory sharing primitive in place of the IVSHMEM memory sharing primitive. +

+
A diagram depicting how Looking Glass memory device may be redirected over the network via Remote Direct Memory Access (RDMA).
+

Telescope

+

The LGMP protocol may also be extended over a high bandwidth network using the Telescope Looking Glass Proxy. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Main_Page&action=edit.html b/wiki/open-iov.org/index.php?title=Main_Page&action=edit.html new file mode 100644 index 0000000..2368d41 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Main_Page&action=edit.html @@ -0,0 +1,226 @@ + + + + +View source for Main Page - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Main Page

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reasons: +

+
    +
  • The action you have requested is limited to users in the group: Administrators.
  • +
  • This page has been protected to prevent editing or other actions.
  • +

+

You can view and copy the source of this page. +

Return to Main Page.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Main_Page&action=history.html b/wiki/open-iov.org/index.php?title=Main_Page&action=history.html new file mode 100644 index 0000000..2841989 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Main_Page&action=history.html @@ -0,0 +1,256 @@ + + + + +Revision history of "Main Page" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Main Page"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)
+ + + +
+
+
+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Main_Page&action=info.html b/wiki/open-iov.org/index.php?title=Main_Page&action=info.html new file mode 100644 index 0000000..36eafa1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Main_Page&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Main Page" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Main Page"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleMain Page
Default sort keyMain Page
Page length (in bytes)1,190
Page ID1
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Counted as a content pageYes
+

Page protection

+ + + +
EditAllow only administrators (infinite)
MoveAllow only administrators (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorMediaWiki default (talk | contribs)
Date of page creation19:56, 17 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit18:25, 30 March 2023
Total number of edits74
Total number of distinct authors2
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Main_Page&oldid=23765.html b/wiki/open-iov.org/index.php?title=Main_Page&oldid=23765.html new file mode 100644 index 0000000..ea7da90 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Main_Page&oldid=23765.html @@ -0,0 +1,246 @@ + + + + +Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
Revision as of 18:25, 30 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mdev-GPU&action=edit.html b/wiki/open-iov.org/index.php?title=Mdev-GPU&action=edit.html new file mode 100644 index 0000000..1e1f677 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mdev-GPU&action=edit.html @@ -0,0 +1,339 @@ + + + + +View source for Mdev-GPU - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Mdev-GPU

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Mdev-GPU.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mdev-GPU&action=history.html b/wiki/open-iov.org/index.php?title=Mdev-GPU&action=history.html new file mode 100644 index 0000000..08797b2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mdev-GPU&action=history.html @@ -0,0 +1,227 @@ + + + + +Revision history of "Mdev-GPU" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Mdev-GPU"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mdev-GPU&action=info.html b/wiki/open-iov.org/index.php?title=Mdev-GPU&action=info.html new file mode 100644 index 0000000..d74e976 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mdev-GPU&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Mdev-GPU" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Mdev-GPU"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleMdev-GPU
Default sort keyMdev-GPU
Page length (in bytes)7,311
Page ID85
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation16:01, 25 July 2022
Latest editorArthur (talk | contribs)
Date of latest edit00:28, 2 March 2023
Total number of edits21
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mdev-GPU&oldid=23740.html b/wiki/open-iov.org/index.php?title=Mdev-GPU&oldid=23740.html new file mode 100644 index 0000000..512ff16 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mdev-GPU&oldid=23740.html @@ -0,0 +1,363 @@ + + + + +Mdev-GPU - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Mdev-GPU

+
+
From Open-IOV
+
Revision as of 00:28, 2 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This page makes use of terms that are defined in the Open-IOV Glossary. If you're curious what a given term means you can check there for a definition. +


+

This page will be used to document the Mdev-GPU API as well as provide an overview of the internals of the Mdev-GPU package. +

Mdev-GPU's source code can be found here. +

+Module docs can be found here.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Compilation

+

Compiling Mdev-GPU from source is very simple however it can take a long time to complete (10 minutes for existing sources). +

If you'd like to compile Mdev-GPU yourself you can do so by cloning the repo and running the following two commands from within the repository directory: +

curl -sSL https://get.haskellstack.org/ | sh +

stack install +

These commands will generate all binaries provided by Mdev-GPU under the path ~/.local/bin/. +

If you would prefer not to wait for the program to compile you can find pre-compiled x86_64 binaries under the Releases section of the repository on GitHub. +

+

Installation

+

The binaries compiled on your local machine by Stack in the ~/.local/bin/ path or downloaded from Releases on GitHub should be copied to /usr/bin/. This can be accomplished both via install script (currently testing in ) or via management layer-agnostic package. +

+

Mdev-GPU Configuration

+

The Mdev-GPU repository provides Systemd service and example configurations for Mdev-CLI in the /etc/ folder. On installation the directories & files contained in the repository's /etc/ folder should be copied to the absolute path /etc/ on the user's computer. +

+

Systemd

+

GVM/Mdev-GPU exposes several of it's functions as Systemd services. +

As of the 0.1.0.0 release the following Systemd services are available: +

+
  • mdev-post.service
+
mdev-post.service
+

As the name would suggest mdev-post.service posts the GPU(s) in a state where they are ready to be virtualized. When the service is invoked the mdev-cli util registers Mdev callbacks and supported mediated device (Mdev) types with the Mediated Core according to the user's specified configuration at /etc/gvm/mdev-gpu/generate-vgpu-types.yaml. If you'd like to place your configuration file elsewhere and still have your configuration invoked on boot you can edit the systemd service ExecStart= line to specify an alternative path. +

+

Mdev-CLI

+

Configuration for Mdev-GPU can be found in the path /etc/gvm/mdev-gpu/. This path will by default contain several vendor-specific folders which may include configuration examples for various devices/architectures as well as the file generate-vgpu-types.yaml which you can configure to specify your desired Virtual GPU (vGPU) / VFIO-Mdev topologies as they are presented in the sysfsdev mdev_bus path and as seen by tools such as mdevctl. Once you have configured the available types your liking you can refresh the supported types registered with the Mediated Core by rebooting your machine or reloading the vendor driver kernel module then restarting mdev-post.service or by invoking mdev-cli. +


+The available yaml properties which may be specified in /etc/gvm/mdev-gpu/generate-vgpu-types.yaml are shown below. Note that fields with the [required] tag must be specified in the yaml file whereas fields with the [optional] tag may be omitted from configuration if you would prefer to rely upon default parameters instead. +

+
num
+

[required] +

num refers to the Mediated Device (Mdev) type number. This value specifies the profile's numerical identifier in the sysfsdev mdev_bus path. +

+
vDevId
+

[optional] +

The vGPU (Virtual GPU) PCI Device ID which should be presented to the guest. +

+
pDevId
+

[optional] +

The pGPU (Physical GPU) PCI Device ID which should be presented to the host. +

+
name
+

[optional] +

The GPU name presented to the guest. +

+
gpuClass
+

[optional] +

The class of GPU to use. +

available strings: +

"Compute" +

"Graphics" +

+
maxInstances
+

[required] +

maxInstances refers to the maximum number of instances available of any given Mediated Device (Mdev) profile. This number can be configured arbitrarily however it should ideally not be set to a value which allows for fbLen/fbRes values that allow a number of Mdev devices to be created which would exceed your device's available VRAM. +

+
virtDisplay
+

[optional] +

virtDisplay controls the topologies of virtual displays. virtDisplay exposes the following user configurable properties: +

+
numHeads
+

[optional] +

Number of heads [virtual monitors] available for each Mediated Device (Mdev). +

+
maxResX
+

[optional] +

Maximum width of the mediated display. +

+
maxResY
+

[optional] +

Maximum height of the mediated display. +

+
frlConfig
+

[optional] +

Frame rate limiter for the mediated display. +

+
frlEnable
+

[optional] +

Do we enable frame rate limiting or not? +

+
ecc
+

[optional] +

ecc refers to if error correcting memory should be used. +

+
fbLen
+

[required] +

fbLen is the framebuffer length (in megabytes). +

+
fbRes
+

[required] +

fbRes is the framebuffer reserved by the hypervisor (in megabytes). In most circumstances this value should scale to around 1/7th the size of your chosen fbLen value. +

+
mapVideoSize
+

[optional] +

Mappable video size in MBs, 24 by default. +

+
encCap
+

[optional] +

Percentage we use the NvEnc hardware. +

+
bar1Len
+

[optional] +

bar1Len refers to the size of the Base Address Registers for BAR1 (MSI) as presented by the VFIO File Descriptor. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=edit.html b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=edit.html new file mode 100644 index 0000000..cb254e9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for Mediated Device Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Mediated Device Internals

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Mediated Device Internals.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=history.html b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=history.html new file mode 100644 index 0000000..be71e6b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "Mediated Device Internals" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Mediated Device Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=info.html b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=info.html new file mode 100644 index 0000000..ae1fbc2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Mediated Device Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Mediated Device Internals"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleMediated Device Internals
Redirects toVirtual I/O Internals (info)
Default sort keyMediated Device Internals
Page length (in bytes)35
Page ID78
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation15:18, 14 July 2022
Latest editorArthur (talk | contribs)
Date of latest edit15:18, 14 July 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&oldid=660.html b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&oldid=660.html new file mode 100644 index 0000000..78ae7c1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&oldid=660.html @@ -0,0 +1,213 @@ + + + + +Mediated Device Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Mediated Device Internals

+
+
From Open-IOV
+
Revision as of 15:18, 14 July 2022 by Arthur (talk | contribs) (Arthur moved page Mediated Device Internals to Virtual I/O Internals: Virtual I/O Internals is a better summary of the content of this page.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

+ Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&redirect=no.html b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&redirect=no.html new file mode 100644 index 0000000..2530e6d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Mediated_Device_Internals&redirect=no.html @@ -0,0 +1,211 @@ + + + + +Mediated Device Internals - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Mediated Device Internals

+
+
From Open-IOV
+
Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Merged_Drivers&action=edit.html b/wiki/open-iov.org/index.php?title=Merged_Drivers&action=edit.html new file mode 100644 index 0000000..37400ab --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Merged_Drivers&action=edit.html @@ -0,0 +1,255 @@ + + + + +View source for Merged Drivers - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Merged Drivers

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Merged Drivers.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Merged_Drivers&action=history.html b/wiki/open-iov.org/index.php?title=Merged_Drivers&action=history.html new file mode 100644 index 0000000..f7e867d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Merged_Drivers&action=history.html @@ -0,0 +1,255 @@ + + + + +Revision history of "Merged Drivers" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Merged Drivers"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Merged_Drivers&action=info.html b/wiki/open-iov.org/index.php?title=Merged_Drivers&action=info.html new file mode 100644 index 0000000..e5d4c91 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Merged_Drivers&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Merged Drivers" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Merged Drivers"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleMerged Drivers
Default sort keyMerged Drivers
Page length (in bytes)5,507
Page ID30
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation18:18, 20 December 2021
Latest editorArthur (talk | contribs)
Date of latest edit00:22, 2 March 2023
Total number of edits49
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Merged_Drivers&oldid=23737.html b/wiki/open-iov.org/index.php?title=Merged_Drivers&oldid=23737.html new file mode 100644 index 0000000..f95d3d8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Merged_Drivers&oldid=23737.html @@ -0,0 +1,291 @@ + + + + +Merged Drivers - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Merged Drivers

+
+
From Open-IOV
+
Revision as of 00:22, 2 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

The following page will provide specifications and details on the current state of host DRM + VFIO-Mdev drivers in support of various vendors. +

In the context of this page the term "Merged Driver" refers to drivers which allow simultaneous acceleration of the host using a device's PF (Physical Function) and acceleration of guests using one or more VFs (Virtual Functions) created using the same device. +

+Merged functionality is currently supported for drivers which both make use of VFIO-Mdev and SR-IOV functionality depending on the vendor and driver implementation.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Intel i915

+
Intel's slides mention the ability to accelerate up to '8 VMs plus DOM0'. Source: https://01.org/sites/default/files/documentation/an_introduction_to_intel_gvt-g_for_external.pdf
+

Intel currently supports host DRM and VFIO-Mdev/SR-IOV functionality in it's current i915 driver sources (VFIO-Mdev/GVT-g) and upstreaming i915 driver sources (VFIO-Mdev/SR-IOV). +

+

Known Issues

+
  1. SR-IOV functionality is undocumented in the i915 driver API documentation.
    Confirmed affected versions: *
    A diagram depicting i915's shared host + VFIO-Mdev driver model.
+

Resolved Issues

+
  1. Multiplexing functionality requires use modified KVM and Xen hypervisors (KVMGT/XenGT).
    Confirmed affected versions:
    current i915 driver sources (GVT-g)
    Fixed in:
    upstreaming i915 driver sources (SR-IOV)
+

Nvidia

+

Known Issues

+
  1. Power management on laptops running mediated graphics functionality may causes graphical errors when not plugged in to AC power.
    Confirmed affected versions: 460.32.01, 460.73.04
    Possible mitigation: lore.kernel.org: "vfio/pci: Change the PF power state to D0 before enabling VFs"
  2. +
  3. VFIO-vmalloc errors may occur as a result of page collisions between host & guest on GPUs with smaller VRAM frame buffer sizes.
    Confirmed affected versions: 460.32.01, 460.73.04
  4. +
  5. Mdev service daemons may crash or load incorrectly requiring a service restart or reboot during host runtime.
    Confirmed affected versions: 460.32.01, 460.73.04, 510.xx.xx
  6. +
  7. Guest drivers fail to initialize correctly when VFIO-Mdev devices are mixed with some VFIO passthrough'd USB hubs.
    Confirmed affected versions: 460.73.01
+

Resolved Issues

+
  1. Upon executing QEMU mdev device initialization for a second Mdev an IOMMU group binding error occurs in QEMU preventing the device from being brought up.
    Confirmed affected versions: 460.32.01, 460.73.04
    Fixed in: 510.xx.xx
+

Module Configuration

+

Depending on your use-case the use of some additional parameters when booting the system may be helpful. +

Here is a list of some parameters which may be used when loading the module via GRUB or Systemd-boot. +

+ + + + + + + + + + + + + +
Module Parameters +
Parameter +Description +Side-Effects +
cudahost=1 +Allows use of CUDA on the host system. +Windows guests may fail. +
nvidia.vgpukvm=0 +Disables GPU virtualization on the host. + +
+

AMDGPU

+

At this time AMDGPU does not currently support VFIO-Mdev functionality. It may be possible to incorporate Mdev Mode mediated device support similar to those functions in nvidia.ko and i915.ko in the Linux kernel's AMDGPU driver sources to produce a driver suitable for merged host+guest DRM for use with AMD GPU devices. +

+

Known Issues

+
  1. Host DRM does not work alongside guest VFIO-Mdev.
    Confirmed affected versions: *
  2. +
  3. The amdgpu kernel module doesn't contain hooks for guest signalling via irqfd & ioeventfd used for VFIO-mdev callbacks.
    Confirmed affected versions: *
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Open-IOV:About&action=edit.html b/wiki/open-iov.org/index.php?title=Open-IOV:About&action=edit.html new file mode 100644 index 0000000..d6fba98 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Open-IOV:About&action=edit.html @@ -0,0 +1,200 @@ + + + + +View source for Open-IOV:About - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Open-IOV:About

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Open-IOV:About.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Open-IOV:About&action=history.html b/wiki/open-iov.org/index.php?title=Open-IOV:About&action=history.html new file mode 100644 index 0000000..30c7081 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Open-IOV:About&action=history.html @@ -0,0 +1,210 @@ + + + + +Revision history of "Open-IOV:About" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Open-IOV:About"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Open-IOV:About&action=info.html b/wiki/open-iov.org/index.php?title=Open-IOV:About&action=info.html new file mode 100644 index 0000000..506c0cc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Open-IOV:About&action=info.html @@ -0,0 +1,220 @@ + + + + +Information for "Open-IOV:About" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Open-IOV:About"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleOpen-IOV:About
Default sort keyAbout
Page length (in bytes)608
NamespaceOpen-IOV
Page ID74
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Number of subpages of this page0 (0 redirects; 0 non-redirects)
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:59, 4 July 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:56, 14 December 2022
Total number of edits4
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Open-IOV:About&oldid=5625.html b/wiki/open-iov.org/index.php?title=Open-IOV:About&oldid=5625.html new file mode 100644 index 0000000..c828bc5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Open-IOV:About&oldid=5625.html @@ -0,0 +1,215 @@ + + + + +Open-IOV:About - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Open-IOV:About

+
+
From Open-IOV
+
Revision as of 17:56, 14 December 2022 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization.  +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=OpenRM&action=edit.html b/wiki/open-iov.org/index.php?title=OpenRM&action=edit.html new file mode 100644 index 0000000..29eb827 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=OpenRM&action=edit.html @@ -0,0 +1,484 @@ + + + + +View source for OpenRM - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for OpenRM

+
+ +
← OpenRM
+
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to OpenRM.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=OpenRM&action=history.html b/wiki/open-iov.org/index.php?title=OpenRM&action=history.html new file mode 100644 index 0000000..d470538 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=OpenRM&action=history.html @@ -0,0 +1,215 @@ + + + + +Revision history of "OpenRM" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "OpenRM"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=OpenRM&action=info.html b/wiki/open-iov.org/index.php?title=OpenRM&action=info.html new file mode 100644 index 0000000..406d8b0 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=OpenRM&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "OpenRM" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "OpenRM"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleOpenRM
Default sort keyOpenRM
Page length (in bytes)7,780
Page ID40
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation00:08, 11 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit00:26, 2 March 2023
Total number of edits9
Total number of distinct authors2
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=OpenRM&oldid=23739.html b/wiki/open-iov.org/index.php?title=OpenRM&oldid=23739.html new file mode 100644 index 0000000..7053191 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=OpenRM&oldid=23739.html @@ -0,0 +1,565 @@ + + + + +OpenRM - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

OpenRM

+
+
From Open-IOV
+
Revision as of 00:26, 2 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

OpenRM refers to the open sourcing of the NVIDIA kernel module for Linux, specifically the RM Core or the internal resource manager. +

+Through the open sourced code (located here) we have been able to deduce 7 top level APIs that are being exposed to the Linux developers.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Interaction With OpenRM

+

All of OpenRM is a high scale object oriented abstraction layer for the GPU, all resources are internally classes which have control definitions (methods) on how you can use them. These classes can also represent physical resources or engines. +

+

Alloc (Client)

+

This is analogous to calling an object constructor in a higher level programming language, such as C#. +

The data for this call requires the following components: +

+
  1. hRoot - RM Client Id (given by the kernel module for an individual process that is interacting with the kernel module).
  2. +
  3. hObjectParent - Parent of the resource we are allocating.
  4. +
  5. hObjectNew - New object to allocate.
  6. +
  7. hClass - Class of the object we are dealing with.
  8. +
  9. pAllocParams - Pointer to values passed into the constructor call.
  10. +
  11. status - Status of the constructor call (did it succeed or fail)
+

Alloc Memory 64

+

This creates a CPU's mapping to a resource. +

The data for this call requires the following components: +

+
  1. hRoot - RM Client Id (given by the kernel module for an individual process that is interacting with the kernel module).
  2. +
  3. hObjectParent - Parent of the resource we create the CPU mapping to.
  4. +
  5. hObjectNew - Mapping object resource id.
  6. +
  7. hClass - Class of the mapped object.
  8. +
  9. flags - Flags to use on the mapped object.
  10. +
  11. pMemory - pointer for the memory to map.
  12. +
  13. pLimit - Edge of memory map.
  14. +
  15. status - Status of the constructor call.
+

NOTE: Seems to be deprecated. +

+

Control

+

This is a control command which is analogous to calling a method on a class. +

The data for this call requires the following components: +

+
  1. hClient - RM Client Id.
  2. +
  3. hObject - Object id.
  4. +
  5. cmd - Method to call.
  6. +
  7. params - Parameters into this method.
  8. +
  9. paramsSize - Size of the params.
  10. +
  11. status - Status of the control call.
+

NOTE: The control will overwrite the object we pass in over the params pointer. +

+

Dup Object

+

Duplicates the object, or clones the object, which is a deep copy. This procedure can be used across processes in order to produce shared memory. +

The data for this call requires the following components: +

+
  1. hClient - RM Client Id.
  2. +
  3. hParent - Parent of the object.
  4. +
  5. hObject - Object destination for duplicating.
  6. +
  7. hClientSrc - Client source id.
  8. +
  9. hObjectSrc - Object source.
  10. +
  11. flags - Flags to use.
  12. +
  13. status - Status of the duplication.
+

Free

+

Frees an object from the object tree. +

The data for this call requires the following components: +

+
  1. hRoot - Client Id.
  2. +
  3. hObjectParent - Parent of the object.
  4. +
  5. hObjectOld - Object to call the destructor on.
  6. +
  7. status - Status of the free.
+

Vid Heap Control

+

TODO: Figure out what this does. +

NOTE: Seems to be deprecated. +

+

Map Memory

+

This seems to be the same as alloc memory but seems to be used more often. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device id.
  4. +
  5. hMemory - Memory resource.
  6. +
  7. offset - Offset of the memory.
  8. +
  9. length - Length of the memory.
  10. +
  11. pLinearAddress - Pointer for returned address.
  12. +
  13. status - Status of the map memory.
  14. +
  15. flags - Flags to use.
+

Unmap Memory

+

This unmaps the CPU memory mapping from the resource. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device Id.
  4. +
  5. hMemory - Memory Id.
  6. +
  7. pLinearAddress - pointer to virtual address.
  8. +
  9. status - Status of the unmap command.
  10. +
  11. flags - Flags to use.
+

Alloc Context DMA 2

+

Allocates a context for DMA. +

The data for this call requires the following components: +

+
  1. hObjectParent - Object parent.
  2. +
  3. hSubDevice - Sub device to allocate on.
  4. +
  5. hObjectNew - Context id.
  6. +
  7. hClass - Type of class.
  8. +
  9. flags - Flags to use.
  10. +
  11. selector - UNKNOWN.
  12. +
  13. hMemory - Handle for Memory resource to DMA map.
  14. +
  15. offset - Offset for the DMA mapping.
  16. +
  17. limit - Limit of the DMA map.
  18. +
  19. status - Status of the allocation.
+

NOTE: Seems to be deprecated. +

+

Map Memory DMA

+

Map a region of memory for DMA access. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device Id.
  4. +
  5. hDma - DMA Id.
  6. +
  7. hMemory - Memory Id.
  8. +
  9. offset - Offset of the region.
  10. +
  11. limit - Limit of the region.
  12. +
  13. flags - flags to use.
  14. +
  15. dmaOffset - Offset of the mapping.
  16. +
  17. status - Status of the map Memory DMA.
+

Un-map Memory DMA

+

Unmaps a region of memory for DMA access. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hDevice - Device Id.
  4. +
  5. hDma - DMA handle.
  6. +
  7. hMemory - Memory handle.
  8. +
  9. flags - Flags to use.
  10. +
  11. dmaOffset - DMA Offset to unmap.
  12. +
  13. status - Status of the unmap Memory DMA.
+

Bind Context DMA

+

Binds a context for DMA interaction to a channel. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hChannel - Channel Id.
  4. +
  5. hCtxDma - Context for DMA Id.
  6. +
  7. status - Status of the bind context DMA.
+

NOTE: Seems to be deprecated. +

+

Share

+

Sharing of a resource between multiple clients. +

TODO: Understand this sharing more. +

The data for this call requires the following components: +

+
  1. hClient - Client Id.
  2. +
  3. hObject - Resource Id.
  4. +
  5. sharePolicy - Share policy.
  6. +
  7. status - Status of sharing.
+

Add VBlank Callback

+

TODO: Figure out what this does. +

NOTE: Seems to be deprecated. +

+

Engines

+

There are engines which internally act as classes inside the OpenRM driver. +

These classes have a few key components that make them unique. +

+

Table of Engines

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Engines +
Engine +Description +
Invalid +Does not exist. +
Software +Abstraction layer for software processes inside the OS Software. +
GPU +Interaction layer with the GPU. +
Falcon +Interaction with the Falcon on the GPU. +
Master Control +Unknown. +
Kernel Master Control +Interaction with the PMC.[1] +
Private Ring +Interaction with a private messaging ring. +
Software Interrupt +Interaction with software interrupts. +
Memory System +Interaction with the memory system. +
Kernel Memory System +Interaction with the kernel memory system. +
Memory Manager +Interaction with the memory management system. +
FBFlcn +Interaction with the FBFlcn subsystem. +
TMR +Interaction with the TMR on specific chips. +
DMA +Interaction with a GPU's DMA access. +
Kernel FIFO +First in First out queue in the GPU driver. +
FIFO +Interaction with a generic FIFO. +
OS +Interaction with the OS. +
BUS +PCI Bus interaction +
Kernel BUS +Internal module BUS. +
INFOROM +Interaction with the INFOROM Region on the GPU. +
PERF +Unknown. +
Kernel PERF +Unknown. +
BIF +Unknown. +
Kernel BIF +Unknown. +
SF +Unknown. +
GPIO +Interaction with GPIO. +
CLK +Clock manager system. +
Kernel Display +Kernel Display system. +
DISP +Display system. +
DPU +Data Processing Unit. +
+ +
+ +
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:RecentChanges&feed=atom b/wiki/open-iov.org/index.php?title=Special:RecentChanges&feed=atom new file mode 100644 index 0000000..4a61452 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:RecentChanges&feed=atom @@ -0,0 +1,10 @@ + + + https://open-iov.org/api.php?hidebots=1&urlversion=1&days=7&limit=50&action=feedrecentchanges&feedformat=atom + Open-IOV - Recent changes [en] + + + 2026-09-11T20:26:47Z + Track the most recent changes to the wiki in this feed. + MediaWiki 1.37.1 + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMD.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMD.html new file mode 100644 index 0000000..ae733a1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMD.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMDGPU.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMDGPU.html new file mode 100644 index 0000000..9f102a0 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=AMDGPU.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Articles.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Articles.html new file mode 100644 index 0000000..2371928 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Articles.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=CPU+Support.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=CPU+Support.html new file mode 100644 index 0000000..41ecaed --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=CPU+Support.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Application+Binary+Interface+(ABI).png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Application+Binary+Interface+(ABI).png.html new file mode 100644 index 0000000..2e130b8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Application+Binary+Interface+(ABI).png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Device+Decomposure+and+Recomposure+via+VFIO.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Device+Decomposure+and+Recomposure+via+VFIO.png.html new file mode 100644 index 0000000..0a4121a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Device+Decomposure+and+Recomposure+via+VFIO.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Echoing+a+UUID+into+the+sysfsdev+API.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Echoing+a+UUID+into+the+sysfsdev+API.png.html new file mode 100644 index 0000000..52f7931 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Echoing+a+UUID+into+the+sysfsdev+API.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+Approches+to+GPU+Virtualization..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+Approches+to+GPU+Virtualization..png.html new file mode 100644 index 0000000..c88c2bc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+Approches+to+GPU+Virtualization..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+i915+vGPU+Scheduling.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+i915+vGPU+Scheduling.png.html new file mode 100644 index 0000000..19961a5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+0-+i915+vGPU+Scheduling.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Firmware+status+information+for+an+Intel+DG2+device..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Firmware+status+information+for+an+Intel+DG2+device..png.html new file mode 100644 index 0000000..605ecc4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Firmware+status+information+for+an+Intel+DG2+device..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Intel+vGPU+Scheduler.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Intel+vGPU+Scheduler.png.html new file mode 100644 index 0000000..237510a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+2-+Intel+vGPU+Scheduler.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+3-+GPU+BAR+to+Timeshared+Syhededuling+via+Channel+IO.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+3-+GPU+BAR+to+Timeshared+Syhededuling+via+Channel+IO.png.html new file mode 100644 index 0000000..f17dc56 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+3-+GPU+BAR+to+Timeshared+Syhededuling+via+Channel+IO.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+6-+MMU+-+GMMU+IOVA+translation-isolation..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+6-+MMU+-+GMMU+IOVA+translation-isolation..png.html new file mode 100644 index 0000000..83ff958 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+6-+MMU+-+GMMU+IOVA+translation-isolation..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+7-+A+depiction+of+region+overlays+within+a+VFIO+file+descriptor..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+7-+A+depiction+of+region+overlays+within+a+VFIO+file+descriptor..png.html new file mode 100644 index 0000000..ad27e28 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Figure+7-+A+depiction+of+region+overlays+within+a+VFIO+file+descriptor..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Guest+driver+accessing+Mdev+MMIO+space+backed+by+mdev+file+descriptor+triggers+EPT+violation..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Guest+driver+accessing+Mdev+MMIO+space+backed+by+mdev+file+descriptor+triggers+EPT+violation..png.html new file mode 100644 index 0000000..91a47c6 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Guest+driver+accessing+Mdev+MMIO+space+backed+by+mdev+file+descriptor+triggers+EPT+violation..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:I915+Scheduling+Events+and+Requests.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:I915+Scheduling+Events+and+Requests.png.html new file mode 100644 index 0000000..12ba8aa --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:I915+Scheduling+Events+and+Requests.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IOCTL+set+VFIO+container.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IOCTL+set+VFIO+container.png.html new file mode 100644 index 0000000..c7d15d9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IOCTL+set+VFIO+container.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IVSHMEM.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IVSHMEM.png.html new file mode 100644 index 0000000..5c6a429 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:IVSHMEM.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+GVT-g+Capabilities.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+GVT-g+Capabilities.png.html new file mode 100644 index 0000000..37b4b7c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+GVT-g+Capabilities.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+i915+Host+DRM+++VFIO-Mdev..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+i915+Host+DRM+++VFIO-Mdev..png.html new file mode 100644 index 0000000..fbefa47 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Intel+i915+Host+DRM+++VFIO-Mdev..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+GROUP+GET+FD.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+GROUP+GET+FD.png.html new file mode 100644 index 0000000..160d44d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+GROUP+GET+FD.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+IOMMU+MAP-UNMAP+DMA.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+IOMMU+MAP-UNMAP+DMA.png.html new file mode 100644 index 0000000..4df0c43 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioctl-VFIO+IOMMU+MAP-UNMAP+DMA.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioeventfd-and-irqfd.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioeventfd-and-irqfd.png.html new file mode 100644 index 0000000..55d99d9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Ioeventfd-and-irqfd.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVM+services+EPT+violation+and+forwards+to+QEMU+VFIO+PCI+driver..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVM+services+EPT+violation+and+forwards+to+QEMU+VFIO+PCI+driver..png.html new file mode 100644 index 0000000..de184cc --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVM+services+EPT+violation+and+forwards+to+QEMU+VFIO+PCI+driver..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVMFR+Looking+Glass.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVMFR+Looking+Glass.png.html new file mode 100644 index 0000000..de51ebf --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:KVMFR+Looking+Glass.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Mdev-gpu.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Mdev-gpu.png.html new file mode 100644 index 0000000..7c02c70 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Mdev-gpu.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Memory+Regions+Added+by+QEMU.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Memory+Regions+Added+by+QEMU.png.html new file mode 100644 index 0000000..2e067bb --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Memory+Regions+Added+by+QEMU.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:NUMA+Node.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:NUMA+Node.png.html new file mode 100644 index 0000000..2452d1b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:NUMA+Node.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+calls+VFIO+DMA+MAP+via+Memory+listener.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+calls+VFIO+DMA+MAP+via+Memory+listener.png.html new file mode 100644 index 0000000..1682cc2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+calls+VFIO+DMA+MAP+via+Memory+listener.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+convert+request+from+KVM+to+Read-Write+acess+to+Mdev+file+descriptor..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+convert+request+from+KVM+to+Read-Write+acess+to+Mdev+file+descriptor..png.html new file mode 100644 index 0000000..664241b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+convert+request+from+KVM+to+Read-Write+acess+to+Mdev+file+descriptor..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+creates+VFIO-mdev+IOMMU+binding+and+acquires+mdev+file+descriptor..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+creates+VFIO-mdev+IOMMU+binding+and+acquires+mdev+file+descriptor..png.html new file mode 100644 index 0000000..c06513c --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+creates+VFIO-mdev+IOMMU+binding+and+acquires+mdev+file+descriptor..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+gets+region+info+via+VFIO+UAPI+from+vendor+driver+through+vfio-mdev+and+Mediated+CBs.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+gets+region+info+via+VFIO+UAPI+from+vendor+driver+through+vfio-mdev+and+Mediated+CBs.png.html new file mode 100644 index 0000000..2f8e7f9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+gets+region+info+via+VFIO+UAPI+from+vendor+driver+through+vfio-mdev+and+Mediated+CBs.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+presenting+the+VFIO+file+descriptor+into+the+virtual+machine..png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+presenting+the+VFIO+file+descriptor+into+the+virtual+machine..png.html new file mode 100644 index 0000000..3f5ec15 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:QEMU+presenting+the+VFIO+file+descriptor+into+the+virtual+machine..png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV-Diagram.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV-Diagram.png.html new file mode 100644 index 0000000..ed2d9c1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV-Diagram.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV.png.html new file mode 100644 index 0000000..00fc5ae --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:SR-IOV.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-05-06+at+10.46.59+AM.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-05-06+at+10.46.59+AM.png.html new file mode 100644 index 0000000..3c5731d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-05-06+at+10.46.59+AM.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-11-18+at+4.14.32+PM.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-11-18+at+4.14.32+PM.png.html new file mode 100644 index 0000000..11ecc2b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Screen+Shot+2022-11-18+at+4.14.32+PM.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Telescope+LG-Proxy.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Telescope+LG-Proxy.png.html new file mode 100644 index 0000000..c3702a8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Telescope+LG-Proxy.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Type+1+IOMMU+Tracks+VA-GFN.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Type+1+IOMMU+Tracks+VA-GFN.png.html new file mode 100644 index 0000000..5f3b7c4 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Type+1+IOMMU+Tracks+VA-GFN.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO+Diagram.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO+Diagram.png.html new file mode 100644 index 0000000..9a392ae --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO+Diagram.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO-Mdev+Diagram.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO-Mdev+Diagram.png.html new file mode 100644 index 0000000..503d4d9 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:VFIO-Mdev+Diagram.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Vfio-pci+driver+bindings.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Vfio-pci+driver+bindings.png.html new file mode 100644 index 0000000..17f5d72 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Vfio-pci+driver+bindings.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Virgl.png.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Virgl.png.html new file mode 100644 index 0000000..438de7d --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=File:Virgl.png.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Driver+Internals.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Driver+Internals.html new file mode 100644 index 0000000..8145490 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Driver+Internals.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Firmware.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Firmware.html new file mode 100644 index 0000000..96e4ee8 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Firmware.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Software+Bill+Of+Materials+(SBOM).html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Software+Bill+Of+Materials+(SBOM).html new file mode 100644 index 0000000..e97f545 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Software+Bill+Of+Materials+(SBOM).html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Support.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Support.html new file mode 100644 index 0000000..e4495ee --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=GPU+Support.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Glossary.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Glossary.html new file mode 100644 index 0000000..d3bb838 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Glossary.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Hypervisor+Support.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Hypervisor+Support.html new file mode 100644 index 0000000..5c963d6 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Hypervisor+Support.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel+SR-IOV+APIs&returntoquery=redirect=no.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel+SR-IOV+APIs&returntoquery=redirect=no.html new file mode 100644 index 0000000..ff32544 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel+SR-IOV+APIs&returntoquery=redirect=no.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel.html new file mode 100644 index 0000000..d1586f2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Intel.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introduction.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introduction.html new file mode 100644 index 0000000..653b4ef --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introduction.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introductory+Concepts+&+Definitions&returntoquery=redirect=no.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introductory+Concepts+&+Definitions&returntoquery=redirect=no.html new file mode 100644 index 0000000..19db7bd --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Introductory+Concepts+&+Definitions&returntoquery=redirect=no.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=LIME+Is+Mediated+Emulation.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=LIME+Is+Mediated+Emulation.html new file mode 100644 index 0000000..fc66b48 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=LIME+Is+Mediated+Emulation.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Looking+Glass+KVMFR.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Looking+Glass+KVMFR.html new file mode 100644 index 0000000..23d1d91 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Looking+Glass+KVMFR.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Main+Page.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Main+Page.html new file mode 100644 index 0000000..325b860 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Main+Page.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mdev-GPU.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mdev-GPU.html new file mode 100644 index 0000000..0225198 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mdev-GPU.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mediated+Device+Internals&returntoquery=redirect=no.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mediated+Device+Internals&returntoquery=redirect=no.html new file mode 100644 index 0000000..aa0946b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Mediated+Device+Internals&returntoquery=redirect=no.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Merged+Drivers.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Merged+Drivers.html new file mode 100644 index 0000000..c7594ea --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Merged+Drivers.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Open-IOV:About.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Open-IOV:About.html new file mode 100644 index 0000000..bd1ea2e --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Open-IOV:About.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=OpenRM.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=OpenRM.html new file mode 100644 index 0000000..f880dd5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=OpenRM.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Talk:Mdev-GPU.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Talk:Mdev-GPU.html new file mode 100644 index 0000000..97cefee --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Talk:Mdev-GPU.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=VGPU+Unlock.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=VGPU+Unlock.html new file mode 100644 index 0000000..cd05ab2 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=VGPU+Unlock.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+I%2FO+Internals.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+I%2FO+Internals.html new file mode 100644 index 0000000..e440c3a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+I%2FO+Internals.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+IO+Internals&returntoquery=redirect=no.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+IO+Internals&returntoquery=redirect=no.html new file mode 100644 index 0000000..3a6fc62 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtual+IO+Internals&returntoquery=redirect=no.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtualization+Fundamentals.html b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtualization+Fundamentals.html new file mode 100644 index 0000000..21b4fe5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Special:UserLogin&returnto=Virtualization+Fundamentals.html @@ -0,0 +1,199 @@ + + + + +Log in - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Log in

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+
+
+
 
+
+
+
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ +
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=edit.html b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=edit.html new file mode 100644 index 0000000..bc73682 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for Talk:Mdev-GPU - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Talk:Mdev-GPU

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Talk:Mdev-GPU.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=history.html b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=history.html new file mode 100644 index 0000000..6681277 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "Talk:Mdev-GPU" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Talk:Mdev-GPU"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=info.html b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=info.html new file mode 100644 index 0000000..e9985c1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&action=info.html @@ -0,0 +1,220 @@ + + + + +Information for "Talk:Mdev-GPU" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Talk:Mdev-GPU"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + + +
Display titleTalk:Mdev-GPU
Default sort keyMdev-GPU
Page length (in bytes)53
NamespaceTalk
Page ID86
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
Number of subpages of this page0 (0 redirects; 0 non-redirects)
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation16:06, 25 July 2022
Latest editorArthur (talk | contribs)
Date of latest edit16:06, 25 July 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&oldid=715.html b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&oldid=715.html new file mode 100644 index 0000000..808e9c5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Talk:Mdev-GPU&oldid=715.html @@ -0,0 +1,213 @@ + + + + +Talk:Mdev-GPU - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Talk:Mdev-GPU

+
+
From Open-IOV
+
Revision as of 16:06, 25 July 2022 by Arthur (talk | contribs) (Created page with "We can use this thread to talk about how things work.")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

We can use this thread to talk about how things work. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=User:Arthur&action=edit&redlink=1.html b/wiki/open-iov.org/index.php?title=User:Arthur&action=edit&redlink=1.html new file mode 100644 index 0000000..65f9327 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=User:Arthur&action=edit&redlink=1.html @@ -0,0 +1,191 @@ + + + + +User:Arthur - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

User:Arthur

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

There is currently no text in this page. +You can search for this page title in other pages, or search the related logs, but you do not have permission to create this page. +

+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=User_talk:Arthur&action=edit&redlink=1.html b/wiki/open-iov.org/index.php?title=User_talk:Arthur&action=edit&redlink=1.html new file mode 100644 index 0000000..f49cbce --- /dev/null +++ b/wiki/open-iov.org/index.php?title=User_talk:Arthur&action=edit&redlink=1.html @@ -0,0 +1,191 @@ + + + + +User talk:Arthur - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

User talk:Arthur

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +
+

There is currently no text in this page. +You can search for this page title in other pages, or search the related logs, but you do not have permission to create this page. +

+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=edit.html b/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=edit.html new file mode 100644 index 0000000..3718f11 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=edit.html @@ -0,0 +1,202 @@ + + + + +View source for VGPU Unlock - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for VGPU Unlock

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to VGPU Unlock.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=history.html b/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=history.html new file mode 100644 index 0000000..7af0a1f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "VGPU Unlock" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "VGPU Unlock"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=info.html b/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=info.html new file mode 100644 index 0000000..6d2eef1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=VGPU_Unlock&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "VGPU Unlock" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "VGPU Unlock"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleVGPU Unlock
Default sort keyVGPU Unlock
Page length (in bytes)560
Page ID38
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorKrutav (talk | contribs)
Date of page creation20:47, 14 March 2022
Latest editorKrutav (talk | contribs)
Date of latest edit20:47, 14 March 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=VGPU_Unlock&oldid=145.html b/wiki/open-iov.org/index.php?title=VGPU_Unlock&oldid=145.html new file mode 100644 index 0000000..7a4924f --- /dev/null +++ b/wiki/open-iov.org/index.php?title=VGPU_Unlock&oldid=145.html @@ -0,0 +1,216 @@ + + + + +VGPU Unlock - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

VGPU Unlock

+
+
From Open-IOV
+
Revision as of 20:47, 14 March 2022 by Krutav (talk | contribs) (Add page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

vGPU_Unlock is a project created by Jonathan Johansson, available on GitHub. +

The project is designed to allow Nvidia's enterprise GPU virtualization technology to run on consumer Nvidia graphics cards (ex: GeForce GTX series). +

Since its inception, there have been several forks of the project that are more up to date and more performant (ex: Rust version). +

Documentation for the original project is available here. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=edit.html b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=edit.html new file mode 100644 index 0000000..0430450 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=edit.html @@ -0,0 +1,818 @@ + + + + +View source for Virtual I/O Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Virtual I/O Internals

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Virtual I/O Internals.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=history.html b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=history.html new file mode 100644 index 0000000..ed0dfb5 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=history.html @@ -0,0 +1,256 @@ + + + + +Revision history of "Virtual I/O Internals" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Virtual I/O Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500)
+ + + +
+
+
+
(newest | oldest) View (newer 50 | ) (20 | 50 | 100 | 250 | 500) +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=info.html b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=info.html new file mode 100644 index 0000000..17dfb2b --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Virtual I/O Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Virtual I/O Internals"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleVirtual I/O Internals
Default sort keyVirtual I/O Internals
Page length (in bytes)45,293
Page ID42
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page2
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation21:13, 16 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit17:54, 19 June 2023
Total number of edits322
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&oldid=23792.html b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&oldid=23792.html new file mode 100644 index 0000000..7a3d278 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_I%2FO_Internals&oldid=23792.html @@ -0,0 +1,1014 @@ + + + + +Virtual I/O Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtual I/O Internals

+
+
From Open-IOV
+
Revision as of 17:54, 19 June 2023 by Arthur (talk | contribs) (→‎References (Talks & Reading Material))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

The following document details the internals of a VFIO (Virtual Function I/O) driven Shared I/O Device.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+

This article places emphasis on the Virtual GPU (vGPU) use case however these concepts apply generically to virtualization of I/O devices (TPUs, NICs, storage peripherals, ect..). +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comparison of Assistance Modes +
Mdev Mode +SR-IOV Mode +SIOV Mode +
No hardware assistance needed. +Hardware assistance needed. +Hardware assistance needed. +
Host requires insight about guest workload. +Host ignorance of guest workload. +Host requires insight about guest workload. +
Error reporting. +No guest driver error reporting. +Error reporting. +
In depth dynamic monitoring. +Basic dynamic monitoring. +In depth dynamic monitoring. +
Software defined MMU guest separation. +Firmware defined MMU guest separation. +Firmware defined MMU guest separation. +
Requires deferred instructions to be supported by host software (support libraries). +Guest is ignorant of host supported software such as support libraries. + +
Routing interrupts. +Routing interrupts. +Routing interrupts. +
Device reset. +Device reset. +Device reset. +
Enable/Disable device. +Enable/Disable device. +Enable/Disable device. +
Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +Support for multiple scheduling techniques. +
Single PCI requester ID. +Multiple PCI requester IDs. +Multiple PCI requester IDs. +
+ + +

All Modes

+

This section will cover concepts which apply both to Mdev Mode, SR-IOV Mode & SIOV Mode. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Alex Williamson. +

See references 2, 14, & 22 in the References (Talks & Reading Material) section. +

+

Binding VFIO devices

+
Figure 1: VFIO group nodes are unit of ownership that VFIO uses. See slides from: [2]
+
Figure 2: IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO Group inside the VFIO Container. See slides from: [2]
+
Figure 3: Using interrupts IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP), IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) to map memory and pin pages. See slides from: [2]
+
Figure 4: Using interrupt IOCTL(GROUP2, VFIO_GROUP_GET_FD, "0000:01:00.0") to obtain the VFIO Group file descriptor. See slides from: [2]
+

Figure 1: Binding devices to the vfio-pci driver results in VFIO group nodes. +

Opening the file "/dev/vfio/vfio" creates a VFIO Container. +

Figure 2: The interrupt routine IOCTL(GROUP, VFIO_GROUP_SET_CONTAINER, &CONTAINER) places the VFIO group inside the VFIO container. +

+

Programming the IOMMU

+

When this has been done IOCTL(CONTAINER, VFIO_SET_IOMMU, VFIO_TYPE1_IOMMU) can then be used to set an IOMMU type for the container which places it in a user interactable state. +

Once this IOMMU type state has been set and the VFIO container has been made interactable additional VFIO groups may be added to the container without requiring that the group's IOMMU type be set again as newly added groups automatically inherit the container's IOMMU context. +

+

VFIO Memory Mapped IO

+

Figure 3: Once the VFIO Groups have been placed inside the VFIO container and the IOMMU type has been set the user may then map and unmap which will automatically inserts Memory Mapped IO (MMIO) entries into the IOMMU as well as pin/unpin pages as necessary. This can be accomplished using IOCTL(CONTAINER, VFIO_IOMMU_MAP_DMA, &MAP) for map/pin and IOCTL(CONTAINER, VFIO_IOMMU_UNMAP_DMA, &UNMAP) for unmap/unpin. +

+

Getting the VFIO Group File Descriptor

+

Figure 4: Once the device has been bound to a VFIO driver, set in a VFIO container, the VFIO container has it's IOMMU type set, and a memory map/page pin of the VFIO device has been completed a file descriptor can then be obtained for the device. This file descriptor can be used for interrupts (ioctls), to probe for information about the BAR regions, and configure the IRQs. +

+

VFIO device file descriptor

+

VFIO device file descriptors are divided into regions and each region is mapped into a device resource. Region count and info (file offset, allowable access, ect..) can be discovered through interrupt (IOCTL). Each file descriptor region corresponding to a PCI resource is represented as a file offset. +

In the case of RPC Mode this structure is emulated whereas in SR-IOV Mode the structure is mapped to a real PCI resource. +

+ + + + + + + + + + + + + + + + + +
BAR regions in a VGA PCI device. +
00:00.0 VGA compatible controller +
Region 0 Bar0 (Config Space) starts at offset 0 +
Region 1 Bar1 (MSI - Message Signaled Interrupts) +
Region 2 Bar2 (MSIX) +
Region 3 Bar3 +
Region 4 Bar4 +
Region 5 Bar5 (IO port space) +
Expansion ROM +
+

Below is what the file offsets looks like internally for each BAR region starting from address 0 and growing with the addition of former regions as you progress through the file. +

+ + + + + + + + + + + + + + + +
VFIO representation of PCI BAR regions offsets. +
<- File Offset -> +
0 -> A +A -> (A+B) +(A+B) -> (A+B+C) +(A+B+C) -> (A+B+C+D) +... +
Region 0 (size A) +Region 1 (size B) +Region 2 (size C) +Region 3 (size D) +... +
+

VFIO Interrupts

+

Guests communicate with the host via VFIO Interrupt Requests (IRQs). These are sent via an irqfd (IRQ File Descriptor). Similarly, the host receives these interrupts via eventfd (Event File Descriptor). The resulting data can be returned via a callback. +

+

IRQs

+

Device properties discovered via interrupt (IOCTL). +

+
Get Device Info
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_INFO +
struct vfio_device_info +
+argz + +
flags + +
+VFIO_DEVICE_FLAGS_PCI +
VFIO_DEVICE_FLAGS_PLATFORM +
VFIO_DEVICE_FLAGS_RESET +
num_irqs + +
num_regions + +
+

The IRQ VFIO_DEVICE_GET_INFO can provide information to distinguish between PCI and platform devices as well as the number of regions and IRQs for a particular device. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get Region Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_REGION_INFO +
struct vfio_region_info +
+argz + +
cap_offset + +
flags + +
+VFIO_REGION_INFO_FLAG_CAPS +
VFIO_REGION_INFO_FLAG_MMAP +
VFIO_REGION_INFO_FLAG_READ +
VFIO_REGION_INFO_FLAG_WRITE +
index + +
offset + +
size + +
+

Once the interrupt user knows the number of regions within a VFIO device they can use IRQ VFIO_DEVICE_GET_REGION_INFO to probe each region for additional information. This interrupt will return information such as if it can be read from or written to, if the device supports MMAP, as well as what the offset and size of the region is within the VFIO file descriptor. +

The upstream API can be read here (vfio.h). +

Sample mdev code to service this request can be found here, and here. +

+
Get IRQ Info
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_GET_IRQ_INFO +
struct vfio_irq_info +
+argz + +
count + +
flags + +
+VFIO_IRQ_INFO_AUTOMASKED +
VFIO_IRQ_INFO_EVENTFD +
VFIO_IRQ_INFO_MASKABLE +
VFIO_IRQ_INFO_NORESIZE +
index + +
+

VFIO_DEVICE_GET_IRQ_INFO is used to retrieve information about a device IRQ. +

VFIO_IRQ_INFO_AUTOMASKED is used to mask interrupts when they occur to protect the host. +

The upstream API can be read here (vfio.h) +

Sample mdev code to service this request can be found here, and here. +

+
Set IRQs
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
VFIO_DEVICE_SET_IRQS +
struct vfio_irq_set +
+argz + +
count + +
data[] + +
flags + +
+VFIO_IRQ_SET_ACTION_MASK +
VFIO_IRQ_SET_ACTION_TRIGGER +
VFIO_IRQ_SET_ACTION_UNMASK +
VFIO_IRQ_SET_DATA_BOOL +
VFIO_IRQ_SET_DATA_EVENTFD +
VFIO_IRQ_SET_DATA_NONE +
index + +
start + +
+

VFIO_DEVICE_SET_IRQS is used to setup IRQs. Actions can be configured such as trigger which is when the device triggers an interrupt (IOCTL), masking and unmasking actions can be set. Bool and None data types are used for loopback testing of the device. Start and index may be used to modify subregions. +

The upstream API can be read here (vfio.h). +

+

Device Decomposure/Recomposure

+
Figure 5: Device Decomposure and Recomposure via VFIO.
Figure 5: Device Decomposure and Recomposure via VFIO. See slides from: [2]
+

Figure 5: Virtual Function IO (VFIO) devices are deconstructed in userspace into a set of VFIO primitives (MMIO pages, VFIO/IOMMU Groups, VFIO IRQs, File Descriptors). Recomposure of these devices occurs upon assignment of a Virtual Function (VF) to a QEMU virtual machine. +

+

Memory Management Unit (MMU)

+
Error creating thumbnail: File missing
Figure 6: MMU - GMMU IOVA translation/isolation.
+

Figure 6: This section will touch upon the mechanisms used for enforcement of Host Physical Address (HPA) to Guest Physical Address (GPA) isolation. +

+

MMIO Isolation (Platform MMU)

+

The platform's CPU communicates with the GPU by reading/writing to and from pinned MMIO pages in Random Access Memory (RAM). MMIO pages within the RAM are subject to IO Virtual Address (IOVA) translations by the platform's discrete MMU controller which is programmed by the CPU. These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the platform. +

+

VRAM Isolation (GPU GMMU)

+

The GPU core performs virtualized operations by reading/writing to and from shadow page tables in onboard Video Random Access Memory (VRAM). Shadow pages within the VRAM are subject to IO Virtual Address (IOVA) translations by the GPU's discrete GPU MMU controller (GMMU) which is programmed by the Embedded CPU (GPU co-processor). These IOVA translations serve as a mechanism to enforce HPA to GPA isolation in the context of the virtual GPUs and multi-process isolation in single user environments. +

+

Platform MMIO <-> GPU Shadow Pages

+

In the context of VFIO pinned MMIO pages in RAM act as an interface to communicate with VRAM shadow pages allowing GPU drivers on the platform to send instructions to the GPU. When the GPU or Platform alters memory contained in a shadow page or pinned MMIO page the change is mirrored in the corresponding IO Virtual Address (IOVA). For example if shadow page 0 is changed by the GPU this change is mirrored in MMIO page 0 on the platform (the reverse example also applies). When communications occur between the platform and GPU the information first moves through the MMU/GMMU and is then written to RAM/VRAM. +

+
Figure 7: A depiction of region overlays within a VFIO file descriptor.
Figure 7: A depiction of region overlays within a VFIO file descriptor. See slides from: [2]
+

VFIO Quirks (region traps)

+

Figure 7: Regions of the PCI BAR require emulation (slow path) via emulated traps (known as quirks). These regions are primarily in PCI configuration space. QEMU may overlap a region overlay which when read/written to/from triggers a VM-exit to trap and emulate the region in order that appropriate translations may occur (such as those concerned with IO Virtual Address - IOVA). +

+
Peer-to-Peer DMA Isolation under IOMMU
Figure 8: Peer-to-Peer DMA Isolation under IOMMU. See slides from: [2]
+

Known IOMMU Issues

+

DMA Aliasing +

+
  • Not all devices generate unique IDs.
  • +
  • Not all devices generate IDs they should.
+

DMA Isolation +

+
  • Figure 8: Peer-to-Peer DMA Isolation. In many circumstances IO Virtual Address (IOVA) translations do not occur properly in the context of DMA peering. Transactions that occur through the IOMMU are unaffected.
+
Figure 0: Approches to GPU Virtualization.
Figure 0: Approaches to GPU Virtualization. See slides from: [61]
+

Mdev Mode

+

Mdev Mode (VFIO Mediated Device) is a method of virtualizing I/O devices enabling full API capabilities without the requirement for hardware assistance. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Neo Jia, Kirti Wankhede, Kevin Tian, Yiying Zhang, David Cowperthwaite, Kun Tian, Yaozu Dong, Tina Zhang, Gerd Hoffmann, & Zhi Wang. +

See references 1, 7, 8, 17, 18, 19, 70 in the References (Talks & Reading Material) section. +

+

Mediated Core

+

The mediated device framework made 3 major changes to the VFIO driver. +

+ +

The full list of these changes can be seen in the lists.gnu.org Qemu-devel mailing list archive. +

+

Device Initialization

+

This section will deal with how an Mdev driver is initialized. +

Sample mdev code for device initialization can be found here. +

+

Registering VFIO MDEV as a driver

+

VFIO Mdev must be registered as a driver. This register event occurs between the Mdev Driver Register Interface and the VFIO MDEV interface. +

+

Registering PCIE Device with the Mediated Core

+
Registering the mediated device.
Figure 9: Registering the mediated device. This step may be accomplished via the vendor driver or via GVM/Mdev-GPU for drivers which do not include support for Mdev functionality and/or do not support arbitrary Mdev types.
+

Figure 9: The vendor driver must register with the Mediated Core's Device Register Interface. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Registering Mediated Callbacks (CBs)

+

Figure 9: The vendor driver must now register Mediated Callbacks which it expects to receive from Mdev devices. The example shown uses the GVM Project's Mdev-GPU component to accomplish this step on behalf of the vendor driver. +

+

Creating a Mediated Device via mdev-sysfsdev API

+
Figure 10: Echoing a UUID into the mdev-sysfsdev API. This functionality is included in mdevctl and in . See slides from: [1]
+

Figure 10: The user of an mdev capable device driver may echo values such as a UUID into the mdev-sysfsdev interface to create a unique mediated device. UUIDs must be unique per mdev device within a host. +

+
Figure 10: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor.
Figure 11: QEMU creates VFIO-mdev IOMMU binding and acquires mdev file descriptor. See slides from: [1]
+

QEMU adds VFIO device to IOMMU container-group

+

Figure 11: When starting a QEMU process with a VFIO-mdev attached QEMU calls the VFIO API to add the VFIO device to an IOMMU container/group. QEMU then runs the IOCTL to obtain a file descriptor for the device. +

+

QEMU passes mdev device file descriptor to VM

+
Figure 11: QEMU presenting the VFIO file descriptor into the virtual machine.
Figure 12: QEMU presenting the VFIO file descriptor into the virtual machine. See slides from: [1]
+

Figure 12: Once QEMU has obtained the VFIO file descriptor for the Mdev device via IOCTL it is then QEMU's job to present the file descriptor into the virtual machine so that the mdev may be used by the guest. +

+

Instruction Execution

+
Figure 13: A simple diagram of signalling from host to guest (via irqfd) & guest to host (via ioeventfd) From blog.allenx
+

Figure 13: Mdev Mode moves instruction information across a virtual function (VF) device using Remote Procedure Calls generally by way of software interrupt (IOCTL). Signals to and from the guest and the host GPU driver may be passed over file descriptors such as the Interrupt Request File Descriptor (irqfd) and IO Event File Descriptor (ioeventfd). +The irqfd may be used to signal from the host into the guest whereas the ioeventfd may be used to signal from the guest into the host. Guest GPU instructions which would normally serialize as pRPCs (physical Remote Procedure Calls) are instead serialized from the guest as vRPCs (virtual Remote Procedure Calls) which are executed by the host mediated driver. +

+

IRQ remapping

+

Interrupt Requests (IRQs) must be remapped (trapped for virtualized execution) to protect the host from sensitive instructions which may affect global memory state. +

+

Interrupt Injection

+

-- +

--Researching-- +

-- +

+

Memory Management

+

Mdev memory management is handled by vendor driver software. +

+

Region Passthrough

+

Guests may be presented with emulated memory regions or via passthrough regions or a mixture of the two such as in the case of passthrough regions with BAR 0 configuration space emulation while other regions are passthrough'd. +

+
Emulated Regions
+

Emulated memory regions use indirect emulated communication requiring a VM-exit (slow). These regions are often used for virtual PCI config space such as in this sample code. +

+
Passthrough Regions
+

Passthrough memory regions use direct communication requiring no VM-exit (fast). +

+
Region Access
+
Figure 13: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs
Figure 14: QEMU gets region info via VFIO UAPI from vendor driver through vfio-mdev and Mediated CBs. See slides from: [1]
+

Figure 14: QEMU gets region information via VFIO User API (UAPI) from the vendor driver through VFIO-mdev and Mediated Callbacks. +

+
Error creating thumbnail: File missing
Figure 15: Guest driver accessing Mdev MMIO space backed by mdev file descriptor triggers EPT violation. See slides from: [1]
+

Figure 15: The guest's vendor driver accesses the Mdev MMIO trapped region backed by a mdev file descriptor (fd) which triggers an Extended Page Table (EPT) violation. +

+
Figure 15: KVM services EPT violation and forwards to QEMU VFIO PCI driver.
Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. See slides from: [1]
+

Figure 16: KVM services EPT violation and forwards to QEMU VFIO PCI driver. +

+
Figure 16: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor.
Figure 17: QEMU convert request from KVM to Read/Write acess to Mdev file descriptor. See slides from: [1]
+

Figure 17: QEMU convert request from KVM to R/W access to Mdev file descriptor. +

+

EPT Page Violations

+

Guest Memory Mapped IO (MMIO) trips Extended Page Table (EPT) violations which are trapped by the host MMU. KVM services EPT violations and forwards to QEMU VFIO PCI driver. QEMU then converts the request from KVM to R/W access to the Mdev File Descriptor (FD). Reads and writes are then handled by the host GPU device driver via mediated callbacks (CBs) and VFIO-mdev. +

+

Mediated DMA Translations

+

-- +

--Researching-- +

-- +

Because memory is not statically allocated by the vendor driver under the mediated device framework there is no requirement to make use of traditional VFIO pinned pages (via the vfio-pci module) rather MMIO memory can be mapped at runtime incrementally. As a result non-standard mediated device vfio stub modules may be used. +

Figure 18: Memory regions get added by QEMU. +

+
Memory Regions Added by QEMU
Figure 18: Memory Regions Added by QEMU. See slides from: [1]
+

Figure 19: QEMU calls VFIO_DMA_MAP via Memory listener. (not just guest physical memory but also device memory will be added through this memory listener) +

+
QEMU calls VFIO DMA MAP via Memory listener
Figure 19: QEMU calls VFIO DMA MAP via Memory listener. See slides from: [1]
+
Type 1 IOMMU Tracks VA-GFN
Figure 20: Type 1 IOMMU Tracks <VA, GFN>. See slides from: [1]
+

Figure 20: Type 1 IOMMU tracks <VA, GFN (Guest Frame Number)>. We build a table to list the QEMU VAs and track the their mapping relation to Guest Frame Numbers (GFNs). +

+

Scheduling

+

Scheduling is handled by the host mdev driver. +

+

Kernel API

+

Kernel documentation used for implementing a VFIO Mediated Device may be found at kernel.org. +

+

Sample Code

+

Sample code for various mdev implementations may be found below: +

Mediated Virtual PCI Display Host Device: +

+
  1. mdpy.c
  2. +
  3. mdpy-fb.c
  4. +
  5. mbochs.c.
+

Serial PCI Port-based Mediated Device: +

+
  1. mtty.c.
+
Compilation
+

To compile the kernel modules linked above you should have your distro's equivalent of the build-essential package installed. The included Makefile should provide all that is necessary to successfully compile the kernel modules. You can type the following command to compile the modules from within the directory: +

make +

When the make operation has been completed successfully the directory will now contain .ko files. These files are the binary kernel modules. +

+
Loading Kernel Modules
+

Now that you have compiled the kernel modules you may load them via the insmod command. +

For example to load the mtty.ko module run the following command from within the directory where you built the modules: +

insmod mtty.ko +

+
Unloading Kernel Modules
+

To unload any of the kernel modules you may make use of the rmmod command. +

For example to unload the mtty.ko module run the following command: +

rmmod mtty.ko +

+
Additional Documentation
+

An additional guide explaining how to make use of the mtty.c sample code may be found at line 308 of the kernel.org VFIO Mediated Device documentation. +

+

Mdev Mode Requirements

+

Driver Support. +

Software HPA<->GPA Boundary Enforcement. +

+

SR-IOV Mode

+

SR-IOV Mode (Single Root I/O Virtualization) involves hardware assisted virtualization on I/O peripherals. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Zheng Xiao, Jerry Jiang, & Ken Xue. +

See reference 6 in the References (Talks & Reading Material) section. +

+

Instruction Execution

+

SR-IOV communicates instructions from a virtual function (VF) directly to the PCI BAR. +

+

Memory Management

+

Guests are presenting with passthrough memory regions by the device firmware. +

+

Scheduling

+

Scheduling may be handled by the host mdev driver and/or the device firmware. +

+

SR-IOV Mode Requirements

+

Driver Support. +

Device SR-IOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

SIOV Mode

+

SIOV (Scalable I/O Virtualization) involves the combination of concepts form both SR-IOV Mode and Mdev Mode as well as novel concepts like shared IOMMU aware buffers and offloading of PCI config space VM-exits (slow path) to a discrete controller. +

Revision 1.0 of the SIOV specification can be read on the Open Compute Project website. +

+

Knowledge Resources Used

+

This section is supported by significant contributions in open source by Kevin Tian, Tina Zhang, Xin Zeng, Yi Liu. +

See references 3, 4, 5, 16, 17, 18, 19, 20, 21 in the References (Talks & Reading Material) section. +

+

Memory Management

+

Enhancements to Intel VT-d introduce new 'Scalable Mode' to allow the platform to assign more granular IOMMU allocations to mediated devices (mdev memory management). This change is referred to as an IOMMU Aware Mediated Device. +

+

IOMMU Aware Mediated Device

+

SIOV made several changes to the VFIO driver, Intel IOMMU, and Mediated Device Framework. +

The full list of these changes can be seen in the mailing list archive on lwn.net under (vfio/mdev: IOMMU aware mediated device). +

+

Shared Hardware Workqueues

+

SIOV makes use of Shared Hardware Workqueues which may be accessed by processes or Virtual Machines. +

According to kernel.org: "In order to allow the hardware to distinguish the context for which work is being executed in the hardware by SWQ interface, SIOV uses Process Address Space ID (PASID), which is a 20-bit number defined by the PCIe SIG. PASID value is encoded in all transactions from the device. This allows the IOMMU to track I/O on a per-PASID granularity in addition to using the PCIe Resource Identifier (RID) which is the Bus/Device/Function." +

+

SIOV Mode Requirements

+

Driver Support. +

Device SIOV support. +

Firmware HPA<->GPA Boundary Enforcement. +

+

References (Talks & Reading Material)

+
  1. [2016] vGPU on KVM - A VFIO Based Framework by Neo Jia & Kirti Wankhede - slides
  2. +
  3. [2016] An Introduction to PCI Device Assignment with VFIO by Alex Williamson - slides
  4. +
  5. [2017] Scalable I/O Virtualization by Kevin Tian
  6. +
  7. [2019] Bring a Scalable IOV Capable Device into Linux World by Xin Zeng & Yi Liu - slides
  8. +
  9. Scalable I/O Virtualization Revision 1.0
  10. +
  11. [2018] Live Migration Support for GPU with SRIOV by Zheng Xiao, Jerry Jiang & Ken Xue - slides
  12. +
  13. [2017] Intel GVT-g: From Production to Upstream - Zhi Wang, Intel
  14. +
  15. [2016] Qemu Graphics Update 2016 by Gerd Hoffmann
  16. +
  17. IOCTL
  18. +
  19. eventfd - root/virt/kvm/eventfd.c
  20. +
  21. (kernel diff:: KVM: irqfd)
  22. +
  23. (kernel diff:: KVM: add ioeventfd support)
  24. +
  25. KVM irqfd & ioeventfd
  26. +
  27. VFIO - Virtual Function I/O - root/virt/kvm/vfio.c
  28. +
  29. VFIO Mediated Devices
  30. +
  31. IOMMU Aware Mediated Device
  32. +
  33. Hardware-Assisted Mediated Pass-Through with VFIO by Kevin Tian
  34. +
  35. [2017] Generic Buffer Sharing Mechanism for Mediated Devices by Tina Zhang
  36. +
  37. [2019] Toward a Virtualization World Built on Mediated Pass-Through - Kevin Tian
  38. +
  39. Auxiliary Bus
  40. +
  41. Shared Virtual Addressing
  42. +
  43. vfio.blogspot.com
  44. +
  45. XenGT by Kevin Tian
  46. +
  47. VMWare Academic Publications: GPU Virtualization by Micah Dowty & Jeremy Sugerman
  48. +
  49. PCI SIG I/O Virtualization
  50. +
  51. VMGL by the University of Toronto Computer Science Department
  52. +
  53. Kepler VGX Hypervisor
  54. +
  55. Intel Virtualization Technology for Directed I/O (VT-d): Enhancing Intel platforms for efficient virtualization of I/O devices
  56. +
  57. DMA-Mapping.txt (Dynamic DMA Mapping)
  58. +
  59. KVM MMU Virtualization by Xiao Guangrong
  60. +
  61. OSDEV: PCI
  62. +
  63. Down to the TLP: How PCI express devices talk (Part I)
  64. +
  65. Down to the TLP: How PCI express devices talk (Part II)
  66. +
  67. Intel ACRN: Enabling SR-IOV Virtualization
  68. +
  69. Kernel.org sysfs-bus-pci
  70. +
  71. Linux Kernel Labs: Memory Mapping
  72. +
  73. Inside Windows Page Frame Number (PFN) - Part 1
  74. +
  75. Direct Rendering Infrastructure (DRI)
  76. +
  77. DRI User Guide
  78. +
  79. Linux Kernel Labs: IO Virtualization
  80. +
  81. Gallium3D: Main Page
  82. +
  83. Gallium3D Wiki
  84. +
  85. Gallium3D talk from XDS 2007
  86. +
  87. Memory Management High Level Design (ARCN)
  88. +
  89. Block Architecture Diagrams for Geforce series
  90. +
  91. Block diagrams for 40 series instruction format
  92. +
  93. PCI Configuration Space
  94. +
  95. GPU virtual memory in WDDM 2.0
  96. +
  97. Intel Graphics Programmer's Reference Manuals (PRM)
  98. +
  99. i915: Hardware Contexts (and some bits about batchbuffers)
  100. +
  101. i915: The Global GTT Part 1
  102. +
  103. i915: Aliasing PPGTT Part 2
  104. +
  105. i915: True PPGTT Part 3
  106. +
  107. i915: Future PPGTT Part 4 (Dynamic page table allocations, 64 bit address space, GPU "mirroring", and yeah, something about relocs too)
  108. +
  109. i915: Security of the Intel Graphics Stack - Part 1 - Introduction
  110. +
  111. i915: Security of the Intel Graphics Stack - Part 2 - FW <-> GuC
  112. +
  113. A deep dive into QEMU: PCI slave devices
  114. +
  115. Debugging QEMU Guests with GDB (start & stop, examine state like registers & memory, set breakpoints & watchpoints)
  116. +
  117. IOMMU Introduction
  118. +
  119. Arch Wiki: Intel Graphics
  120. +
  121. An Introduction to Intel Graphics Virtualization Technology (legacy GVT-g) by Zhi Wang
  122. +
  123. Kernel.org: vfio iommu type1: Add support for mediated devices
  124. +
  125. Hardware and Compute Abstraction Layers For Accelerated Computing Using Graphics Hardware and Conventional CPUs
  126. +
  127. More Shadow Walker: The Progression of TLB-Splitting on x86
  128. +
  129. MMU Virtualization Via Intel EPT: Technical Details
  130. +
  131. Alex Williamson Github: VFIO Development (tree next)
  132. +
  133. GPU PMU: performance monitoring with perf event
  134. +
  135. Remote Procedure Call (RPC)
  136. +
  137. Virtual Open Systems: API Remoting
  138. +
  139. A Full GPU Virtualization Solution with Mediated Pass-Through by Yiying Zhang, David Cowperthwaite, Kun Tian, and Yaozu Dong - [Paper] - [Video] - [Slides 1] - [Slides 2]
  140. +
  141. [2014] KvmGT: A Full GPU Virtualization Solution by Jike Song
  142. +
  143. docs.kernel.org: DRM Memory Management
  144. +
  145. docs.kernel.org: PCI Bus Subsystem
  146. +
  147. openglbook.com: What is OpenGL?
  148. +
  149. [2020] Getting pixels on screen: introduction to Kernel Mode Setting (KMS) by Simon Ser - slides
  150. +
  151. Dynamic Mediation for Live Migration VFIO-PCI
  152. +
  153. DRM Management Via CGroups
  154. +
  155. DRM: Add GEM ("graphics execution manager") to i915 driver.
+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=edit.html b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=edit.html new file mode 100644 index 0000000..17220ab --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=edit.html @@ -0,0 +1,196 @@ + + + + +View source for Virtual IO Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Virtual IO Internals

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Virtual IO Internals.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=history.html b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=history.html new file mode 100644 index 0000000..795dc27 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=history.html @@ -0,0 +1,206 @@ + + + + +Revision history of "Virtual IO Internals" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Virtual IO Internals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=info.html b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=info.html new file mode 100644 index 0000000..b3560b1 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&action=info.html @@ -0,0 +1,219 @@ + + + + +Information for "Virtual IO Internals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Virtual IO Internals"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + + +
Display titleVirtual IO Internals
Redirects toVirtual I/O Internals (info)
Default sort keyVirtual IO Internals
Page length (in bytes)35
Page ID81
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation19:40, 18 July 2022
Latest editorArthur (talk | contribs)
Date of latest edit19:40, 18 July 2022
Total number of edits1
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&oldid=686.html b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&oldid=686.html new file mode 100644 index 0000000..de1f114 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&oldid=686.html @@ -0,0 +1,213 @@ + + + + +Virtual IO Internals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtual IO Internals

+
+
From Open-IOV
+
Revision as of 19:40, 18 July 2022 by Arthur (talk | contribs) (Arthur moved page Virtual IO Internals to Virtual I/O Internals over redirect)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

+ Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&redirect=no.html b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&redirect=no.html new file mode 100644 index 0000000..cfd6c46 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtual_IO_Internals&redirect=no.html @@ -0,0 +1,211 @@ + + + + +Virtual IO Internals - Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtual IO Internals

+
+
From Open-IOV
+
Redirect page
+
+ +
+ Jump to navigation + Jump to search + + +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=edit.html b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=edit.html new file mode 100644 index 0000000..1ad5167 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=edit.html @@ -0,0 +1,221 @@ + + + + +View source for Virtualization Fundamentals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

View source for Virtualization Fundamentals

+
+ + +
+ +
+ Jump to navigation + Jump to search +

You do not have permission to edit this page, for the following reason: +

+
+

The action you have requested is limited to users in the group: Administrators. +

+

+

You can view and copy the source of this page. +

Return to Virtualization Fundamentals.

+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=history.html b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=history.html new file mode 100644 index 0000000..1909f90 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=history.html @@ -0,0 +1,215 @@ + + + + +Revision history of "Virtualization Fundamentals" - Open-IOV + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Revision history of "Virtualization Fundamentals"

+
+ + +
+ +
+ Jump to navigation + Jump to search +
+

Diff selection: Mark the radio buttons of the revisions to compare and hit enter or the button at the bottom.
+Legend: (cur) = difference with latest revision, (prev) = difference with preceding revision, m = minor edit. +

+
+ + + +
+
+
+
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=info.html b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=info.html new file mode 100644 index 0000000..097d36a --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&action=info.html @@ -0,0 +1,218 @@ + + + + +Information for "Virtualization Fundamentals" - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+ +
+

Information for "Virtualization Fundamentals"

+
+ +
+
+ +
+ Jump to navigation + Jump to search +
+ +

Basic information

+ + + + + + + + + +
Display titleVirtualization Fundamentals
Default sort keyVirtualization Fundamentals
Page length (in bytes)10,406
Page ID39
Page content languageen - English
Page content modelwikitext
Indexing by robotsAllowed
Number of redirects to this page0
+

Page protection

+ + + +
EditAllow all users (infinite)
MoveAllow all users (infinite)
+View the protection log for this page. +

Edit history

+ + + + + + + + + +
Page creatorArthur (talk | contribs)
Date of page creation14:18, 7 April 2022
Latest editorArthur (talk | contribs)
Date of latest edit00:31, 2 March 2023
Total number of edits9
Total number of distinct authors1
Recent number of edits (within past 90 days)0
Recent number of distinct authors0
+ +
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&oldid=23743.html b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&oldid=23743.html new file mode 100644 index 0000000..b82a559 --- /dev/null +++ b/wiki/open-iov.org/index.php?title=Virtualization_Fundamentals&oldid=23743.html @@ -0,0 +1,248 @@ + + + + +Virtualization Fundamentals - Open-IOV + + + + + + + + + + + + +
+
+
+ +
+
+
+

Virtualization Fundamentals

+
+
From Open-IOV
+
Revision as of 00:31, 2 March 2023 by Arthur (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
+
+ +
+ Jump to navigation + Jump to search +

This following page is intended to index and summarize information related to the fundamentals of virtualization of computer systems.

An absence of critical technical documentation has historically slowed growth and adoption of developer ecosystems for GPU virtualization. +

This CC-BY-4.0 licensed content can either be used with attribution, or used as inspiration for new documentation, created by GPU vendors for public commercial distribution as developer documentation. +

+Where possible, this documentation will clearly label dates and versions of observed-but-not-guaranteed behaviour vs. vendor-documented stable interfaces/behaviour with guarantees of forward or backward compatibility.

+ + +

Popek and Goldberg Virtualization Requirements

+

The Popek and Goldberg virtualization requirements are a set of conditions sufficient for a computer architecture to support system virtualization efficiently. They were introduced by Gerald J. Popek and Robert P. Goldberg in their 1974 article "Formal Requirements for Virtualizable Third Generation Architectures". Even though the requirements are derived under simplifying assumptions, they still represent a convenient way of determining whether a computer architecture supports efficient virtualization and provide guidelines for the design of virtualized computer architectures. +

+

Goldberg Survey of Virtual Machine Research

+

The complete instruction-by-instruction simulation of one computer system on a different system is a well-known computing technique. It is often used for software development when a hardware base is being altered. For example, if a programmer is developing software for some new special purpose (e.g., aerospace) computer X which is under construction and as yet unavailable, he will likely begin by writing a simulator for that computer on some available general-purpose machine G. The simulator will provide a detailed simulation of the special-purpose environment X, including its processor, memory, and I/O devices. Except for possible timing dependencies, programs which run on the “simulated machine X” can later run on the “real machine X” (when it is finally built and checked out) with identical effect. The programs running on X can be arbitrary — including code to exercise simulated I/O devices, move data and instructions anywhere in simulated memory, or execute any instruction of the simulated machine. The simulator provides a layer of software filtering which protects the resources of the machine G from being misused by programs on X. +

+

Microkernels Meet Recursive Virtual Machines

+

This paper describes a novel approach to providing mod- ular and extensible operating system functionality and en- capsulated environments based on a synthesis of micro- kernel and virtual machine concepts. We have developed a software-based virtualizable architecture called Fluke that allows recursive virtual machines (virtual machines running on other virtual machines) to be implemented ef- ficiently by a microkernel running on generic hardware. A complete virtual machine interface is provided at each level; efficiency derives from needing to implement only new functionality at each level. This infrastructure allows common OS functionality, such as process management, demand paging, fault tolerance, and debugging support, to be provided by cleanly modularized, independent, stack- able virtual machine monitors, implemented as user pro- cesses. It can also provide uncommon or unique OS fea- tures, including the above features specialized for particu- lar applications’ needs, virtual machines transparently dis- tributed cross-node, or security monitors that allow arbi- trary untrusted binaries to be executed safely. Our proto- type implementation of this model indicates that it is prac- tical to modularize operating systems this way. Some types of virtual machine layers impose almost no overhead at all, while others impose some overhead (typically 0–35%), but only on certain classes of applications. +

+

A Comparison of Software and Hardware Techniques for x86 Virtualization

+

Until recently, the x86 architecture has not permitted classical trap-and-emulate virtualization. Virtual Machine Monitors for x86, such as VMwareR Workstation and Virtual PC, have instead used binary translation of the guest kernel code. However, both Intel and AMD have now introduced architectural extensions to support classical virtualization. We compare an existing software VMM with a new VMM designed for the emerging hardware support. Surprisingly, the hardware VMM often suffers lower performance than the pure software VMM. To determine why, we study architecture-level events such as page table updates, context switches and I/O, and find their costs vastly different among native, software VMM and hardware VMM execution. We find that the hardware support fails to provide an unambiguous performance advantage for two primary reasons: first, it offers no support for MMU virtualization; second, it fails to co-exist with existing software techniques for MMU virtualization. We look ahead to emerging techniques for addressing this MMU virtualization problem in the context of hardware-assisted virtualization. +

+

Virtualizing I/O Devices on VMware Workstation’s Hosted Virtual Machine Monitor

+

Virtual machines were developed by IBM in the 1960’s to provide concurrent, interactive access to a mainframe computer. Each virtual machine is a replica of the underlying physical machine and users are given the illusion of running directly on the physical machine. Virtual machines also provide benefits like isolation and resource sharing, and the ability to run multiple flavors and configurations of operating systems. VMware tmWorkstation brings such mainframe-class virtual machine technology to PC-based desktop and workstation computers. This paper focuses on VMware Workstation’s approach to virtualizing I/O devices. PCs have a staggering variety of hardware, and are usually pre-installed with an operating system. Instead of replacing the pre-installed OS, VMware Workstation uses it to host a user-level application (VMApp) component, as well as to schedule a privileged virtual machine monitor (VMM) component. The VMM directly provides high-performance CPU virtualization while the VMApp uses the host OS to virtualize I/O devices and shield the VMM from the variety of devices. A crucial question is whether virtualizing devices via such a hosted architecture can meet the performance required of high throughput, low latency devices. To this end, this paper studies the virtualization and performance of an Ethernet adapter on VMware Workstation. Results indicate that with optimizations, VMware Workstation’s hosted virtualization architecture can match native I/O throughput on standard PCs. Although a straightforward hosted implementation is CPU-limited due to virtualization overhead on a 733 MHz PentiumR III system on a 100 Mb/s Ethernet, a series of optimizations targeted at reducing CPU utilization allows the system to match native network throughput. Further optimizations are discussed both within and outside a hosted architecture. +

+

Dynamic binary translation and optimization

+

We describe a VLIW architecture designed specifically as a target for dynamic compilation of an existing instruction set architecture. This design approach o�ers the simplicity and high performance of statically scheduled architectures, achieves compatibility with an established architecture, and makes use of dynamic adaptation. Thus, the original architecture is implemented using dynamic compilation, a process we refer to as DAISY (Dynamically Architected Instruction Set from Yorktown). The dynamic compiler exploits runtime pro�le information to optimize translations so as to extract instruction level parallelism. This work reports different design trade-offs in the DAISY system, and their impact on �nal system performance. The results show high degrees of instruction parallelism with reasonable translation overhead and memory usage. Keywords| dynamic compilation, binary translation, dynamic optimization, just-in-time compilation, adaptive code generation, pro�le-directed feedback, instruction-level parallelism, very long instruction word architectures, virtual machines, instruction set architectures, instruction set layering. +

+

Xen and the Art of Virtualization

+

Numerous systems have been designed which use virtualization to subdivide the ample resources of a modern computer. Some require specialized hardware, or cannot support commodity operating systems. Some target 100% binary compatibility at the expense of performance. Others sacrifice security or functionality for speed. Few offer resource isolation or performance guarantees; most provide only best-effort provisioning, risking denial of service. This paper presents Xen, an x86 virtual machine monitor which allows multiple commodity operating systemsto share conventional hardware in a safe and resource managed fashion, but without sacrificing either performance or functionality. This is achieved by providing an idealized virtual machine abstraction to which operating systems such as Linux, BSD and Windows XP, can be ported with minimal effort. Our design is targeted at hosting up to 100 virtual machine instances simultaneously on a modern server. The virtualization approach taken by Xen is extremely efficient: we allow operating systems such as Linux and Windows XP to be hosted simultaneously for a negligible performance overhead — at most a few percent compared with the unvirtualized case. We considerably outperform competing commercial and freely available solutions in a range of microbenchmarks and system-wide tests. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|filepage|mediawiki.action.view.filepage|skins.vector.styles.legacy&only=styles&skin=vector.css b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|filepage|mediawiki.action.view.filepage|skins.vector.styles.legacy&only=styles&skin=vector.css new file mode 100644 index 0000000..fd2d46b --- /dev/null +++ b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|filepage|mediawiki.action.view.filepage|skins.vector.styles.legacy&only=styles&skin=vector.css @@ -0,0 +1 @@ +.client-nojs #ca-ve-edit,.client-nojs .mw-editsection-divider,.client-nojs .mw-editsection-visualeditor,.ve-not-available #ca-ve-edit,.ve-not-available .mw-editsection-divider,.ve-not-available .mw-editsection-visualeditor{display:none}.client-js .mw-content-ltr .mw-editsection-bracket:first-of-type,.client-js .mw-content-rtl .mw-editsection-bracket:not(:first-of-type){margin-right:0.25em;color:#54595d}.client-js .mw-content-rtl .mw-editsection-bracket:first-of-type,.client-js .mw-content-ltr .mw-editsection-bracket:not(:first-of-type){margin-left:0.25em;color:#54595d}@media print{span.mw-filepage-other-resolutions,#filetoc{display:none}.mw_metadata{background:#fff;margin:1em 0;border:1pt solid #aaa;border-collapse:collapse;font-size:10pt}.mw_metadata caption{padding:5px;font-size:10pt}.mw_metadata th,.mw_metadata td{background:#fff !important;color:#000 !important;border:1pt solid #aaa;padding:0.4em 0.6em}.mw_metadata th{text-align:center}}.mw-filepage-resolutioninfo{font-size:smaller}#filehistory{clear:both}.filehistory th,.filehistory td{vertical-align:top}.filehistory th{text-align:left}.filehistory td.mw-imagepage-filesize,.filehistory th.mw-imagepage-filesize{white-space:nowrap}.filehistory td.filehistory-selected{font-weight:bold}.filehistory a img,#file img:hover{background:url(resources/src/mediawiki.action/images/checker.svg%3Fff513) repeat}#filetoc{text-align:center;border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;font-size:95%;margin-bottom:0.5em;margin-left:0;margin-right:0}#filetoc li{display:inline;list-style-type:none;padding-right:2em}#shared-image-dup,#shared-image-conflict{font-style:italic}.mw_metadata{font-size:0.8em;margin-left:0.5em;margin-bottom:0.5em;border:0;border-collapse:collapse;width:400px}.mw_metadata caption{font-weight:bold}.mw_metadata td,.mw_metadata th{border:1px solid #a2a9b1;padding-left:5px;padding-right:5px}.mw_metadata th{background-color:#f8f9fa;font-weight:normal;text-align:center}.mw_metadata td{background-color:#fcfcfc;padding-top:0.1em;padding-bottom:0.1em}.mw_metadata ul.metadata-langlist{list-style:none;padding-right:5px;padding-left:5px;margin:0}.client-js .mw_metadata.collapsed .mw-metadata-collapsible,.client-js .mw_metadata.collapsed tr.collapsable{display:none}body{margin:0}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}abbr[title]{border-bottom:1px dotted;cursor:help}@supports (text-decoration:underline dotted){abbr[title]{border-bottom:0;text-decoration:underline dotted}}pre,code,tt,kbd,samp{font-family:monospace,monospace}sub,sup{line-height:1}img{border:0}button,input,optgroup,select,textarea{margin:0}button::-moz-focus-inner,[type='button']::-moz-focus-inner,[type='reset']::-moz-focus-inner,[type='submit']::-moz-focus-inner{border-style:none;padding:0}legend{color:inherit;padding:0}.messagebox,.errorbox,.warningbox,.successbox{color:#000;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:16px;border:1px solid;padding:12px 24px;word-wrap:break-word;overflow-wrap:break-word;overflow:hidden}.messagebox :only-child,.errorbox :only-child,.warningbox :only-child,.successbox :only-child{margin:0}.messagebox h2,.errorbox h2,.warningbox h2,.successbox h2{color:inherit;display:inline;margin:0 0.5em 0 0;border:0;font-size:1em;font-weight:bold}.messagebox .mw-logevent-loglines li,.errorbox .mw-logevent-loglines li,.warningbox .mw-logevent-loglines li,.successbox .mw-logevent-loglines li{font-size:90%}.messagebox{background-color:#eaecf0;border-color:#a2a9b1}.errorbox{background-color:#fee7e6;border-color:#d33}.warningbox{background-color:#fef6e7;border-color:#fc3}.successbox{background-color:#d5fdf4;border-color:#14866d}.toctogglecheckbox:checked ~ ul{display:none}@media screen{html,body{height:100%}:focus{outline-color:#3366cc}html{font-size:100%}html,body{font-family:sans-serif}ul{list-style-image:url(skins/Vector/resources/common/images/bullet-icon.svg%3Fd4515)}pre,.mw-code{line-height:1.3}.mw-jump-link:not(:focus){display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}.mw-editsection,.mw-editsection-like{font-family:sans-serif}.mw-body h1,.mw-body-content h1,.mw-body-content h2{margin-bottom:0.25em;padding:0;font-family:'Linux Libertine','Georgia','Times',serif;line-height:1.3}.mw-body h1:lang(ja),.mw-body-content h1:lang(ja),.mw-body-content h2:lang(ja),.mw-body h1:lang(he),.mw-body-content h1:lang(he),.mw-body-content h2:lang(he),.mw-body h1:lang(ko),.mw-body-content h1:lang(ko),.mw-body-content h2:lang(ko){font-family:sans-serif}.mw-body h1:lang(my),.mw-body-content h1:lang(my),.mw-body-content h2:lang(my){line-height:normal}.mw-body h1,.mw-body-content h1{font-size:1.8em}.vector-body{font-size:0.875em;font-size:calc(1em * 0.875);line-height:1.6}.vector-body h1{margin-top:1em}.vector-body h2{margin-top:1em;font-size:1.5em}.vector-body h3,.vector-body h4,.vector-body h5,.vector-body h6{margin-top:0.3em;margin-bottom:0;padding-bottom:0;line-height:1.6}.vector-body h3{font-size:1.2em}.vector-body h3,.vector-body h4{font-weight:bold}.vector-body h4,.vector-body h5,.vector-body h6{font-size:100%}.vector-body .toc h2{font-family:sans-serif;font-size:100%}.vector-body p{margin:0.5em 0}.vector-body blockquote{border-left:4px solid #eaecf0;padding:8px 32px}.vector-body blockquote > :first-child{margin-top:0}.vector-body blockquote > :last-child{margin-bottom:0}.mw-parser-output .external{background-image:url(skins/Vector/resources/common/images/external-link-ltr-icon.svg%3F48e54);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-body .mw-indicators{font-size:0.875em;line-height:1.6;position:relative}.mw-body .mw-indicator{display:inline-block}#siteNotice{font-size:0.8em}.mw-portlet h3{display:none}.mw-portlet ul{list-style:none none;margin:0}.vector-menu-tabs{background-position:left bottom;float:left;height:2.5em;padding-left:1px}.vector-menu-tabs h3{display:none}.vector-menu-tabs ul{float:left;height:100%;list-style:none none;margin:0;padding:0}.vector-menu-tabs li{background-image:url(skins/Vector/resources/common/images/tab-normal-fade.png%3F1cc52);background-image:linear-gradient(to top,#77c1f6 0,#e8f2f8 1px,#ffffff 100%);background-position:left bottom;background-repeat:repeat-x;float:left;display:block;height:100%;margin:0;padding:0;line-height:1.125em;white-space:nowrap}.vector-menu-tabs li a{background-position:right bottom;color:#0645ad;-moz-box-sizing:border-box;box-sizing:border-box;display:block;float:left;height:3.07692308em;position:relative;padding-top:1.25em;padding-left:8px;padding-right:8px;font-size:0.8125em;cursor:pointer}.vector-menu-tabs .new a,.vector-menu-tabs .new a:visited{color:#dd3333}.vector-menu-tabs .selected{background:#ffffff}.vector-menu-tabs .selected a,.vector-menu-tabs .selected a:visited{color:#202122;text-decoration:none}.vector-menu-tabs .icon a{background-position:right bottom;background-repeat:no-repeat}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.vector-menu-tabs .mw-watchlink.icon a{width:2.15384615em;height:0;padding:3.07692308em 0 0 0;overflow:hidden}.vector-menu-tabs .mw-watchlink.icon a:before{background-repeat:no-repeat;background-position:50% 50%;content:'';display:block;position:absolute;top:1.07692308em;left:0.38461538em;width:1.23076923em;height:1.23076923em}.vector-menu-tabs #ca-unwatch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon.svg%3Fc5368)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon.svg%3F195f5)}.vector-menu-tabs #ca-watch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon.svg%3F6ab6f)}.vector-menu-tabs #ca-unwatch.icon a:hover:before,.vector-menu-tabs #ca-unwatch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon-hl.svg%3F5e652)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:hover:before,.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg%3Ff3db6)}.vector-menu-tabs #ca-watch.icon a:hover:before,.vector-menu-tabs #ca-watch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon-hl.svg%3F9bf90)}.vector-menu-tabs #ca-unwatch.icon .loading:before,.vector-menu-tabs #ca-watch.icon .loading:before{-webkit-animation:rotate 700ms infinite linear;animation:rotate 700ms infinite linear;outline:0;cursor:default;pointer-events:none;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.vector-menu-dropdown{direction:ltr;float:left;cursor:pointer;position:relative;line-height:1.125em}.vector-menu-dropdown h3{color:#54595d;position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box}.vector-menu-dropdown h3:after{content:'';background-image:url(skins/Vector/resources/common/images/arrow-down.svg%3F9426f);background-position:100% 50%;background-repeat:no-repeat;position:absolute;top:0.76923077em;right:8px;bottom:0;width:1.23076923em;opacity:0.84}.vector-menu-dropdown h3:hover,.vector-menu-dropdown h3:focus{color:#202122}.vector-menu-dropdown h3:hover:after,.vector-menu-dropdown h3:focus:after{opacity:1}.vector-menu-dropdown .vector-menu-content{background-color:#ffffff;list-style:none none;min-width:100%;position:absolute;top:2.5em;left:-1px;margin:0;border:1px solid #a2a9b1;border-top-width:0;padding:0;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:left;opacity:0;visibility:hidden;-webkit-transition:opacity 100ms;transition:opacity 100ms;z-index:3}.vector-menu-dropdown .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox-collapsed{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;display:none}.vector-menu-dropdown .vector-menu-checkbox:checked + .vector-menu-heading .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox:not(:checked) + .vector-menu-heading .vector-menu-checkbox-collapsed{display:inline}.vector-menu-dropdown .vector-menu-checkbox:checked ~ .vector-menu-content{opacity:1;visibility:visible}.vector-menu-dropdown ul{list-style:none}.vector-menu-dropdown li{padding:0;margin:0;text-align:left;line-height:1em}.vector-menu-dropdown li a{padding:0.625em;color:#0645ad;display:block;white-space:nowrap;cursor:pointer}.vector-menu-dropdown li a span{font-size:0.8125em}.vector-menu-dropdown .selected a,.vector-menu-dropdown .selected a:visited{color:#202122;text-decoration:none}#mw-head .vector-menu-dropdown h3{background-position:right bottom;float:left;height:3.07692308em;margin:0 -1px 0 0;padding-right:1.84615385em}.vector-menu-tabs,.vector-menu-tabs a,#mw-head .vector-menu-dropdown h3{background-image:url(skins/Vector/resources/common/images/tab-separator.png%3F09d4b);background-image:linear-gradient(to bottom,rgba(167,215,249,0) 0,#a7d7f9 100%);background-repeat:no-repeat;background-size:1px 100%}.vector-menu-checkbox{cursor:pointer;position:absolute;top:0;left:0;z-index:1;opacity:0;width:100%;height:100%;margin:0;padding:0;display:none}:not(:checked) > .vector-menu-checkbox{display:block}.mw-portlet-variants h3,.mw-portlet-cactions h3,.vector-menu-dropdown-noicon h3{padding-top:1.25em;padding-left:8px;padding-right:1.84615385em;font-size:0.8125em;font-weight:normal}.mw-portlet-variants .vector-menu-checkbox:focus + h3,.mw-portlet-cactions .vector-menu-checkbox:focus + h3,.vector-menu-dropdown-noicon .vector-menu-checkbox:focus + h3{outline:dotted 1px;outline:auto -webkit-focus-ring-color}.vector-menu-portal{margin:0 0.6em 0 0.7em;padding:0.25em 0;direction:ltr}.vector-menu-portal h3{display:block;background-image:url(skins/Vector/resources/common/images/portal-separator.png%3F4ab04);background-image:linear-gradient(to right,rgba(200,204,209,0) 0,#c8ccd1 33%,#c8ccd1 66%,rgba(200,204,209,0) 100%);background-position:center bottom;background-repeat:no-repeat;background-size:100% 1px;color:#54595d;margin:0.5em 0 0 0.66666667em;border:0;padding:0.25em 0;font-size:0.75em;font-weight:normal;cursor:default}.vector-menu-portal .vector-menu-content{margin-left:0.5em;padding-top:0}.vector-menu-portal .vector-menu-content ul{list-style:none none;margin:0;padding-top:0.3em}.vector-menu-portal .vector-menu-content li{margin:0;padding:0.25em 0;font-size:0.75em;line-height:1.125em;word-wrap:break-word}.vector-menu-portal .vector-menu-content li a{color:#0645ad}.vector-menu-portal .vector-menu-content li a:visited{color:#0b0080}#p-search h3{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}#simpleSearch{position:relative;height:100%}#searchInput{background-color:rgba(255,255,255,0.5);color:#000000;width:100%;height:2.15384615em;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #a2a9b1;border-radius:2px;padding:5px 2.15384615em 5px 0.4em;box-shadow:inset 0 0 0 1px transparent;font-family:inherit;font-size:0.8125em;direction:ltr;-webkit-transition:border-color 250ms,box-shadow 250ms;transition:border-color 250ms,box-shadow 250ms;-webkit-appearance:none;-moz-appearance:textfield}#simpleSearch:hover #searchInput{border-color:#72777d}#searchInput:focus,#simpleSearch:hover #searchInput:focus{outline:0;border-color:#3366cc;box-shadow:inset 0 0 0 1px #3366cc}#searchInput::-webkit-input-placeholder{color:#72777d;opacity:1}#searchInput:-ms-input-placeholder{color:#72777d;opacity:1}#searchInput::-moz-placeholder{color:#72777d;opacity:1}#searchInput::placeholder{color:#72777d;opacity:1}#searchInput::-webkit-search-decoration,#searchInput::-webkit-search-cancel-button,#searchInput::-webkit-search-results-button,#searchInput::-webkit-search-results-decoration{display:none}#searchButton,#mw-searchButton{background-color:transparent;position:absolute;top:1px;bottom:1px;right:1px;min-width:28px;width:2.15384615em;border:0;padding:0;cursor:pointer;font-size:0.8125em;direction:ltr;text-indent:-99999px;white-space:nowrap;overflow:hidden;z-index:1}#searchButton{background:no-repeat center / 1.23076923em url(skins/Vector/resources/common/images/search.svg%3Fbbf78);opacity:0.67}.search-toggle{display:block;float:right}.vector-search-box-collapses > div{display:none}#p-logo{width:10em;height:160px;margin-bottom:1em}#p-logo a{background-position:center center;background-repeat:no-repeat;display:block;width:10em;height:160px;text-decoration:none}.mw-footer{direction:ltr}.mw-footer ul{list-style:none none;margin:0;padding:0}.mw-footer li{color:#202122;margin:0;padding:0.5em 0;font-size:0.75em}#footer-icons{float:right}#footer-icons li{float:left;margin-left:0.5em;line-height:2;text-align:right}#footer-info li{line-height:1.4}#footer-places li{float:left;margin-right:1em;line-height:2}}@media screen and (min-width:1000px){.search-toggle{display:none}}@media screen and (min-width:1000px){.vector-search-box-collapses > div{display:block}}@media print{.toc,body{padding:10px;font-family:'Linux Libertine','Georgia','Times',serif}.printfooter,.mw-footer,.thumb,table,ol,dl,ul,h3,h4,h5,h6{font-family:sans-serif}img{font-family:'Linux Libertine','Georgia','Times',serif}.mw-body a:not(.image){border-bottom:1px solid #aaa}.firstHeading{font-size:25pt;line-height:28pt;margin-bottom:20px;padding-bottom:5px}.firstHeading,h2{overflow:hidden;border-bottom:2px solid #000000}h3,h4,h5,h6{margin:30px 0 0}h2,h3,h4,h5,h6{padding:0;position:relative}h2{font-size:18pt;line-height:24pt;margin-bottom:0.25em}h3{font-size:14pt;line-height:20pt}h4,h5,h6{font-size:12pt;line-height:16pt}p{font-size:12pt;line-height:16pt;margin-top:5px;text-align:justify}p:before{content:'';display:block;width:120pt;overflow:hidden}blockquote{border-left:2px solid #000000;padding-left:20px}ol,ul{margin:10px 0 0 1.6em;padding:0}ol li,ul li{padding:2px 0;font-size:12pt}table ol li,table ul li{font-size:inherit}.toc{page-break-before:avoid;page-break-after:avoid;background:none;border:0;display:table}.toc a{border:0;font-weight:normal}.toc > ul > li{margin-bottom:4px;font-weight:bold}.toc ul{margin:0;list-style:none}.toc ul ul{padding-left:30px}.toc li.toclevel-1 > a{font-size:12pt;font-weight:bold}#mw-navigation,.noprint,.mw-jump-link,.mw-portlet-lang,.toc .tocnumber{display:none}.printfooter{margin-top:10px;border-top:3px solid #000000;padding-top:10px;font-size:10pt;clear:both}.mw-footer{margin-top:12px;border-top:1px solid #eeeeee;padding-top:5px}#footer-info{margin:0;padding:0}#footer-info li{color:#999;list-style:none;display:block;padding-bottom:10px;font-size:10pt}#footer-info li a{color:#999 !important}#footer-info-lastmod{color:#000000;font-size:12pt;font-weight:bold}}@media screen{body{background-color:#f6f6f6;overflow-y:scroll}.mw-body,.parsoid-body{background-color:#ffffff;color:#202122;direction:ltr;padding:1em}#p-personal{position:absolute;top:6px;right:0.75em;z-index:100}#p-personal ul{padding-left:10em}#p-personal li{float:left;margin-left:0.75em;padding-top:0.5em;line-height:1.16666667}.mw-body,#mw-data-after-content{margin-left:10em}.mw-body{margin-top:-1px;border:1px solid #a7d7f9;border-right-width:0}.mw-body .firstHeading{overflow:visible}.mw-indicators{z-index:1}.vector-body{position:relative;z-index:0}#mw-page-base{background-color:#fbfbfb;background-image:linear-gradient(to bottom,#ffffff 50%,#f6f6f6 100%);background-position:bottom left;height:5em}#mw-head-base{margin-top:-5em;margin-left:10em;height:5em}#mw-navigation h2{position:absolute;top:-9999px}#mw-head{position:absolute;top:0;right:0;width:100%}#left-navigation{float:left;margin-left:10em;margin-top:2.5em;margin-bottom:-2.5em}#right-navigation{float:right;margin-top:2.5em}#p-search{float:left;margin-right:0.5em;margin-left:0.5em}#p-search form{margin:0.5em 0 0}#simpleSearch{min-width:5em;width:13.2em;width:20vw;max-width:20em}#mw-panel{position:absolute;top:0;width:10em;left:0}#p-logo + .mw-portlet h3{display:none}.mw-footer{margin-left:10em;margin-top:0;padding:0.75em}.mw-content-ltr{direction:ltr}.mw-content-rtl{direction:rtl}.vector-menu-dropdown:not(.vector-user-menu) li{font-size:0.8125em}.vector-menu-dropdown:not(.vector-user-menu):hover .vector-menu-content{opacity:1;visibility:visible}.vector-menu-checkbox:checked + h3:after{transform:scaleY(-1)}#mw-panel{font-size:inherit}#mw-panel nav:first-child{background-image:none}#mw-panel nav:first-child h3{display:none}#mw-panel nav:first-child .vector-menu-content{margin-left:0.5em}.vector-user-menu-legacy{}.vector-user-menu-legacy li{font-size:0.75em}.vector-user-menu-legacy #pt-anonuserpage,.vector-user-menu-legacy #pt-userpage a{background-position:left 0.33333333em;background-image:url(skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg%3Fb7f58);background-repeat:no-repeat;background-size:1.16666667em 1.16666667em;padding-top:0.5em;padding-left:1.5em}.vector-user-menu-legacy #pt-userpage{padding-top:0}.vector-user-menu-legacy #pt-userpage a{display:inline-block}.vector-user-menu-legacy #pt-anonuserpage{color:#54595d}.vector-user-menu-legacy .vector-menu-content-list{display:flex;flex-wrap:wrap;flex-grow:1;justify-content:flex-end;align-items:baseline}}@media screen and (min-width:982px){.mw-body,#mw-head-base,#left-navigation,#mw-data-after-content,.mw-footer{margin-left:11em}.mw-body{padding:1.25em 1.5em 1.5em 1.5em}.mw-footer{padding:1.25em}#mw-panel{padding-left:0.5em}#p-search{margin-right:1em}#p-personal{right:1em}}@media print{.noprint,.mw-cite-backlink,.mw-redirectedfrom,.patrollink,#column-one,#footer-places,#mw-navigation,#f-poweredbyico,#f-copyrightico,li#about,li#disclaimer,li#mobileview,li#privacy{display:none}#footer{background:#fff;color:#000;margin-top:1em;border-top:1pt solid #aaa;padding-top:5px;direction:ltr}}.mw-wiki-logo{background-image:url(images/open-iov.png%3Fd7807)}@media print{table.floatright,div.floatright,div.tright{float:right;clear:right}table.floatleft,div.floatleft,div.tleft{float:left;clear:left}div.tleft{margin:0.5em 1.4em 1.3em 0}div.tright{margin:0.5em 0 1.3em 1.4em}table.floatright,div.floatright{margin:0 0 0.5em 0.5em;border:0}table.floatleft,div.floatleft{margin:0 0.5em 0.5em 0;border:0}div.thumb{background-color:transparent;width:auto}div.thumb a{border-bottom:0}div.thumbinner{background-color:#fff;border:0;border-radius:2px;padding:5px;font-size:10pt;color:#666;text-align:center;overflow:hidden;min-width:100px}.thumbcaption{text-align:left;line-height:1.4;padding:3px}.thumbborder{border:1pt solid #ddd}.thumb{page-break-inside:avoid}.magnify{display:none}.mw-parser-output a.external{}.mw-parser-output a.external.text:after,.mw-parser-output a.external.autonumber:after{content:' (' attr(href) ')';word-break:break-all;word-wrap:break-word}.mw-parser-output a.external.text[href^='//']:after,.mw-parser-output a.external.autonumber[href^='//']:after{content:' (https:' attr(href) ')'}.wikitable{background:#fff;margin:1em 0;border:1pt solid #aaa;border-collapse:collapse;font-size:10pt;page-break-inside:avoid}.wikitable > caption{padding:5px;font-size:10pt}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{background:#fff !important;color:#000 !important;border:1pt solid #aaa;padding:0.4em 0.6em}.wikitable > tr > th,.wikitable > * > tr > th{text-align:center}table.listing,table.listing td{border:1pt solid #000;border-collapse:collapse}.mw-editsection,.mw-editsection-like,.mw-indicators,#siteNotice,.usermessage{display:none}.printfooter{padding:1em 0}.catlinks ul{display:inline;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.15;margin:0.1em 0;border-left:1pt solid #aaa;padding:0 0.4em}.catlinks li:first-child{border-left:0;padding-left:0.2em}.mw-hidden-catlinks,.catlinks{display:none}.center{text-align:center}a{background:none !important;padding:0 !important}a,a.external,a.new,a.stub{color:inherit !important;text-decoration:inherit !important}dt{font-weight:bold}h1,h2,h3,h4,h5,h6{font-weight:bold;page-break-after:avoid;page-break-before:avoid}p{margin:1em 0;line-height:1.2;orphans:3;widows:3}img,figure{page-break-inside:avoid}img{border:0;vertical-align:middle}pre,.mw-code{background:#fff;color:#000;border:1pt dashed #000;padding:1em;font-size:8pt;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}ul{list-style-type:square}.toctogglecheckbox:checked + .toctitle{display:none}.toc{background-color:#f9f9f9;border:1pt solid #aaa;padding:5px;display:table}.tocnumber,.toctext{display:table-cell}.tocnumber{padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}}@media screen{div.tright,div.floatright,table.floatright{clear:right;float:right}div.tleft,div.floatleft,table.floatleft{float:left;clear:left}.mw-content-ltr .thumbcaption{text-align:left}.mw-content-ltr .magnify{float:right}.mw-content-rtl .thumbcaption{text-align:right}.mw-content-rtl .magnify{float:left}div.floatright,table.floatright{margin:0 0 0.5em 0.5em}div.floatleft,table.floatleft{margin:0 0.5em 0.5em 0}div.thumb{margin-bottom:0.5em;width:auto;background-color:transparent}div.thumbinner{border:1px solid #c8ccd1;padding:3px;background-color:#f8f9fa;font-size:94%;text-align:center;overflow:hidden}.thumbimage{background-color:#ffffff;border:1px solid #c8ccd1}.thumbcaption{border:0;line-height:1.4em;padding:3px;font-size:94%;text-align:left}.magnify{float:right;margin-left:3px}.magnify a{display:block;text-indent:15px;white-space:nowrap;overflow:hidden;width:15px;height:11px;background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.thumbborder{border:1px solid #eaecf0}.mw-content-ltr .magnify{margin-left:3px;margin-right:0}.mw-content-ltr .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e)}.mw-content-rtl .magnify{margin-left:0;margin-right:3px}.mw-content-rtl .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg%3F38fd5)}div.tright{margin:0.5em 0 1.3em 1.4em}div.tleft{margin:0.5em 1.4em 1.3em 0}a.stub{color:#772233}a.new{color:#dd3333}a.mw-selflink{color:inherit;font-weight:bold;text-decoration:inherit}a.mw-selflink:hover{cursor:inherit;text-decoration:inherit}a.mw-selflink:active,a.mw-selflink:visited{color:inherit}a.new:visited{color:#a55858}.mw-parser-output a.extiw,.mw-parser-output a.external{color:#3366bb}.mw-parser-output a.extiw:visited,.mw-parser-output a.external:visited{color:#663366}.mw-parser-output a.extiw:active,.mw-parser-output a.external:active{color:#bb6633}.mw-underline-always a{text-decoration:underline}.mw-underline-never a{text-decoration:none}.plainlinks a.external{background:none !important;padding:0 !important}.mw-parser-output a.external,.link-https{background-image:url(resources/src/mediawiki.skinning/images/external-ltr.svg%3F59558);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='mailto:'],.link-mailto{background-image:url(resources/src/mediawiki.skinning/images/mail.svg%3F8a79c);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='ftp://'],.link-ftp{background-image:url(resources/src/mediawiki.skinning/images/ftp-ltr.svg%3Fc5643);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='irc://'],.mw-parser-output a.external[href^='ircs://'],.link-irc{background-image:url(resources/src/mediawiki.skinning/images/chat-ltr.svg%3Fe0649);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogg'],.mw-parser-output a.external[href$='.OGG'],.mw-parser-output a.external[href$='.mid'],.mw-parser-output a.external[href$='.MID'],.mw-parser-output a.external[href$='.midi'],.mw-parser-output a.external[href$='.MIDI'],.mw-parser-output a.external[href$='.mp3'],.mw-parser-output a.external[href$='.MP3'],.mw-parser-output a.external[href$='.wav'],.mw-parser-output a.external[href$='.WAV'],.mw-parser-output a.external[href$='.wma'],.mw-parser-output a.external[href$='.WMA'],.link-audio{background-image:url(resources/src/mediawiki.skinning/images/audio-ltr.svg%3F74d04);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogm'],.mw-parser-output a.external[href$='.OGM'],.mw-parser-output a.external[href$='.avi'],.mw-parser-output a.external[href$='.AVI'],.mw-parser-output a.external[href$='.mpeg'],.mw-parser-output a.external[href$='.MPEG'],.mw-parser-output a.external[href$='.mpg'],.mw-parser-output a.external[href$='.MPG'],.link-video{background-image:url(resources/src/mediawiki.skinning/images/video.svg%3Fa3758);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.pdf'],.mw-parser-output a.external[href$='.PDF'],.mw-parser-output a.external[href*='.pdf#'],.mw-parser-output a.external[href*='.PDF#'],.mw-parser-output a.external[href*='.pdf?'],.mw-parser-output a.external[href*='.PDF?'],.link-document{background-image:url(resources/src/mediawiki.skinning/images/document-ltr.svg%3F0bf90);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.extiw,.mw-parser-output a.extiw:active{color:#36b}.mw-parser-output a.external{color:#36b}.mw-body-content:after{clear:both;content:'';display:block}.mw-body-content a.external.free{word-wrap:break-word}.mw-body-content .error{font-size:larger;color:#d33}.rtl .mw-parser-output a.external.free,.rtl .mw-parser-output a.external.autonumber{direction:ltr;unicode-bidi:embed}.mw-hide-empty-elt .mw-parser-output .mw-empty-elt{display:none}.wikitable{background-color:#f8f9fa;color:#202122;margin:1em 0;border:1px solid #a2a9b1;border-collapse:collapse}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{border:1px solid #a2a9b1;padding:0.2em 0.4em}.wikitable > tr > th,.wikitable > * > tr > th{background-color:#eaecf0;text-align:center}.wikitable > caption{font-weight:bold}.usermessage{background-color:#fef6e7;border:1px solid #fc3;color:#000;font-weight:bold;margin:2em 0 1em;padding:0.5em 1em;vertical-align:middle}#siteNotice{position:relative;text-align:center;margin:0}#localNotice{margin-bottom:0.9em}#siteSub{display:none}#contentSub,#contentSub2{font-size:84%;line-height:1.2em;margin:0 0 1.4em 1em;color:#54595d;width:auto}span.subpages{display:block}.emptyPortlet{display:none}.printfooter,.client-nojs #t-print{display:none}.mw-indicators{float:right}.mw-editsection{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mw-editsection,.mw-editsection-like{font-size:small;font-weight:normal;margin-left:1em;vertical-align:baseline;line-height:1em}.mw-content-ltr .mw-editsection,.mw-content-rtl .mw-content-ltr .mw-editsection,.mw-content-ltr .mw-editsection-like,.mw-content-rtl .mw-content-ltr .mw-editsection-like{margin-left:1em;margin-right:0}.mw-content-rtl .mw-editsection,.mw-content-ltr .mw-content-rtl .mw-editsection,.mw-content-rtl .mw-editsection-like,.mw-content-ltr .mw-content-rtl .mw-editsection-like{margin-right:1em;margin-left:0}#catlinks{text-align:left}.catlinks{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;margin-top:1em;clear:both}.catlinks ul{display:inline;margin:0;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.25em;border-left:1px solid #a2a9b1;margin:0.125em 0;padding:0 0.5em}.catlinks li:first-child{padding-left:0.25em;border-left:0}.catlinks li a.mw-redirect{font-style:italic}.mw-hidden-cats-hidden,.catlinks-allhidden{display:none}a{text-decoration:none;color:#0645ad;background:none}a:not([href]){cursor:pointer}a:visited{color:#0b0080}a:active{color:#faa700}a:hover,a:focus{text-decoration:underline}a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}img{border:0;vertical-align:middle}hr{height:1px;background-color:#a2a9b1;border:0;margin:0.2em 0}h1,h2,h3,h4,h5,h6{color:#000;margin:0;padding-top:0.5em;padding-bottom:0.17em;overflow:hidden}h1,h2{margin-bottom:0.6em;border-bottom:1px solid #a2a9b1}h3,h4,h5{margin-bottom:0.3em}h1{font-size:188%;font-weight:normal}h2{font-size:150%;font-weight:normal}h3{font-size:128%}h4{font-size:116%}h5{font-size:108%}h6{font-size:100%}p{margin:0.4em 0 0.5em 0}p img{margin:0}ul{margin:0.3em 0 0 1.6em;padding:0}ol{margin:0.3em 0 0 3.2em;padding:0;list-style-image:none}li{margin-bottom:0.1em}dt{font-weight:bold;margin-bottom:0.1em}dl{margin-top:0.2em;margin-bottom:0.5em}dd{margin-left:1.6em;margin-bottom:0.1em}pre,code,tt,kbd,samp,.mw-code{font-family:monospace,monospace}pre,code,.mw-code{background-color:#f8f9fa;color:#000;border:1px solid #eaecf0}code{border-radius:2px;padding:1px 4px}pre,.mw-code{padding:1em;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}table{font-size:100%}fieldset{border:1px solid #2a4b8d;margin:1em 0 1em 0;padding:0 1em 1em}legend{padding:0.5em;font-size:95%}form{border:0;margin:0}textarea{display:block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #c8ccd1;padding:0.1em}.center{width:100%;text-align:center}*.center *{margin-left:auto;margin-right:auto}.small{font-size:94%}table.small{font-size:100%}@counter-style meetei{system:numeric;symbols:'\ABF0' '\ABF1' '\ABF2' '\ABF3' '\ABF4' '\ABF5' '\ABF6' '\ABF7' '\ABF8' '\ABF9';suffix:') '}@counter-style santali{system:numeric;symbols:'\1C50' '\1C51' '\1C52' '\1C53' '\1C54' '\1C55' '\1C56' '\1C57' '\1C58' '\1C59'}ol:lang(azb) li,ol:lang(bcc) li,ol:lang(bgn) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(lrc) li,ol:lang(luz) li,ol:lang(mzn) li{list-style-type:persian}ol:lang(ckb) li,ol:lang(sdh) li{list-style-type:arabic-indic}ol:lang(hi) li,ol:lang(mai) li,ol:lang(mr) li,ol:lang(ne) li{list-style-type:devanagari}ol:lang(as) li,ol:lang(bn) li{list-style-type:bengali}ol:lang(mni) li{list-style-type:meetei}ol:lang(or) li{list-style-type:oriya}ol:lang(sat) li{list-style-type:santali}.mw-content-ltr ul,.mw-content-rtl .mw-content-ltr ul{margin:0.3em 0 0 1.6em;padding:0}.mw-content-rtl ul,.mw-content-ltr .mw-content-rtl ul{margin:0.3em 1.6em 0 0;padding:0}.mw-content-ltr ol,.mw-content-rtl .mw-content-ltr ol{margin:0.3em 0 0 3.2em;padding:0}.mw-content-rtl ol,.mw-content-ltr .mw-content-rtl ol{margin:0.3em 3.2em 0 0;padding:0}.mw-content-ltr dd,.mw-content-rtl .mw-content-ltr dd{margin-left:1.6em;margin-right:0}.mw-content-rtl dd,.mw-content-ltr .mw-content-rtl dd{margin-right:1.6em;margin-left:0}h1:lang(anp),h1:lang(as),h1:lang(bh),h1:lang(bho),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ks),h1:lang(ml),h1:lang(mr),h1:lang(my),h1:lang(mai),h1:lang(ne),h1:lang(new),h1:lang(or),h1:lang(pa),h1:lang(pi),h1:lang(sa),h1:lang(ta),h1:lang(te){line-height:1.6em !important}h2:lang(anp),h3:lang(anp),h4:lang(anp),h5:lang(anp),h6:lang(anp),h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bho),h3:lang(bho),h4:lang(bho),h5:lang(bho),h6:lang(bho),h2:lang(bh),h3:lang(bh),h4:lang(bh),h5:lang(bh),h6:lang(bh),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ks),h3:lang(ks),h4:lang(ks),h5:lang(ks),h6:lang(ks),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(my),h3:lang(my),h4:lang(my),h5:lang(my),h6:lang(my),h2:lang(mai),h3:lang(mai),h4:lang(mai),h5:lang(mai),h6:lang(mai),h2:lang(ne),h3:lang(ne),h4:lang(ne),h5:lang(ne),h6:lang(ne),h2:lang(new),h3:lang(new),h4:lang(new),h5:lang(new),h6:lang(new),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(pi),h3:lang(pi),h4:lang(pi),h5:lang(pi),h6:lang(pi),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te){line-height:1.4em}h2:lang(th){line-height:1.6}.toc,.toccolours{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;font-size:95%}.toc{display:table;padding:7px}.toc h2{display:inline;border:0;padding:0;font-size:100%;font-weight:bold}.toc .toctitle{text-align:center}.toc ul{list-style:none;margin:0.3em 0;padding:0;text-align:left}.toc ul ul{margin:0 0 0 2em}table.toc{border-collapse:collapse}table.toc td{padding:0}.tocnumber,.toctext{display:table-cell;text-decoration:inherit}.tocnumber{color:#202122;padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}.toctogglecheckbox{display:inline !important;position:absolute;opacity:0;z-index:-1}.toctogglespan{font-size:94%}.toctogglespan:before{content:' ['}.toctogglespan:after{content:']'}.toctogglelabel{cursor:pointer;color:#0645ad}.toctogglelabel:hover{text-decoration:underline}.toctogglecheckbox:focus + .toctitle .toctogglelabel{text-decoration:underline;outline:dotted 1px;outline:auto -webkit-focus-ring-color}.toctogglecheckbox:checked + .toctitle .toctogglelabel:after{content:'show'}.toctogglecheckbox:not(:checked) + .toctitle .toctogglelabel:after{content:'hide'}.toc .toctitle{direction:ltr}.mw-content-ltr .toc ul,.mw-content-rtl .mw-content-ltr .toc ul{text-align:left}.mw-content-rtl .toc ul,.mw-content-ltr .mw-content-rtl .toc ul{text-align:right}.mw-content-ltr .toc ul ul,.mw-content-rtl .mw-content-ltr .toc ul ul{margin:0 0 0 2em}.mw-content-rtl .toc ul ul,.mw-content-ltr .mw-content-rtl .toc ul ul{margin:0 2em 0 0}} \ No newline at end of file diff --git a/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|jquery.makeCollapsible.styles|jquery.tablesorter.styles|skins.vector.styles.legacy&only=styles&skin=vector.css b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|jquery.makeCollapsible.styles|jquery.tablesorter.styles|skins.vector.styles.legacy&only=styles&skin=vector.css new file mode 100644 index 0000000..4656250 --- /dev/null +++ b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|jquery.makeCollapsible.styles|jquery.tablesorter.styles|skins.vector.styles.legacy&only=styles&skin=vector.css @@ -0,0 +1 @@ +.client-nojs #ca-ve-edit,.client-nojs .mw-editsection-divider,.client-nojs .mw-editsection-visualeditor,.ve-not-available #ca-ve-edit,.ve-not-available .mw-editsection-divider,.ve-not-available .mw-editsection-visualeditor{display:none}.client-js .mw-content-ltr .mw-editsection-bracket:first-of-type,.client-js .mw-content-rtl .mw-editsection-bracket:not(:first-of-type){margin-right:0.25em;color:#54595d}.client-js .mw-content-rtl .mw-editsection-bracket:first-of-type,.client-js .mw-content-ltr .mw-editsection-bracket:not(:first-of-type){margin-left:0.25em;color:#54595d}.client-js ol.mw-collapsible:before,.client-js ul.mw-collapsible:before,.client-js .mw-collapsible-toggle-li{display:list-item;list-style:none;margin-bottom:0.1em}.client-js ol.mw-made-collapsible:before,.client-js ul.mw-made-collapsible:before{display:none}.client-js ol.mw-collapsible:not(.mw-made-collapsible):before,.client-js ul.mw-collapsible:not(.mw-made-collapsible):before,.client-js table.mw-collapsible:not(.mw-made-collapsible) :first-child tr:first-child th:last-child:before,.client-js table.mw-collapsible:not(.mw-made-collapsible) > caption:first-child:after,.client-js div.mw-collapsible:not(.mw-made-collapsible):before{content:'[Collapse]'}.client-js td.mw-collapsed:not(.mw-made-collapsible):before,.client-js table.mw-collapsed:not(.mw-made-collapsible) :first-child tr:first-child th:last-child:before,.client-js table.mw-collapsed:not(.mw-made-collapsible) > caption:first-child:after,.client-js div.mw-collapsed:not(.mw-made-collapsible):before{content:'[Expand]'}.client-js .mw-collapsible[id^='mw-customcollapsible'] th:before,.client-js .mw-collapsible[id^='mw-customcollapsible']:before{content:none !important}.client-js table.mw-collapsible:not(.mw-made-collapsible) > caption:first-child:after{float:none;display:block}.client-js .mw-collapsed:not(.mw-made-collapsible) > p,.client-js .mw-collapsed:not(.mw-made-collapsible) > table,.client-js .mw-collapsed:not(.mw-made-collapsible) > thead + tbody,.client-js .mw-collapsed:not(.mw-made-collapsible) tr:not(:first-child),.client-js .mw-collapsed:not(.mw-made-collapsible) .mw-collapsible-content{display:none}.mw-collapsible:not(.mw-made-collapsible) th:before,.mw-collapsible:not(.mw-made-collapsible):before,.mw-collapsible-toggle{float:right}.mw-content-ltr .mw-collapsible:not(.mw-made-collapsible) th:before,.mw-content-rtl .mw-content-ltr .mw-collapsible:not(.mw-made-collapsible) th:before,.mw-content-ltr .mw-collapsible:not(.mw-made-collapsible):before,.mw-content-rtl .mw-content-ltr .mw-collapsible:not(.mw-made-collapsible):before,.mw-content-ltr .mw-collapsible-toggle,.mw-content-rtl .mw-content-ltr .mw-collapsible-toggle{float:right}.mw-content-rtl .mw-collapsible:not(.mw-made-collapsible) th:before,.mw-content-ltr .mw-content-rtl .mw-collapsible:not(.mw-made-collapsible) th:before,.mw-content-rtl .mw-collapsible:not(.mw-made-collapsible):before,.mw-content-ltr .mw-content-rtl .mw-collapsible:not(.mw-made-collapsible):before,.mw-content-rtl .mw-collapsible-toggle,.mw-content-ltr .mw-content-rtl .mw-collapsible-toggle{float:left}li .mw-collapsible-toggle,.mw-content-ltr li .mw-collapsible-toggle,.mw-content-rtl li .mw-collapsible-toggle,.mw-content-ltr .mw-content-rtl li .mw-collapsible-toggle,.mw-content-rtl .mw-content-ltr li .mw-collapsible-toggle{float:none}ol.mw-collapsible:not(.mw-made-collapsible):before,ul.mw-collapsible:not(.mw-made-collapsible):before{float:none !important}.client-js .sortable:not(.jquery-tablesorter) > * > tr:first-child > th:not(.unsortable),.jquery-tablesorter th.headerSort{background-image:url(resources/src/jquery.tablesorter.styles/images/sort_both.svg%3F0e440);cursor:pointer;background-repeat:no-repeat;background-position:center right;padding-right:21px}.jquery-tablesorter th.headerSortUp{background-image:url(resources/src/jquery.tablesorter.styles/images/sort_up.svg%3F2ff5c)}.jquery-tablesorter th.headerSortDown{background-image:url(resources/src/jquery.tablesorter.styles/images/sort_down.svg%3F4b69e)}body{margin:0}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}abbr[title]{border-bottom:1px dotted;cursor:help}@supports (text-decoration:underline dotted){abbr[title]{border-bottom:0;text-decoration:underline dotted}}pre,code,tt,kbd,samp{font-family:monospace,monospace}sub,sup{line-height:1}img{border:0}button,input,optgroup,select,textarea{margin:0}button::-moz-focus-inner,[type='button']::-moz-focus-inner,[type='reset']::-moz-focus-inner,[type='submit']::-moz-focus-inner{border-style:none;padding:0}legend{color:inherit;padding:0}.messagebox,.errorbox,.warningbox,.successbox{color:#000;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:16px;border:1px solid;padding:12px 24px;word-wrap:break-word;overflow-wrap:break-word;overflow:hidden}.messagebox :only-child,.errorbox :only-child,.warningbox :only-child,.successbox :only-child{margin:0}.messagebox h2,.errorbox h2,.warningbox h2,.successbox h2{color:inherit;display:inline;margin:0 0.5em 0 0;border:0;font-size:1em;font-weight:bold}.messagebox .mw-logevent-loglines li,.errorbox .mw-logevent-loglines li,.warningbox .mw-logevent-loglines li,.successbox .mw-logevent-loglines li{font-size:90%}.messagebox{background-color:#eaecf0;border-color:#a2a9b1}.errorbox{background-color:#fee7e6;border-color:#d33}.warningbox{background-color:#fef6e7;border-color:#fc3}.successbox{background-color:#d5fdf4;border-color:#14866d}.toctogglecheckbox:checked ~ ul{display:none}@media screen{html,body{height:100%}:focus{outline-color:#3366cc}html{font-size:100%}html,body{font-family:sans-serif}ul{list-style-image:url(skins/Vector/resources/common/images/bullet-icon.svg%3Fd4515)}pre,.mw-code{line-height:1.3}.mw-jump-link:not(:focus){display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}.mw-editsection,.mw-editsection-like{font-family:sans-serif}.mw-body h1,.mw-body-content h1,.mw-body-content h2{margin-bottom:0.25em;padding:0;font-family:'Linux Libertine','Georgia','Times',serif;line-height:1.3}.mw-body h1:lang(ja),.mw-body-content h1:lang(ja),.mw-body-content h2:lang(ja),.mw-body h1:lang(he),.mw-body-content h1:lang(he),.mw-body-content h2:lang(he),.mw-body h1:lang(ko),.mw-body-content h1:lang(ko),.mw-body-content h2:lang(ko){font-family:sans-serif}.mw-body h1:lang(my),.mw-body-content h1:lang(my),.mw-body-content h2:lang(my){line-height:normal}.mw-body h1,.mw-body-content h1{font-size:1.8em}.vector-body{font-size:0.875em;font-size:calc(1em * 0.875);line-height:1.6}.vector-body h1{margin-top:1em}.vector-body h2{margin-top:1em;font-size:1.5em}.vector-body h3,.vector-body h4,.vector-body h5,.vector-body h6{margin-top:0.3em;margin-bottom:0;padding-bottom:0;line-height:1.6}.vector-body h3{font-size:1.2em}.vector-body h3,.vector-body h4{font-weight:bold}.vector-body h4,.vector-body h5,.vector-body h6{font-size:100%}.vector-body .toc h2{font-family:sans-serif;font-size:100%}.vector-body p{margin:0.5em 0}.vector-body blockquote{border-left:4px solid #eaecf0;padding:8px 32px}.vector-body blockquote > :first-child{margin-top:0}.vector-body blockquote > :last-child{margin-bottom:0}.mw-parser-output .external{background-image:url(skins/Vector/resources/common/images/external-link-ltr-icon.svg%3F48e54);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-body .mw-indicators{font-size:0.875em;line-height:1.6;position:relative}.mw-body .mw-indicator{display:inline-block}#siteNotice{font-size:0.8em}.mw-portlet h3{display:none}.mw-portlet ul{list-style:none none;margin:0}.vector-menu-tabs{background-position:left bottom;float:left;height:2.5em;padding-left:1px}.vector-menu-tabs h3{display:none}.vector-menu-tabs ul{float:left;height:100%;list-style:none none;margin:0;padding:0}.vector-menu-tabs li{background-image:url(skins/Vector/resources/common/images/tab-normal-fade.png%3F1cc52);background-image:linear-gradient(to top,#77c1f6 0,#e8f2f8 1px,#ffffff 100%);background-position:left bottom;background-repeat:repeat-x;float:left;display:block;height:100%;margin:0;padding:0;line-height:1.125em;white-space:nowrap}.vector-menu-tabs li a{background-position:right bottom;color:#0645ad;-moz-box-sizing:border-box;box-sizing:border-box;display:block;float:left;height:3.07692308em;position:relative;padding-top:1.25em;padding-left:8px;padding-right:8px;font-size:0.8125em;cursor:pointer}.vector-menu-tabs .new a,.vector-menu-tabs .new a:visited{color:#dd3333}.vector-menu-tabs .selected{background:#ffffff}.vector-menu-tabs .selected a,.vector-menu-tabs .selected a:visited{color:#202122;text-decoration:none}.vector-menu-tabs .icon a{background-position:right bottom;background-repeat:no-repeat}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.vector-menu-tabs .mw-watchlink.icon a{width:2.15384615em;height:0;padding:3.07692308em 0 0 0;overflow:hidden}.vector-menu-tabs .mw-watchlink.icon a:before{background-repeat:no-repeat;background-position:50% 50%;content:'';display:block;position:absolute;top:1.07692308em;left:0.38461538em;width:1.23076923em;height:1.23076923em}.vector-menu-tabs #ca-unwatch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon.svg%3Fc5368)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon.svg%3F195f5)}.vector-menu-tabs #ca-watch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon.svg%3F6ab6f)}.vector-menu-tabs #ca-unwatch.icon a:hover:before,.vector-menu-tabs #ca-unwatch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon-hl.svg%3F5e652)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:hover:before,.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg%3Ff3db6)}.vector-menu-tabs #ca-watch.icon a:hover:before,.vector-menu-tabs #ca-watch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon-hl.svg%3F9bf90)}.vector-menu-tabs #ca-unwatch.icon .loading:before,.vector-menu-tabs #ca-watch.icon .loading:before{-webkit-animation:rotate 700ms infinite linear;animation:rotate 700ms infinite linear;outline:0;cursor:default;pointer-events:none;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.vector-menu-dropdown{direction:ltr;float:left;cursor:pointer;position:relative;line-height:1.125em}.vector-menu-dropdown h3{color:#54595d;position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box}.vector-menu-dropdown h3:after{content:'';background-image:url(skins/Vector/resources/common/images/arrow-down.svg%3F9426f);background-position:100% 50%;background-repeat:no-repeat;position:absolute;top:0.76923077em;right:8px;bottom:0;width:1.23076923em;opacity:0.84}.vector-menu-dropdown h3:hover,.vector-menu-dropdown h3:focus{color:#202122}.vector-menu-dropdown h3:hover:after,.vector-menu-dropdown h3:focus:after{opacity:1}.vector-menu-dropdown .vector-menu-content{background-color:#ffffff;list-style:none none;min-width:100%;position:absolute;top:2.5em;left:-1px;margin:0;border:1px solid #a2a9b1;border-top-width:0;padding:0;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:left;opacity:0;visibility:hidden;-webkit-transition:opacity 100ms;transition:opacity 100ms;z-index:3}.vector-menu-dropdown .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox-collapsed{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;display:none}.vector-menu-dropdown .vector-menu-checkbox:checked + .vector-menu-heading .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox:not(:checked) + .vector-menu-heading .vector-menu-checkbox-collapsed{display:inline}.vector-menu-dropdown .vector-menu-checkbox:checked ~ .vector-menu-content{opacity:1;visibility:visible}.vector-menu-dropdown ul{list-style:none}.vector-menu-dropdown li{padding:0;margin:0;text-align:left;line-height:1em}.vector-menu-dropdown li a{padding:0.625em;color:#0645ad;display:block;white-space:nowrap;cursor:pointer}.vector-menu-dropdown li a span{font-size:0.8125em}.vector-menu-dropdown .selected a,.vector-menu-dropdown .selected a:visited{color:#202122;text-decoration:none}#mw-head .vector-menu-dropdown h3{background-position:right bottom;float:left;height:3.07692308em;margin:0 -1px 0 0;padding-right:1.84615385em}.vector-menu-tabs,.vector-menu-tabs a,#mw-head .vector-menu-dropdown h3{background-image:url(skins/Vector/resources/common/images/tab-separator.png%3F09d4b);background-image:linear-gradient(to bottom,rgba(167,215,249,0) 0,#a7d7f9 100%);background-repeat:no-repeat;background-size:1px 100%}.vector-menu-checkbox{cursor:pointer;position:absolute;top:0;left:0;z-index:1;opacity:0;width:100%;height:100%;margin:0;padding:0;display:none}:not(:checked) > .vector-menu-checkbox{display:block}.mw-portlet-variants h3,.mw-portlet-cactions h3,.vector-menu-dropdown-noicon h3{padding-top:1.25em;padding-left:8px;padding-right:1.84615385em;font-size:0.8125em;font-weight:normal}.mw-portlet-variants .vector-menu-checkbox:focus + h3,.mw-portlet-cactions .vector-menu-checkbox:focus + h3,.vector-menu-dropdown-noicon .vector-menu-checkbox:focus + h3{outline:dotted 1px;outline:auto -webkit-focus-ring-color}.vector-menu-portal{margin:0 0.6em 0 0.7em;padding:0.25em 0;direction:ltr}.vector-menu-portal h3{display:block;background-image:url(skins/Vector/resources/common/images/portal-separator.png%3F4ab04);background-image:linear-gradient(to right,rgba(200,204,209,0) 0,#c8ccd1 33%,#c8ccd1 66%,rgba(200,204,209,0) 100%);background-position:center bottom;background-repeat:no-repeat;background-size:100% 1px;color:#54595d;margin:0.5em 0 0 0.66666667em;border:0;padding:0.25em 0;font-size:0.75em;font-weight:normal;cursor:default}.vector-menu-portal .vector-menu-content{margin-left:0.5em;padding-top:0}.vector-menu-portal .vector-menu-content ul{list-style:none none;margin:0;padding-top:0.3em}.vector-menu-portal .vector-menu-content li{margin:0;padding:0.25em 0;font-size:0.75em;line-height:1.125em;word-wrap:break-word}.vector-menu-portal .vector-menu-content li a{color:#0645ad}.vector-menu-portal .vector-menu-content li a:visited{color:#0b0080}#p-search h3{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}#simpleSearch{position:relative;height:100%}#searchInput{background-color:rgba(255,255,255,0.5);color:#000000;width:100%;height:2.15384615em;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #a2a9b1;border-radius:2px;padding:5px 2.15384615em 5px 0.4em;box-shadow:inset 0 0 0 1px transparent;font-family:inherit;font-size:0.8125em;direction:ltr;-webkit-transition:border-color 250ms,box-shadow 250ms;transition:border-color 250ms,box-shadow 250ms;-webkit-appearance:none;-moz-appearance:textfield}#simpleSearch:hover #searchInput{border-color:#72777d}#searchInput:focus,#simpleSearch:hover #searchInput:focus{outline:0;border-color:#3366cc;box-shadow:inset 0 0 0 1px #3366cc}#searchInput::-webkit-input-placeholder{color:#72777d;opacity:1}#searchInput:-ms-input-placeholder{color:#72777d;opacity:1}#searchInput::-moz-placeholder{color:#72777d;opacity:1}#searchInput::placeholder{color:#72777d;opacity:1}#searchInput::-webkit-search-decoration,#searchInput::-webkit-search-cancel-button,#searchInput::-webkit-search-results-button,#searchInput::-webkit-search-results-decoration{display:none}#searchButton,#mw-searchButton{background-color:transparent;position:absolute;top:1px;bottom:1px;right:1px;min-width:28px;width:2.15384615em;border:0;padding:0;cursor:pointer;font-size:0.8125em;direction:ltr;text-indent:-99999px;white-space:nowrap;overflow:hidden;z-index:1}#searchButton{background:no-repeat center / 1.23076923em url(skins/Vector/resources/common/images/search.svg%3Fbbf78);opacity:0.67}.search-toggle{display:block;float:right}.vector-search-box-collapses > div{display:none}#p-logo{width:10em;height:160px;margin-bottom:1em}#p-logo a{background-position:center center;background-repeat:no-repeat;display:block;width:10em;height:160px;text-decoration:none}.mw-footer{direction:ltr}.mw-footer ul{list-style:none none;margin:0;padding:0}.mw-footer li{color:#202122;margin:0;padding:0.5em 0;font-size:0.75em}#footer-icons{float:right}#footer-icons li{float:left;margin-left:0.5em;line-height:2;text-align:right}#footer-info li{line-height:1.4}#footer-places li{float:left;margin-right:1em;line-height:2}}@media screen and (min-width:1000px){.search-toggle{display:none}}@media screen and (min-width:1000px){.vector-search-box-collapses > div{display:block}}@media print{.toc,body{padding:10px;font-family:'Linux Libertine','Georgia','Times',serif}.printfooter,.mw-footer,.thumb,table,ol,dl,ul,h3,h4,h5,h6{font-family:sans-serif}img{font-family:'Linux Libertine','Georgia','Times',serif}.mw-body a:not(.image){border-bottom:1px solid #aaa}.firstHeading{font-size:25pt;line-height:28pt;margin-bottom:20px;padding-bottom:5px}.firstHeading,h2{overflow:hidden;border-bottom:2px solid #000000}h3,h4,h5,h6{margin:30px 0 0}h2,h3,h4,h5,h6{padding:0;position:relative}h2{font-size:18pt;line-height:24pt;margin-bottom:0.25em}h3{font-size:14pt;line-height:20pt}h4,h5,h6{font-size:12pt;line-height:16pt}p{font-size:12pt;line-height:16pt;margin-top:5px;text-align:justify}p:before{content:'';display:block;width:120pt;overflow:hidden}blockquote{border-left:2px solid #000000;padding-left:20px}ol,ul{margin:10px 0 0 1.6em;padding:0}ol li,ul li{padding:2px 0;font-size:12pt}table ol li,table ul li{font-size:inherit}.toc{page-break-before:avoid;page-break-after:avoid;background:none;border:0;display:table}.toc a{border:0;font-weight:normal}.toc > ul > li{margin-bottom:4px;font-weight:bold}.toc ul{margin:0;list-style:none}.toc ul ul{padding-left:30px}.toc li.toclevel-1 > a{font-size:12pt;font-weight:bold}#mw-navigation,.noprint,.mw-jump-link,.mw-portlet-lang,.toc .tocnumber{display:none}.printfooter{margin-top:10px;border-top:3px solid #000000;padding-top:10px;font-size:10pt;clear:both}.mw-footer{margin-top:12px;border-top:1px solid #eeeeee;padding-top:5px}#footer-info{margin:0;padding:0}#footer-info li{color:#999;list-style:none;display:block;padding-bottom:10px;font-size:10pt}#footer-info li a{color:#999 !important}#footer-info-lastmod{color:#000000;font-size:12pt;font-weight:bold}}@media screen{body{background-color:#f6f6f6;overflow-y:scroll}.mw-body,.parsoid-body{background-color:#ffffff;color:#202122;direction:ltr;padding:1em}#p-personal{position:absolute;top:6px;right:0.75em;z-index:100}#p-personal ul{padding-left:10em}#p-personal li{float:left;margin-left:0.75em;padding-top:0.5em;line-height:1.16666667}.mw-body,#mw-data-after-content{margin-left:10em}.mw-body{margin-top:-1px;border:1px solid #a7d7f9;border-right-width:0}.mw-body .firstHeading{overflow:visible}.mw-indicators{z-index:1}.vector-body{position:relative;z-index:0}#mw-page-base{background-color:#fbfbfb;background-image:linear-gradient(to bottom,#ffffff 50%,#f6f6f6 100%);background-position:bottom left;height:5em}#mw-head-base{margin-top:-5em;margin-left:10em;height:5em}#mw-navigation h2{position:absolute;top:-9999px}#mw-head{position:absolute;top:0;right:0;width:100%}#left-navigation{float:left;margin-left:10em;margin-top:2.5em;margin-bottom:-2.5em}#right-navigation{float:right;margin-top:2.5em}#p-search{float:left;margin-right:0.5em;margin-left:0.5em}#p-search form{margin:0.5em 0 0}#simpleSearch{min-width:5em;width:13.2em;width:20vw;max-width:20em}#mw-panel{position:absolute;top:0;width:10em;left:0}#p-logo + .mw-portlet h3{display:none}.mw-footer{margin-left:10em;margin-top:0;padding:0.75em}.mw-content-ltr{direction:ltr}.mw-content-rtl{direction:rtl}.vector-menu-dropdown:not(.vector-user-menu) li{font-size:0.8125em}.vector-menu-dropdown:not(.vector-user-menu):hover .vector-menu-content{opacity:1;visibility:visible}.vector-menu-checkbox:checked + h3:after{transform:scaleY(-1)}#mw-panel{font-size:inherit}#mw-panel nav:first-child{background-image:none}#mw-panel nav:first-child h3{display:none}#mw-panel nav:first-child .vector-menu-content{margin-left:0.5em}.vector-user-menu-legacy{}.vector-user-menu-legacy li{font-size:0.75em}.vector-user-menu-legacy #pt-anonuserpage,.vector-user-menu-legacy #pt-userpage a{background-position:left 0.33333333em;background-image:url(skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg%3Fb7f58);background-repeat:no-repeat;background-size:1.16666667em 1.16666667em;padding-top:0.5em;padding-left:1.5em}.vector-user-menu-legacy #pt-userpage{padding-top:0}.vector-user-menu-legacy #pt-userpage a{display:inline-block}.vector-user-menu-legacy #pt-anonuserpage{color:#54595d}.vector-user-menu-legacy .vector-menu-content-list{display:flex;flex-wrap:wrap;flex-grow:1;justify-content:flex-end;align-items:baseline}}@media screen and (min-width:982px){.mw-body,#mw-head-base,#left-navigation,#mw-data-after-content,.mw-footer{margin-left:11em}.mw-body{padding:1.25em 1.5em 1.5em 1.5em}.mw-footer{padding:1.25em}#mw-panel{padding-left:0.5em}#p-search{margin-right:1em}#p-personal{right:1em}}@media print{.noprint,.mw-cite-backlink,.mw-redirectedfrom,.patrollink,#column-one,#footer-places,#mw-navigation,#f-poweredbyico,#f-copyrightico,li#about,li#disclaimer,li#mobileview,li#privacy{display:none}#footer{background:#fff;color:#000;margin-top:1em;border-top:1pt solid #aaa;padding-top:5px;direction:ltr}}.mw-wiki-logo{background-image:url(images/open-iov.png%3Fd7807)}@media print{table.floatright,div.floatright,div.tright{float:right;clear:right}table.floatleft,div.floatleft,div.tleft{float:left;clear:left}div.tleft{margin:0.5em 1.4em 1.3em 0}div.tright{margin:0.5em 0 1.3em 1.4em}table.floatright,div.floatright{margin:0 0 0.5em 0.5em;border:0}table.floatleft,div.floatleft{margin:0 0.5em 0.5em 0;border:0}div.thumb{background-color:transparent;width:auto}div.thumb a{border-bottom:0}div.thumbinner{background-color:#fff;border:0;border-radius:2px;padding:5px;font-size:10pt;color:#666;text-align:center;overflow:hidden;min-width:100px}.thumbcaption{text-align:left;line-height:1.4;padding:3px}.thumbborder{border:1pt solid #ddd}.thumb{page-break-inside:avoid}.magnify{display:none}.mw-parser-output a.external{}.mw-parser-output a.external.text:after,.mw-parser-output a.external.autonumber:after{content:' (' attr(href) ')';word-break:break-all;word-wrap:break-word}.mw-parser-output a.external.text[href^='//']:after,.mw-parser-output a.external.autonumber[href^='//']:after{content:' (https:' attr(href) ')'}.wikitable{background:#fff;margin:1em 0;border:1pt solid #aaa;border-collapse:collapse;font-size:10pt;page-break-inside:avoid}.wikitable > caption{padding:5px;font-size:10pt}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{background:#fff !important;color:#000 !important;border:1pt solid #aaa;padding:0.4em 0.6em}.wikitable > tr > th,.wikitable > * > tr > th{text-align:center}table.listing,table.listing td{border:1pt solid #000;border-collapse:collapse}.mw-editsection,.mw-editsection-like,.mw-indicators,#siteNotice,.usermessage{display:none}.printfooter{padding:1em 0}.catlinks ul{display:inline;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.15;margin:0.1em 0;border-left:1pt solid #aaa;padding:0 0.4em}.catlinks li:first-child{border-left:0;padding-left:0.2em}.mw-hidden-catlinks,.catlinks{display:none}.center{text-align:center}a{background:none !important;padding:0 !important}a,a.external,a.new,a.stub{color:inherit !important;text-decoration:inherit !important}dt{font-weight:bold}h1,h2,h3,h4,h5,h6{font-weight:bold;page-break-after:avoid;page-break-before:avoid}p{margin:1em 0;line-height:1.2;orphans:3;widows:3}img,figure{page-break-inside:avoid}img{border:0;vertical-align:middle}pre,.mw-code{background:#fff;color:#000;border:1pt dashed #000;padding:1em;font-size:8pt;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}ul{list-style-type:square}.toctogglecheckbox:checked + .toctitle{display:none}.toc{background-color:#f9f9f9;border:1pt solid #aaa;padding:5px;display:table}.tocnumber,.toctext{display:table-cell}.tocnumber{padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}}@media screen{div.tright,div.floatright,table.floatright{clear:right;float:right}div.tleft,div.floatleft,table.floatleft{float:left;clear:left}.mw-content-ltr .thumbcaption{text-align:left}.mw-content-ltr .magnify{float:right}.mw-content-rtl .thumbcaption{text-align:right}.mw-content-rtl .magnify{float:left}div.floatright,table.floatright{margin:0 0 0.5em 0.5em}div.floatleft,table.floatleft{margin:0 0.5em 0.5em 0}div.thumb{margin-bottom:0.5em;width:auto;background-color:transparent}div.thumbinner{border:1px solid #c8ccd1;padding:3px;background-color:#f8f9fa;font-size:94%;text-align:center;overflow:hidden}.thumbimage{background-color:#ffffff;border:1px solid #c8ccd1}.thumbcaption{border:0;line-height:1.4em;padding:3px;font-size:94%;text-align:left}.magnify{float:right;margin-left:3px}.magnify a{display:block;text-indent:15px;white-space:nowrap;overflow:hidden;width:15px;height:11px;background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.thumbborder{border:1px solid #eaecf0}.mw-content-ltr .magnify{margin-left:3px;margin-right:0}.mw-content-ltr .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e)}.mw-content-rtl .magnify{margin-left:0;margin-right:3px}.mw-content-rtl .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg%3F38fd5)}div.tright{margin:0.5em 0 1.3em 1.4em}div.tleft{margin:0.5em 1.4em 1.3em 0}a.stub{color:#772233}a.new{color:#dd3333}a.mw-selflink{color:inherit;font-weight:bold;text-decoration:inherit}a.mw-selflink:hover{cursor:inherit;text-decoration:inherit}a.mw-selflink:active,a.mw-selflink:visited{color:inherit}a.new:visited{color:#a55858}.mw-parser-output a.extiw,.mw-parser-output a.external{color:#3366bb}.mw-parser-output a.extiw:visited,.mw-parser-output a.external:visited{color:#663366}.mw-parser-output a.extiw:active,.mw-parser-output a.external:active{color:#bb6633}.mw-underline-always a{text-decoration:underline}.mw-underline-never a{text-decoration:none}.plainlinks a.external{background:none !important;padding:0 !important}.mw-parser-output a.external,.link-https{background-image:url(resources/src/mediawiki.skinning/images/external-ltr.svg%3F59558);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='mailto:'],.link-mailto{background-image:url(resources/src/mediawiki.skinning/images/mail.svg%3F8a79c);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='ftp://'],.link-ftp{background-image:url(resources/src/mediawiki.skinning/images/ftp-ltr.svg%3Fc5643);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='irc://'],.mw-parser-output a.external[href^='ircs://'],.link-irc{background-image:url(resources/src/mediawiki.skinning/images/chat-ltr.svg%3Fe0649);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogg'],.mw-parser-output a.external[href$='.OGG'],.mw-parser-output a.external[href$='.mid'],.mw-parser-output a.external[href$='.MID'],.mw-parser-output a.external[href$='.midi'],.mw-parser-output a.external[href$='.MIDI'],.mw-parser-output a.external[href$='.mp3'],.mw-parser-output a.external[href$='.MP3'],.mw-parser-output a.external[href$='.wav'],.mw-parser-output a.external[href$='.WAV'],.mw-parser-output a.external[href$='.wma'],.mw-parser-output a.external[href$='.WMA'],.link-audio{background-image:url(resources/src/mediawiki.skinning/images/audio-ltr.svg%3F74d04);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogm'],.mw-parser-output a.external[href$='.OGM'],.mw-parser-output a.external[href$='.avi'],.mw-parser-output a.external[href$='.AVI'],.mw-parser-output a.external[href$='.mpeg'],.mw-parser-output a.external[href$='.MPEG'],.mw-parser-output a.external[href$='.mpg'],.mw-parser-output a.external[href$='.MPG'],.link-video{background-image:url(resources/src/mediawiki.skinning/images/video.svg%3Fa3758);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.pdf'],.mw-parser-output a.external[href$='.PDF'],.mw-parser-output a.external[href*='.pdf#'],.mw-parser-output a.external[href*='.PDF#'],.mw-parser-output a.external[href*='.pdf?'],.mw-parser-output a.external[href*='.PDF?'],.link-document{background-image:url(resources/src/mediawiki.skinning/images/document-ltr.svg%3F0bf90);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.extiw,.mw-parser-output a.extiw:active{color:#36b}.mw-parser-output a.external{color:#36b}.mw-body-content:after{clear:both;content:'';display:block}.mw-body-content a.external.free{word-wrap:break-word}.mw-body-content .error{font-size:larger;color:#d33}.rtl .mw-parser-output a.external.free,.rtl .mw-parser-output a.external.autonumber{direction:ltr;unicode-bidi:embed}.mw-hide-empty-elt .mw-parser-output .mw-empty-elt{display:none}.wikitable{background-color:#f8f9fa;color:#202122;margin:1em 0;border:1px solid #a2a9b1;border-collapse:collapse}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{border:1px solid #a2a9b1;padding:0.2em 0.4em}.wikitable > tr > th,.wikitable > * > tr > th{background-color:#eaecf0;text-align:center}.wikitable > caption{font-weight:bold}.usermessage{background-color:#fef6e7;border:1px solid #fc3;color:#000;font-weight:bold;margin:2em 0 1em;padding:0.5em 1em;vertical-align:middle}#siteNotice{position:relative;text-align:center;margin:0}#localNotice{margin-bottom:0.9em}#siteSub{display:none}#contentSub,#contentSub2{font-size:84%;line-height:1.2em;margin:0 0 1.4em 1em;color:#54595d;width:auto}span.subpages{display:block}.emptyPortlet{display:none}.printfooter,.client-nojs #t-print{display:none}.mw-indicators{float:right}.mw-editsection{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mw-editsection,.mw-editsection-like{font-size:small;font-weight:normal;margin-left:1em;vertical-align:baseline;line-height:1em}.mw-content-ltr .mw-editsection,.mw-content-rtl .mw-content-ltr .mw-editsection,.mw-content-ltr .mw-editsection-like,.mw-content-rtl .mw-content-ltr .mw-editsection-like{margin-left:1em;margin-right:0}.mw-content-rtl .mw-editsection,.mw-content-ltr .mw-content-rtl .mw-editsection,.mw-content-rtl .mw-editsection-like,.mw-content-ltr .mw-content-rtl .mw-editsection-like{margin-right:1em;margin-left:0}#catlinks{text-align:left}.catlinks{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;margin-top:1em;clear:both}.catlinks ul{display:inline;margin:0;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.25em;border-left:1px solid #a2a9b1;margin:0.125em 0;padding:0 0.5em}.catlinks li:first-child{padding-left:0.25em;border-left:0}.catlinks li a.mw-redirect{font-style:italic}.mw-hidden-cats-hidden,.catlinks-allhidden{display:none}a{text-decoration:none;color:#0645ad;background:none}a:not([href]){cursor:pointer}a:visited{color:#0b0080}a:active{color:#faa700}a:hover,a:focus{text-decoration:underline}a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}img{border:0;vertical-align:middle}hr{height:1px;background-color:#a2a9b1;border:0;margin:0.2em 0}h1,h2,h3,h4,h5,h6{color:#000;margin:0;padding-top:0.5em;padding-bottom:0.17em;overflow:hidden}h1,h2{margin-bottom:0.6em;border-bottom:1px solid #a2a9b1}h3,h4,h5{margin-bottom:0.3em}h1{font-size:188%;font-weight:normal}h2{font-size:150%;font-weight:normal}h3{font-size:128%}h4{font-size:116%}h5{font-size:108%}h6{font-size:100%}p{margin:0.4em 0 0.5em 0}p img{margin:0}ul{margin:0.3em 0 0 1.6em;padding:0}ol{margin:0.3em 0 0 3.2em;padding:0;list-style-image:none}li{margin-bottom:0.1em}dt{font-weight:bold;margin-bottom:0.1em}dl{margin-top:0.2em;margin-bottom:0.5em}dd{margin-left:1.6em;margin-bottom:0.1em}pre,code,tt,kbd,samp,.mw-code{font-family:monospace,monospace}pre,code,.mw-code{background-color:#f8f9fa;color:#000;border:1px solid #eaecf0}code{border-radius:2px;padding:1px 4px}pre,.mw-code{padding:1em;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}table{font-size:100%}fieldset{border:1px solid #2a4b8d;margin:1em 0 1em 0;padding:0 1em 1em}legend{padding:0.5em;font-size:95%}form{border:0;margin:0}textarea{display:block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #c8ccd1;padding:0.1em}.center{width:100%;text-align:center}*.center *{margin-left:auto;margin-right:auto}.small{font-size:94%}table.small{font-size:100%}@counter-style meetei{system:numeric;symbols:'\ABF0' '\ABF1' '\ABF2' '\ABF3' '\ABF4' '\ABF5' '\ABF6' '\ABF7' '\ABF8' '\ABF9';suffix:') '}@counter-style santali{system:numeric;symbols:'\1C50' '\1C51' '\1C52' '\1C53' '\1C54' '\1C55' '\1C56' '\1C57' '\1C58' '\1C59'}ol:lang(azb) li,ol:lang(bcc) li,ol:lang(bgn) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(lrc) li,ol:lang(luz) li,ol:lang(mzn) li{list-style-type:persian}ol:lang(ckb) li,ol:lang(sdh) li{list-style-type:arabic-indic}ol:lang(hi) li,ol:lang(mai) li,ol:lang(mr) li,ol:lang(ne) li{list-style-type:devanagari}ol:lang(as) li,ol:lang(bn) li{list-style-type:bengali}ol:lang(mni) li{list-style-type:meetei}ol:lang(or) li{list-style-type:oriya}ol:lang(sat) li{list-style-type:santali}.mw-content-ltr ul,.mw-content-rtl .mw-content-ltr ul{margin:0.3em 0 0 1.6em;padding:0}.mw-content-rtl ul,.mw-content-ltr .mw-content-rtl ul{margin:0.3em 1.6em 0 0;padding:0}.mw-content-ltr ol,.mw-content-rtl .mw-content-ltr ol{margin:0.3em 0 0 3.2em;padding:0}.mw-content-rtl ol,.mw-content-ltr .mw-content-rtl ol{margin:0.3em 3.2em 0 0;padding:0}.mw-content-ltr dd,.mw-content-rtl .mw-content-ltr dd{margin-left:1.6em;margin-right:0}.mw-content-rtl dd,.mw-content-ltr .mw-content-rtl dd{margin-right:1.6em;margin-left:0}h1:lang(anp),h1:lang(as),h1:lang(bh),h1:lang(bho),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ks),h1:lang(ml),h1:lang(mr),h1:lang(my),h1:lang(mai),h1:lang(ne),h1:lang(new),h1:lang(or),h1:lang(pa),h1:lang(pi),h1:lang(sa),h1:lang(ta),h1:lang(te){line-height:1.6em !important}h2:lang(anp),h3:lang(anp),h4:lang(anp),h5:lang(anp),h6:lang(anp),h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bho),h3:lang(bho),h4:lang(bho),h5:lang(bho),h6:lang(bho),h2:lang(bh),h3:lang(bh),h4:lang(bh),h5:lang(bh),h6:lang(bh),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ks),h3:lang(ks),h4:lang(ks),h5:lang(ks),h6:lang(ks),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(my),h3:lang(my),h4:lang(my),h5:lang(my),h6:lang(my),h2:lang(mai),h3:lang(mai),h4:lang(mai),h5:lang(mai),h6:lang(mai),h2:lang(ne),h3:lang(ne),h4:lang(ne),h5:lang(ne),h6:lang(ne),h2:lang(new),h3:lang(new),h4:lang(new),h5:lang(new),h6:lang(new),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(pi),h3:lang(pi),h4:lang(pi),h5:lang(pi),h6:lang(pi),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te){line-height:1.4em}h2:lang(th){line-height:1.6}.toc,.toccolours{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;font-size:95%}.toc{display:table;padding:7px}.toc h2{display:inline;border:0;padding:0;font-size:100%;font-weight:bold}.toc .toctitle{text-align:center}.toc ul{list-style:none;margin:0.3em 0;padding:0;text-align:left}.toc ul ul{margin:0 0 0 2em}table.toc{border-collapse:collapse}table.toc td{padding:0}.tocnumber,.toctext{display:table-cell;text-decoration:inherit}.tocnumber{color:#202122;padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}.toctogglecheckbox{display:inline !important;position:absolute;opacity:0;z-index:-1}.toctogglespan{font-size:94%}.toctogglespan:before{content:' ['}.toctogglespan:after{content:']'}.toctogglelabel{cursor:pointer;color:#0645ad}.toctogglelabel:hover{text-decoration:underline}.toctogglecheckbox:focus + .toctitle .toctogglelabel{text-decoration:underline;outline:dotted 1px;outline:auto -webkit-focus-ring-color}.toctogglecheckbox:checked + .toctitle .toctogglelabel:after{content:'show'}.toctogglecheckbox:not(:checked) + .toctitle .toctogglelabel:after{content:'hide'}.toc .toctitle{direction:ltr}.mw-content-ltr .toc ul,.mw-content-rtl .mw-content-ltr .toc ul{text-align:left}.mw-content-rtl .toc ul,.mw-content-ltr .mw-content-rtl .toc ul{text-align:right}.mw-content-ltr .toc ul ul,.mw-content-rtl .mw-content-ltr .toc ul ul{margin:0 0 0 2em}.mw-content-rtl .toc ul ul,.mw-content-ltr .mw-content-rtl .toc ul ul{margin:0 2em 0 0}} \ No newline at end of file diff --git a/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|mediawiki.action.view.redirectPage|skins.vector.styles.legacy&only=styles&skin=vector.css b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|mediawiki.action.view.redirectPage|skins.vector.styles.legacy&only=styles&skin=vector.css new file mode 100644 index 0000000..d9962ae --- /dev/null +++ b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|mediawiki.action.view.redirectPage|skins.vector.styles.legacy&only=styles&skin=vector.css @@ -0,0 +1 @@ +.client-nojs #ca-ve-edit,.client-nojs .mw-editsection-divider,.client-nojs .mw-editsection-visualeditor,.ve-not-available #ca-ve-edit,.ve-not-available .mw-editsection-divider,.ve-not-available .mw-editsection-visualeditor{display:none}.client-js .mw-content-ltr .mw-editsection-bracket:first-of-type,.client-js .mw-content-rtl .mw-editsection-bracket:not(:first-of-type){margin-right:0.25em;color:#54595d}.client-js .mw-content-rtl .mw-editsection-bracket:first-of-type,.client-js .mw-content-ltr .mw-editsection-bracket:not(:first-of-type){margin-left:0.25em;color:#54595d}.redirectMsg p{overflow:hidden;height:0}.redirectText{list-style:none;display:inline;margin:0 !important;padding:0 !important}.mw-content-ltr .redirectText li{display:inline;margin:0;padding:0;padding-left:42px;background:transparent url(resources/src/mediawiki.action/images/nextredirect-ltr.png%3F778f7) bottom left no-repeat;background-image:linear-gradient(transparent,transparent),url(resources/src/mediawiki.action/images/nextredirect-ltr.svg%3F3ffd5)}.mw-content-ltr .redirectText li:first-child{padding-left:47px;background:transparent url(resources/src/mediawiki.action/images/redirect-ltr.png%3F926f7) bottom left no-repeat;background-image:linear-gradient(transparent,transparent),url(resources/src/mediawiki.action/images/redirect-ltr.svg%3Fff441)}.mw-content-rtl .redirectText li{display:inline;margin:0;padding:0;padding-right:42px;background:transparent url(resources/src/mediawiki.action/images/nextredirect-rtl.png%3F3fa7a) bottom right no-repeat;background-image:linear-gradient(transparent,transparent),url(resources/src/mediawiki.action/images/nextredirect-rtl.svg%3F67397)}.mw-content-rtl .redirectText li:first-child{padding-right:47px;background:transparent url(resources/src/mediawiki.action/images/redirect-rtl.png%3Fadb14) bottom right no-repeat;background-image:linear-gradient(transparent,transparent),url(resources/src/mediawiki.action/images/redirect-rtl.svg%3Fdb62f)}.redirectText{font-size:140%}.redirectMsg p{margin:0}body{margin:0}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}abbr[title]{border-bottom:1px dotted;cursor:help}@supports (text-decoration:underline dotted){abbr[title]{border-bottom:0;text-decoration:underline dotted}}pre,code,tt,kbd,samp{font-family:monospace,monospace}sub,sup{line-height:1}img{border:0}button,input,optgroup,select,textarea{margin:0}button::-moz-focus-inner,[type='button']::-moz-focus-inner,[type='reset']::-moz-focus-inner,[type='submit']::-moz-focus-inner{border-style:none;padding:0}legend{color:inherit;padding:0}.messagebox,.errorbox,.warningbox,.successbox{color:#000;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:16px;border:1px solid;padding:12px 24px;word-wrap:break-word;overflow-wrap:break-word;overflow:hidden}.messagebox :only-child,.errorbox :only-child,.warningbox :only-child,.successbox :only-child{margin:0}.messagebox h2,.errorbox h2,.warningbox h2,.successbox h2{color:inherit;display:inline;margin:0 0.5em 0 0;border:0;font-size:1em;font-weight:bold}.messagebox .mw-logevent-loglines li,.errorbox .mw-logevent-loglines li,.warningbox .mw-logevent-loglines li,.successbox .mw-logevent-loglines li{font-size:90%}.messagebox{background-color:#eaecf0;border-color:#a2a9b1}.errorbox{background-color:#fee7e6;border-color:#d33}.warningbox{background-color:#fef6e7;border-color:#fc3}.successbox{background-color:#d5fdf4;border-color:#14866d}.toctogglecheckbox:checked ~ ul{display:none}@media screen{html,body{height:100%}:focus{outline-color:#3366cc}html{font-size:100%}html,body{font-family:sans-serif}ul{list-style-image:url(skins/Vector/resources/common/images/bullet-icon.svg%3Fd4515)}pre,.mw-code{line-height:1.3}.mw-jump-link:not(:focus){display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}.mw-editsection,.mw-editsection-like{font-family:sans-serif}.mw-body h1,.mw-body-content h1,.mw-body-content h2{margin-bottom:0.25em;padding:0;font-family:'Linux Libertine','Georgia','Times',serif;line-height:1.3}.mw-body h1:lang(ja),.mw-body-content h1:lang(ja),.mw-body-content h2:lang(ja),.mw-body h1:lang(he),.mw-body-content h1:lang(he),.mw-body-content h2:lang(he),.mw-body h1:lang(ko),.mw-body-content h1:lang(ko),.mw-body-content h2:lang(ko){font-family:sans-serif}.mw-body h1:lang(my),.mw-body-content h1:lang(my),.mw-body-content h2:lang(my){line-height:normal}.mw-body h1,.mw-body-content h1{font-size:1.8em}.vector-body{font-size:0.875em;font-size:calc(1em * 0.875);line-height:1.6}.vector-body h1{margin-top:1em}.vector-body h2{margin-top:1em;font-size:1.5em}.vector-body h3,.vector-body h4,.vector-body h5,.vector-body h6{margin-top:0.3em;margin-bottom:0;padding-bottom:0;line-height:1.6}.vector-body h3{font-size:1.2em}.vector-body h3,.vector-body h4{font-weight:bold}.vector-body h4,.vector-body h5,.vector-body h6{font-size:100%}.vector-body .toc h2{font-family:sans-serif;font-size:100%}.vector-body p{margin:0.5em 0}.vector-body blockquote{border-left:4px solid #eaecf0;padding:8px 32px}.vector-body blockquote > :first-child{margin-top:0}.vector-body blockquote > :last-child{margin-bottom:0}.mw-parser-output .external{background-image:url(skins/Vector/resources/common/images/external-link-ltr-icon.svg%3F48e54);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-body .mw-indicators{font-size:0.875em;line-height:1.6;position:relative}.mw-body .mw-indicator{display:inline-block}#siteNotice{font-size:0.8em}.mw-portlet h3{display:none}.mw-portlet ul{list-style:none none;margin:0}.vector-menu-tabs{background-position:left bottom;float:left;height:2.5em;padding-left:1px}.vector-menu-tabs h3{display:none}.vector-menu-tabs ul{float:left;height:100%;list-style:none none;margin:0;padding:0}.vector-menu-tabs li{background-image:url(skins/Vector/resources/common/images/tab-normal-fade.png%3F1cc52);background-image:linear-gradient(to top,#77c1f6 0,#e8f2f8 1px,#ffffff 100%);background-position:left bottom;background-repeat:repeat-x;float:left;display:block;height:100%;margin:0;padding:0;line-height:1.125em;white-space:nowrap}.vector-menu-tabs li a{background-position:right bottom;color:#0645ad;-moz-box-sizing:border-box;box-sizing:border-box;display:block;float:left;height:3.07692308em;position:relative;padding-top:1.25em;padding-left:8px;padding-right:8px;font-size:0.8125em;cursor:pointer}.vector-menu-tabs .new a,.vector-menu-tabs .new a:visited{color:#dd3333}.vector-menu-tabs .selected{background:#ffffff}.vector-menu-tabs .selected a,.vector-menu-tabs .selected a:visited{color:#202122;text-decoration:none}.vector-menu-tabs .icon a{background-position:right bottom;background-repeat:no-repeat}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.vector-menu-tabs .mw-watchlink.icon a{width:2.15384615em;height:0;padding:3.07692308em 0 0 0;overflow:hidden}.vector-menu-tabs .mw-watchlink.icon a:before{background-repeat:no-repeat;background-position:50% 50%;content:'';display:block;position:absolute;top:1.07692308em;left:0.38461538em;width:1.23076923em;height:1.23076923em}.vector-menu-tabs #ca-unwatch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon.svg%3Fc5368)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon.svg%3F195f5)}.vector-menu-tabs #ca-watch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon.svg%3F6ab6f)}.vector-menu-tabs #ca-unwatch.icon a:hover:before,.vector-menu-tabs #ca-unwatch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon-hl.svg%3F5e652)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:hover:before,.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg%3Ff3db6)}.vector-menu-tabs #ca-watch.icon a:hover:before,.vector-menu-tabs #ca-watch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon-hl.svg%3F9bf90)}.vector-menu-tabs #ca-unwatch.icon .loading:before,.vector-menu-tabs #ca-watch.icon .loading:before{-webkit-animation:rotate 700ms infinite linear;animation:rotate 700ms infinite linear;outline:0;cursor:default;pointer-events:none;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.vector-menu-dropdown{direction:ltr;float:left;cursor:pointer;position:relative;line-height:1.125em}.vector-menu-dropdown h3{color:#54595d;position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box}.vector-menu-dropdown h3:after{content:'';background-image:url(skins/Vector/resources/common/images/arrow-down.svg%3F9426f);background-position:100% 50%;background-repeat:no-repeat;position:absolute;top:0.76923077em;right:8px;bottom:0;width:1.23076923em;opacity:0.84}.vector-menu-dropdown h3:hover,.vector-menu-dropdown h3:focus{color:#202122}.vector-menu-dropdown h3:hover:after,.vector-menu-dropdown h3:focus:after{opacity:1}.vector-menu-dropdown .vector-menu-content{background-color:#ffffff;list-style:none none;min-width:100%;position:absolute;top:2.5em;left:-1px;margin:0;border:1px solid #a2a9b1;border-top-width:0;padding:0;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:left;opacity:0;visibility:hidden;-webkit-transition:opacity 100ms;transition:opacity 100ms;z-index:3}.vector-menu-dropdown .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox-collapsed{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;display:none}.vector-menu-dropdown .vector-menu-checkbox:checked + .vector-menu-heading .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox:not(:checked) + .vector-menu-heading .vector-menu-checkbox-collapsed{display:inline}.vector-menu-dropdown .vector-menu-checkbox:checked ~ .vector-menu-content{opacity:1;visibility:visible}.vector-menu-dropdown ul{list-style:none}.vector-menu-dropdown li{padding:0;margin:0;text-align:left;line-height:1em}.vector-menu-dropdown li a{padding:0.625em;color:#0645ad;display:block;white-space:nowrap;cursor:pointer}.vector-menu-dropdown li a span{font-size:0.8125em}.vector-menu-dropdown .selected a,.vector-menu-dropdown .selected a:visited{color:#202122;text-decoration:none}#mw-head .vector-menu-dropdown h3{background-position:right bottom;float:left;height:3.07692308em;margin:0 -1px 0 0;padding-right:1.84615385em}.vector-menu-tabs,.vector-menu-tabs a,#mw-head .vector-menu-dropdown h3{background-image:url(skins/Vector/resources/common/images/tab-separator.png%3F09d4b);background-image:linear-gradient(to bottom,rgba(167,215,249,0) 0,#a7d7f9 100%);background-repeat:no-repeat;background-size:1px 100%}.vector-menu-checkbox{cursor:pointer;position:absolute;top:0;left:0;z-index:1;opacity:0;width:100%;height:100%;margin:0;padding:0;display:none}:not(:checked) > .vector-menu-checkbox{display:block}.mw-portlet-variants h3,.mw-portlet-cactions h3,.vector-menu-dropdown-noicon h3{padding-top:1.25em;padding-left:8px;padding-right:1.84615385em;font-size:0.8125em;font-weight:normal}.mw-portlet-variants .vector-menu-checkbox:focus + h3,.mw-portlet-cactions .vector-menu-checkbox:focus + h3,.vector-menu-dropdown-noicon .vector-menu-checkbox:focus + h3{outline:dotted 1px;outline:auto -webkit-focus-ring-color}.vector-menu-portal{margin:0 0.6em 0 0.7em;padding:0.25em 0;direction:ltr}.vector-menu-portal h3{display:block;background-image:url(skins/Vector/resources/common/images/portal-separator.png%3F4ab04);background-image:linear-gradient(to right,rgba(200,204,209,0) 0,#c8ccd1 33%,#c8ccd1 66%,rgba(200,204,209,0) 100%);background-position:center bottom;background-repeat:no-repeat;background-size:100% 1px;color:#54595d;margin:0.5em 0 0 0.66666667em;border:0;padding:0.25em 0;font-size:0.75em;font-weight:normal;cursor:default}.vector-menu-portal .vector-menu-content{margin-left:0.5em;padding-top:0}.vector-menu-portal .vector-menu-content ul{list-style:none none;margin:0;padding-top:0.3em}.vector-menu-portal .vector-menu-content li{margin:0;padding:0.25em 0;font-size:0.75em;line-height:1.125em;word-wrap:break-word}.vector-menu-portal .vector-menu-content li a{color:#0645ad}.vector-menu-portal .vector-menu-content li a:visited{color:#0b0080}#p-search h3{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}#simpleSearch{position:relative;height:100%}#searchInput{background-color:rgba(255,255,255,0.5);color:#000000;width:100%;height:2.15384615em;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #a2a9b1;border-radius:2px;padding:5px 2.15384615em 5px 0.4em;box-shadow:inset 0 0 0 1px transparent;font-family:inherit;font-size:0.8125em;direction:ltr;-webkit-transition:border-color 250ms,box-shadow 250ms;transition:border-color 250ms,box-shadow 250ms;-webkit-appearance:none;-moz-appearance:textfield}#simpleSearch:hover #searchInput{border-color:#72777d}#searchInput:focus,#simpleSearch:hover #searchInput:focus{outline:0;border-color:#3366cc;box-shadow:inset 0 0 0 1px #3366cc}#searchInput::-webkit-input-placeholder{color:#72777d;opacity:1}#searchInput:-ms-input-placeholder{color:#72777d;opacity:1}#searchInput::-moz-placeholder{color:#72777d;opacity:1}#searchInput::placeholder{color:#72777d;opacity:1}#searchInput::-webkit-search-decoration,#searchInput::-webkit-search-cancel-button,#searchInput::-webkit-search-results-button,#searchInput::-webkit-search-results-decoration{display:none}#searchButton,#mw-searchButton{background-color:transparent;position:absolute;top:1px;bottom:1px;right:1px;min-width:28px;width:2.15384615em;border:0;padding:0;cursor:pointer;font-size:0.8125em;direction:ltr;text-indent:-99999px;white-space:nowrap;overflow:hidden;z-index:1}#searchButton{background:no-repeat center / 1.23076923em url(skins/Vector/resources/common/images/search.svg%3Fbbf78);opacity:0.67}.search-toggle{display:block;float:right}.vector-search-box-collapses > div{display:none}#p-logo{width:10em;height:160px;margin-bottom:1em}#p-logo a{background-position:center center;background-repeat:no-repeat;display:block;width:10em;height:160px;text-decoration:none}.mw-footer{direction:ltr}.mw-footer ul{list-style:none none;margin:0;padding:0}.mw-footer li{color:#202122;margin:0;padding:0.5em 0;font-size:0.75em}#footer-icons{float:right}#footer-icons li{float:left;margin-left:0.5em;line-height:2;text-align:right}#footer-info li{line-height:1.4}#footer-places li{float:left;margin-right:1em;line-height:2}}@media screen and (min-width:1000px){.search-toggle{display:none}}@media screen and (min-width:1000px){.vector-search-box-collapses > div{display:block}}@media print{.toc,body{padding:10px;font-family:'Linux Libertine','Georgia','Times',serif}.printfooter,.mw-footer,.thumb,table,ol,dl,ul,h3,h4,h5,h6{font-family:sans-serif}img{font-family:'Linux Libertine','Georgia','Times',serif}.mw-body a:not(.image){border-bottom:1px solid #aaa}.firstHeading{font-size:25pt;line-height:28pt;margin-bottom:20px;padding-bottom:5px}.firstHeading,h2{overflow:hidden;border-bottom:2px solid #000000}h3,h4,h5,h6{margin:30px 0 0}h2,h3,h4,h5,h6{padding:0;position:relative}h2{font-size:18pt;line-height:24pt;margin-bottom:0.25em}h3{font-size:14pt;line-height:20pt}h4,h5,h6{font-size:12pt;line-height:16pt}p{font-size:12pt;line-height:16pt;margin-top:5px;text-align:justify}p:before{content:'';display:block;width:120pt;overflow:hidden}blockquote{border-left:2px solid #000000;padding-left:20px}ol,ul{margin:10px 0 0 1.6em;padding:0}ol li,ul li{padding:2px 0;font-size:12pt}table ol li,table ul li{font-size:inherit}.toc{page-break-before:avoid;page-break-after:avoid;background:none;border:0;display:table}.toc a{border:0;font-weight:normal}.toc > ul > li{margin-bottom:4px;font-weight:bold}.toc ul{margin:0;list-style:none}.toc ul ul{padding-left:30px}.toc li.toclevel-1 > a{font-size:12pt;font-weight:bold}#mw-navigation,.noprint,.mw-jump-link,.mw-portlet-lang,.toc .tocnumber{display:none}.printfooter{margin-top:10px;border-top:3px solid #000000;padding-top:10px;font-size:10pt;clear:both}.mw-footer{margin-top:12px;border-top:1px solid #eeeeee;padding-top:5px}#footer-info{margin:0;padding:0}#footer-info li{color:#999;list-style:none;display:block;padding-bottom:10px;font-size:10pt}#footer-info li a{color:#999 !important}#footer-info-lastmod{color:#000000;font-size:12pt;font-weight:bold}}@media screen{body{background-color:#f6f6f6;overflow-y:scroll}.mw-body,.parsoid-body{background-color:#ffffff;color:#202122;direction:ltr;padding:1em}#p-personal{position:absolute;top:6px;right:0.75em;z-index:100}#p-personal ul{padding-left:10em}#p-personal li{float:left;margin-left:0.75em;padding-top:0.5em;line-height:1.16666667}.mw-body,#mw-data-after-content{margin-left:10em}.mw-body{margin-top:-1px;border:1px solid #a7d7f9;border-right-width:0}.mw-body .firstHeading{overflow:visible}.mw-indicators{z-index:1}.vector-body{position:relative;z-index:0}#mw-page-base{background-color:#fbfbfb;background-image:linear-gradient(to bottom,#ffffff 50%,#f6f6f6 100%);background-position:bottom left;height:5em}#mw-head-base{margin-top:-5em;margin-left:10em;height:5em}#mw-navigation h2{position:absolute;top:-9999px}#mw-head{position:absolute;top:0;right:0;width:100%}#left-navigation{float:left;margin-left:10em;margin-top:2.5em;margin-bottom:-2.5em}#right-navigation{float:right;margin-top:2.5em}#p-search{float:left;margin-right:0.5em;margin-left:0.5em}#p-search form{margin:0.5em 0 0}#simpleSearch{min-width:5em;width:13.2em;width:20vw;max-width:20em}#mw-panel{position:absolute;top:0;width:10em;left:0}#p-logo + .mw-portlet h3{display:none}.mw-footer{margin-left:10em;margin-top:0;padding:0.75em}.mw-content-ltr{direction:ltr}.mw-content-rtl{direction:rtl}.vector-menu-dropdown:not(.vector-user-menu) li{font-size:0.8125em}.vector-menu-dropdown:not(.vector-user-menu):hover .vector-menu-content{opacity:1;visibility:visible}.vector-menu-checkbox:checked + h3:after{transform:scaleY(-1)}#mw-panel{font-size:inherit}#mw-panel nav:first-child{background-image:none}#mw-panel nav:first-child h3{display:none}#mw-panel nav:first-child .vector-menu-content{margin-left:0.5em}.vector-user-menu-legacy{}.vector-user-menu-legacy li{font-size:0.75em}.vector-user-menu-legacy #pt-anonuserpage,.vector-user-menu-legacy #pt-userpage a{background-position:left 0.33333333em;background-image:url(skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg%3Fb7f58);background-repeat:no-repeat;background-size:1.16666667em 1.16666667em;padding-top:0.5em;padding-left:1.5em}.vector-user-menu-legacy #pt-userpage{padding-top:0}.vector-user-menu-legacy #pt-userpage a{display:inline-block}.vector-user-menu-legacy #pt-anonuserpage{color:#54595d}.vector-user-menu-legacy .vector-menu-content-list{display:flex;flex-wrap:wrap;flex-grow:1;justify-content:flex-end;align-items:baseline}}@media screen and (min-width:982px){.mw-body,#mw-head-base,#left-navigation,#mw-data-after-content,.mw-footer{margin-left:11em}.mw-body{padding:1.25em 1.5em 1.5em 1.5em}.mw-footer{padding:1.25em}#mw-panel{padding-left:0.5em}#p-search{margin-right:1em}#p-personal{right:1em}}@media print{.noprint,.mw-cite-backlink,.mw-redirectedfrom,.patrollink,#column-one,#footer-places,#mw-navigation,#f-poweredbyico,#f-copyrightico,li#about,li#disclaimer,li#mobileview,li#privacy{display:none}#footer{background:#fff;color:#000;margin-top:1em;border-top:1pt solid #aaa;padding-top:5px;direction:ltr}}.mw-wiki-logo{background-image:url(images/open-iov.png%3Fd7807)}@media print{table.floatright,div.floatright,div.tright{float:right;clear:right}table.floatleft,div.floatleft,div.tleft{float:left;clear:left}div.tleft{margin:0.5em 1.4em 1.3em 0}div.tright{margin:0.5em 0 1.3em 1.4em}table.floatright,div.floatright{margin:0 0 0.5em 0.5em;border:0}table.floatleft,div.floatleft{margin:0 0.5em 0.5em 0;border:0}div.thumb{background-color:transparent;width:auto}div.thumb a{border-bottom:0}div.thumbinner{background-color:#fff;border:0;border-radius:2px;padding:5px;font-size:10pt;color:#666;text-align:center;overflow:hidden;min-width:100px}.thumbcaption{text-align:left;line-height:1.4;padding:3px}.thumbborder{border:1pt solid #ddd}.thumb{page-break-inside:avoid}.magnify{display:none}.mw-parser-output a.external{}.mw-parser-output a.external.text:after,.mw-parser-output a.external.autonumber:after{content:' (' attr(href) ')';word-break:break-all;word-wrap:break-word}.mw-parser-output a.external.text[href^='//']:after,.mw-parser-output a.external.autonumber[href^='//']:after{content:' (https:' attr(href) ')'}.wikitable{background:#fff;margin:1em 0;border:1pt solid #aaa;border-collapse:collapse;font-size:10pt;page-break-inside:avoid}.wikitable > caption{padding:5px;font-size:10pt}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{background:#fff !important;color:#000 !important;border:1pt solid #aaa;padding:0.4em 0.6em}.wikitable > tr > th,.wikitable > * > tr > th{text-align:center}table.listing,table.listing td{border:1pt solid #000;border-collapse:collapse}.mw-editsection,.mw-editsection-like,.mw-indicators,#siteNotice,.usermessage{display:none}.printfooter{padding:1em 0}.catlinks ul{display:inline;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.15;margin:0.1em 0;border-left:1pt solid #aaa;padding:0 0.4em}.catlinks li:first-child{border-left:0;padding-left:0.2em}.mw-hidden-catlinks,.catlinks{display:none}.center{text-align:center}a{background:none !important;padding:0 !important}a,a.external,a.new,a.stub{color:inherit !important;text-decoration:inherit !important}dt{font-weight:bold}h1,h2,h3,h4,h5,h6{font-weight:bold;page-break-after:avoid;page-break-before:avoid}p{margin:1em 0;line-height:1.2;orphans:3;widows:3}img,figure{page-break-inside:avoid}img{border:0;vertical-align:middle}pre,.mw-code{background:#fff;color:#000;border:1pt dashed #000;padding:1em;font-size:8pt;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}ul{list-style-type:square}.toctogglecheckbox:checked + .toctitle{display:none}.toc{background-color:#f9f9f9;border:1pt solid #aaa;padding:5px;display:table}.tocnumber,.toctext{display:table-cell}.tocnumber{padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}}@media screen{div.tright,div.floatright,table.floatright{clear:right;float:right}div.tleft,div.floatleft,table.floatleft{float:left;clear:left}.mw-content-ltr .thumbcaption{text-align:left}.mw-content-ltr .magnify{float:right}.mw-content-rtl .thumbcaption{text-align:right}.mw-content-rtl .magnify{float:left}div.floatright,table.floatright{margin:0 0 0.5em 0.5em}div.floatleft,table.floatleft{margin:0 0.5em 0.5em 0}div.thumb{margin-bottom:0.5em;width:auto;background-color:transparent}div.thumbinner{border:1px solid #c8ccd1;padding:3px;background-color:#f8f9fa;font-size:94%;text-align:center;overflow:hidden}.thumbimage{background-color:#ffffff;border:1px solid #c8ccd1}.thumbcaption{border:0;line-height:1.4em;padding:3px;font-size:94%;text-align:left}.magnify{float:right;margin-left:3px}.magnify a{display:block;text-indent:15px;white-space:nowrap;overflow:hidden;width:15px;height:11px;background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.thumbborder{border:1px solid #eaecf0}.mw-content-ltr .magnify{margin-left:3px;margin-right:0}.mw-content-ltr .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e)}.mw-content-rtl .magnify{margin-left:0;margin-right:3px}.mw-content-rtl .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg%3F38fd5)}div.tright{margin:0.5em 0 1.3em 1.4em}div.tleft{margin:0.5em 1.4em 1.3em 0}a.stub{color:#772233}a.new{color:#dd3333}a.mw-selflink{color:inherit;font-weight:bold;text-decoration:inherit}a.mw-selflink:hover{cursor:inherit;text-decoration:inherit}a.mw-selflink:active,a.mw-selflink:visited{color:inherit}a.new:visited{color:#a55858}.mw-parser-output a.extiw,.mw-parser-output a.external{color:#3366bb}.mw-parser-output a.extiw:visited,.mw-parser-output a.external:visited{color:#663366}.mw-parser-output a.extiw:active,.mw-parser-output a.external:active{color:#bb6633}.mw-underline-always a{text-decoration:underline}.mw-underline-never a{text-decoration:none}.plainlinks a.external{background:none !important;padding:0 !important}.mw-parser-output a.external,.link-https{background-image:url(resources/src/mediawiki.skinning/images/external-ltr.svg%3F59558);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='mailto:'],.link-mailto{background-image:url(resources/src/mediawiki.skinning/images/mail.svg%3F8a79c);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='ftp://'],.link-ftp{background-image:url(resources/src/mediawiki.skinning/images/ftp-ltr.svg%3Fc5643);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='irc://'],.mw-parser-output a.external[href^='ircs://'],.link-irc{background-image:url(resources/src/mediawiki.skinning/images/chat-ltr.svg%3Fe0649);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogg'],.mw-parser-output a.external[href$='.OGG'],.mw-parser-output a.external[href$='.mid'],.mw-parser-output a.external[href$='.MID'],.mw-parser-output a.external[href$='.midi'],.mw-parser-output a.external[href$='.MIDI'],.mw-parser-output a.external[href$='.mp3'],.mw-parser-output a.external[href$='.MP3'],.mw-parser-output a.external[href$='.wav'],.mw-parser-output a.external[href$='.WAV'],.mw-parser-output a.external[href$='.wma'],.mw-parser-output a.external[href$='.WMA'],.link-audio{background-image:url(resources/src/mediawiki.skinning/images/audio-ltr.svg%3F74d04);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogm'],.mw-parser-output a.external[href$='.OGM'],.mw-parser-output a.external[href$='.avi'],.mw-parser-output a.external[href$='.AVI'],.mw-parser-output a.external[href$='.mpeg'],.mw-parser-output a.external[href$='.MPEG'],.mw-parser-output a.external[href$='.mpg'],.mw-parser-output a.external[href$='.MPG'],.link-video{background-image:url(resources/src/mediawiki.skinning/images/video.svg%3Fa3758);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.pdf'],.mw-parser-output a.external[href$='.PDF'],.mw-parser-output a.external[href*='.pdf#'],.mw-parser-output a.external[href*='.PDF#'],.mw-parser-output a.external[href*='.pdf?'],.mw-parser-output a.external[href*='.PDF?'],.link-document{background-image:url(resources/src/mediawiki.skinning/images/document-ltr.svg%3F0bf90);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.extiw,.mw-parser-output a.extiw:active{color:#36b}.mw-parser-output a.external{color:#36b}.mw-body-content:after{clear:both;content:'';display:block}.mw-body-content a.external.free{word-wrap:break-word}.mw-body-content .error{font-size:larger;color:#d33}.rtl .mw-parser-output a.external.free,.rtl .mw-parser-output a.external.autonumber{direction:ltr;unicode-bidi:embed}.mw-hide-empty-elt .mw-parser-output .mw-empty-elt{display:none}.wikitable{background-color:#f8f9fa;color:#202122;margin:1em 0;border:1px solid #a2a9b1;border-collapse:collapse}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{border:1px solid #a2a9b1;padding:0.2em 0.4em}.wikitable > tr > th,.wikitable > * > tr > th{background-color:#eaecf0;text-align:center}.wikitable > caption{font-weight:bold}.usermessage{background-color:#fef6e7;border:1px solid #fc3;color:#000;font-weight:bold;margin:2em 0 1em;padding:0.5em 1em;vertical-align:middle}#siteNotice{position:relative;text-align:center;margin:0}#localNotice{margin-bottom:0.9em}#siteSub{display:none}#contentSub,#contentSub2{font-size:84%;line-height:1.2em;margin:0 0 1.4em 1em;color:#54595d;width:auto}span.subpages{display:block}.emptyPortlet{display:none}.printfooter,.client-nojs #t-print{display:none}.mw-indicators{float:right}.mw-editsection{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mw-editsection,.mw-editsection-like{font-size:small;font-weight:normal;margin-left:1em;vertical-align:baseline;line-height:1em}.mw-content-ltr .mw-editsection,.mw-content-rtl .mw-content-ltr .mw-editsection,.mw-content-ltr .mw-editsection-like,.mw-content-rtl .mw-content-ltr .mw-editsection-like{margin-left:1em;margin-right:0}.mw-content-rtl .mw-editsection,.mw-content-ltr .mw-content-rtl .mw-editsection,.mw-content-rtl .mw-editsection-like,.mw-content-ltr .mw-content-rtl .mw-editsection-like{margin-right:1em;margin-left:0}#catlinks{text-align:left}.catlinks{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;margin-top:1em;clear:both}.catlinks ul{display:inline;margin:0;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.25em;border-left:1px solid #a2a9b1;margin:0.125em 0;padding:0 0.5em}.catlinks li:first-child{padding-left:0.25em;border-left:0}.catlinks li a.mw-redirect{font-style:italic}.mw-hidden-cats-hidden,.catlinks-allhidden{display:none}a{text-decoration:none;color:#0645ad;background:none}a:not([href]){cursor:pointer}a:visited{color:#0b0080}a:active{color:#faa700}a:hover,a:focus{text-decoration:underline}a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}img{border:0;vertical-align:middle}hr{height:1px;background-color:#a2a9b1;border:0;margin:0.2em 0}h1,h2,h3,h4,h5,h6{color:#000;margin:0;padding-top:0.5em;padding-bottom:0.17em;overflow:hidden}h1,h2{margin-bottom:0.6em;border-bottom:1px solid #a2a9b1}h3,h4,h5{margin-bottom:0.3em}h1{font-size:188%;font-weight:normal}h2{font-size:150%;font-weight:normal}h3{font-size:128%}h4{font-size:116%}h5{font-size:108%}h6{font-size:100%}p{margin:0.4em 0 0.5em 0}p img{margin:0}ul{margin:0.3em 0 0 1.6em;padding:0}ol{margin:0.3em 0 0 3.2em;padding:0;list-style-image:none}li{margin-bottom:0.1em}dt{font-weight:bold;margin-bottom:0.1em}dl{margin-top:0.2em;margin-bottom:0.5em}dd{margin-left:1.6em;margin-bottom:0.1em}pre,code,tt,kbd,samp,.mw-code{font-family:monospace,monospace}pre,code,.mw-code{background-color:#f8f9fa;color:#000;border:1px solid #eaecf0}code{border-radius:2px;padding:1px 4px}pre,.mw-code{padding:1em;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}table{font-size:100%}fieldset{border:1px solid #2a4b8d;margin:1em 0 1em 0;padding:0 1em 1em}legend{padding:0.5em;font-size:95%}form{border:0;margin:0}textarea{display:block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #c8ccd1;padding:0.1em}.center{width:100%;text-align:center}*.center *{margin-left:auto;margin-right:auto}.small{font-size:94%}table.small{font-size:100%}@counter-style meetei{system:numeric;symbols:'\ABF0' '\ABF1' '\ABF2' '\ABF3' '\ABF4' '\ABF5' '\ABF6' '\ABF7' '\ABF8' '\ABF9';suffix:') '}@counter-style santali{system:numeric;symbols:'\1C50' '\1C51' '\1C52' '\1C53' '\1C54' '\1C55' '\1C56' '\1C57' '\1C58' '\1C59'}ol:lang(azb) li,ol:lang(bcc) li,ol:lang(bgn) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(lrc) li,ol:lang(luz) li,ol:lang(mzn) li{list-style-type:persian}ol:lang(ckb) li,ol:lang(sdh) li{list-style-type:arabic-indic}ol:lang(hi) li,ol:lang(mai) li,ol:lang(mr) li,ol:lang(ne) li{list-style-type:devanagari}ol:lang(as) li,ol:lang(bn) li{list-style-type:bengali}ol:lang(mni) li{list-style-type:meetei}ol:lang(or) li{list-style-type:oriya}ol:lang(sat) li{list-style-type:santali}.mw-content-ltr ul,.mw-content-rtl .mw-content-ltr ul{margin:0.3em 0 0 1.6em;padding:0}.mw-content-rtl ul,.mw-content-ltr .mw-content-rtl ul{margin:0.3em 1.6em 0 0;padding:0}.mw-content-ltr ol,.mw-content-rtl .mw-content-ltr ol{margin:0.3em 0 0 3.2em;padding:0}.mw-content-rtl ol,.mw-content-ltr .mw-content-rtl ol{margin:0.3em 3.2em 0 0;padding:0}.mw-content-ltr dd,.mw-content-rtl .mw-content-ltr dd{margin-left:1.6em;margin-right:0}.mw-content-rtl dd,.mw-content-ltr .mw-content-rtl dd{margin-right:1.6em;margin-left:0}h1:lang(anp),h1:lang(as),h1:lang(bh),h1:lang(bho),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ks),h1:lang(ml),h1:lang(mr),h1:lang(my),h1:lang(mai),h1:lang(ne),h1:lang(new),h1:lang(or),h1:lang(pa),h1:lang(pi),h1:lang(sa),h1:lang(ta),h1:lang(te){line-height:1.6em !important}h2:lang(anp),h3:lang(anp),h4:lang(anp),h5:lang(anp),h6:lang(anp),h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bho),h3:lang(bho),h4:lang(bho),h5:lang(bho),h6:lang(bho),h2:lang(bh),h3:lang(bh),h4:lang(bh),h5:lang(bh),h6:lang(bh),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ks),h3:lang(ks),h4:lang(ks),h5:lang(ks),h6:lang(ks),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(my),h3:lang(my),h4:lang(my),h5:lang(my),h6:lang(my),h2:lang(mai),h3:lang(mai),h4:lang(mai),h5:lang(mai),h6:lang(mai),h2:lang(ne),h3:lang(ne),h4:lang(ne),h5:lang(ne),h6:lang(ne),h2:lang(new),h3:lang(new),h4:lang(new),h5:lang(new),h6:lang(new),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(pi),h3:lang(pi),h4:lang(pi),h5:lang(pi),h6:lang(pi),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te){line-height:1.4em}h2:lang(th){line-height:1.6}.toc,.toccolours{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;font-size:95%}.toc{display:table;padding:7px}.toc h2{display:inline;border:0;padding:0;font-size:100%;font-weight:bold}.toc .toctitle{text-align:center}.toc ul{list-style:none;margin:0.3em 0;padding:0;text-align:left}.toc ul ul{margin:0 0 0 2em}table.toc{border-collapse:collapse}table.toc td{padding:0}.tocnumber,.toctext{display:table-cell;text-decoration:inherit}.tocnumber{color:#202122;padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}.toctogglecheckbox{display:inline !important;position:absolute;opacity:0;z-index:-1}.toctogglespan{font-size:94%}.toctogglespan:before{content:' ['}.toctogglespan:after{content:']'}.toctogglelabel{cursor:pointer;color:#0645ad}.toctogglelabel:hover{text-decoration:underline}.toctogglecheckbox:focus + .toctitle .toctogglelabel{text-decoration:underline;outline:dotted 1px;outline:auto -webkit-focus-ring-color}.toctogglecheckbox:checked + .toctitle .toctogglelabel:after{content:'show'}.toctogglecheckbox:not(:checked) + .toctitle .toctogglelabel:after{content:'hide'}.toc .toctitle{direction:ltr}.mw-content-ltr .toc ul,.mw-content-rtl .mw-content-ltr .toc ul{text-align:left}.mw-content-rtl .toc ul,.mw-content-ltr .mw-content-rtl .toc ul{text-align:right}.mw-content-ltr .toc ul ul,.mw-content-rtl .mw-content-ltr .toc ul ul{margin:0 0 0 2em}.mw-content-rtl .toc ul ul,.mw-content-ltr .mw-content-rtl .toc ul ul{margin:0 2em 0 0}} \ No newline at end of file diff --git a/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|skins.vector.styles.legacy&only=styles&skin=vector.css b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|skins.vector.styles.legacy&only=styles&skin=vector.css new file mode 100644 index 0000000..0ae3228 --- /dev/null +++ b/wiki/open-iov.org/load.php?lang=en&modules=ext.visualEditor.desktopArticleTarget.noscript|skins.vector.styles.legacy&only=styles&skin=vector.css @@ -0,0 +1 @@ +.client-nojs #ca-ve-edit,.client-nojs .mw-editsection-divider,.client-nojs .mw-editsection-visualeditor,.ve-not-available #ca-ve-edit,.ve-not-available .mw-editsection-divider,.ve-not-available .mw-editsection-visualeditor{display:none}.client-js .mw-content-ltr .mw-editsection-bracket:first-of-type,.client-js .mw-content-rtl .mw-editsection-bracket:not(:first-of-type){margin-right:0.25em;color:#54595d}.client-js .mw-content-rtl .mw-editsection-bracket:first-of-type,.client-js .mw-content-ltr .mw-editsection-bracket:not(:first-of-type){margin-left:0.25em;color:#54595d}body{margin:0}main{display:block}hr{box-sizing:content-box;height:0;overflow:visible}abbr[title]{border-bottom:1px dotted;cursor:help}@supports (text-decoration:underline dotted){abbr[title]{border-bottom:0;text-decoration:underline dotted}}pre,code,tt,kbd,samp{font-family:monospace,monospace}sub,sup{line-height:1}img{border:0}button,input,optgroup,select,textarea{margin:0}button::-moz-focus-inner,[type='button']::-moz-focus-inner,[type='reset']::-moz-focus-inner,[type='submit']::-moz-focus-inner{border-style:none;padding:0}legend{color:inherit;padding:0}.messagebox,.errorbox,.warningbox,.successbox{color:#000;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:16px;border:1px solid;padding:12px 24px;word-wrap:break-word;overflow-wrap:break-word;overflow:hidden}.messagebox :only-child,.errorbox :only-child,.warningbox :only-child,.successbox :only-child{margin:0}.messagebox h2,.errorbox h2,.warningbox h2,.successbox h2{color:inherit;display:inline;margin:0 0.5em 0 0;border:0;font-size:1em;font-weight:bold}.messagebox .mw-logevent-loglines li,.errorbox .mw-logevent-loglines li,.warningbox .mw-logevent-loglines li,.successbox .mw-logevent-loglines li{font-size:90%}.messagebox{background-color:#eaecf0;border-color:#a2a9b1}.errorbox{background-color:#fee7e6;border-color:#d33}.warningbox{background-color:#fef6e7;border-color:#fc3}.successbox{background-color:#d5fdf4;border-color:#14866d}.toctogglecheckbox:checked ~ ul{display:none}@media screen{html,body{height:100%}:focus{outline-color:#3366cc}html{font-size:100%}html,body{font-family:sans-serif}ul{list-style-image:url(skins/Vector/resources/common/images/bullet-icon.svg%3Fd4515)}pre,.mw-code{line-height:1.3}.mw-jump-link:not(:focus){display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}.mw-editsection,.mw-editsection-like{font-family:sans-serif}.mw-body h1,.mw-body-content h1,.mw-body-content h2{margin-bottom:0.25em;padding:0;font-family:'Linux Libertine','Georgia','Times',serif;line-height:1.3}.mw-body h1:lang(ja),.mw-body-content h1:lang(ja),.mw-body-content h2:lang(ja),.mw-body h1:lang(he),.mw-body-content h1:lang(he),.mw-body-content h2:lang(he),.mw-body h1:lang(ko),.mw-body-content h1:lang(ko),.mw-body-content h2:lang(ko){font-family:sans-serif}.mw-body h1:lang(my),.mw-body-content h1:lang(my),.mw-body-content h2:lang(my){line-height:normal}.mw-body h1,.mw-body-content h1{font-size:1.8em}.vector-body{font-size:0.875em;font-size:calc(1em * 0.875);line-height:1.6}.vector-body h1{margin-top:1em}.vector-body h2{margin-top:1em;font-size:1.5em}.vector-body h3,.vector-body h4,.vector-body h5,.vector-body h6{margin-top:0.3em;margin-bottom:0;padding-bottom:0;line-height:1.6}.vector-body h3{font-size:1.2em}.vector-body h3,.vector-body h4{font-weight:bold}.vector-body h4,.vector-body h5,.vector-body h6{font-size:100%}.vector-body .toc h2{font-family:sans-serif;font-size:100%}.vector-body p{margin:0.5em 0}.vector-body blockquote{border-left:4px solid #eaecf0;padding:8px 32px}.vector-body blockquote > :first-child{margin-top:0}.vector-body blockquote > :last-child{margin-bottom:0}.mw-parser-output .external{background-image:url(skins/Vector/resources/common/images/external-link-ltr-icon.svg%3F48e54);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-body .mw-indicators{font-size:0.875em;line-height:1.6;position:relative}.mw-body .mw-indicator{display:inline-block}#siteNotice{font-size:0.8em}.mw-portlet h3{display:none}.mw-portlet ul{list-style:none none;margin:0}.vector-menu-tabs{background-position:left bottom;float:left;height:2.5em;padding-left:1px}.vector-menu-tabs h3{display:none}.vector-menu-tabs ul{float:left;height:100%;list-style:none none;margin:0;padding:0}.vector-menu-tabs li{background-image:url(skins/Vector/resources/common/images/tab-normal-fade.png%3F1cc52);background-image:linear-gradient(to top,#77c1f6 0,#e8f2f8 1px,#ffffff 100%);background-position:left bottom;background-repeat:repeat-x;float:left;display:block;height:100%;margin:0;padding:0;line-height:1.125em;white-space:nowrap}.vector-menu-tabs li a{background-position:right bottom;color:#0645ad;-moz-box-sizing:border-box;box-sizing:border-box;display:block;float:left;height:3.07692308em;position:relative;padding-top:1.25em;padding-left:8px;padding-right:8px;font-size:0.8125em;cursor:pointer}.vector-menu-tabs .new a,.vector-menu-tabs .new a:visited{color:#dd3333}.vector-menu-tabs .selected{background:#ffffff}.vector-menu-tabs .selected a,.vector-menu-tabs .selected a:visited{color:#202122;text-decoration:none}.vector-menu-tabs .icon a{background-position:right bottom;background-repeat:no-repeat}@-webkit-keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.vector-menu-tabs .mw-watchlink.icon a{width:2.15384615em;height:0;padding:3.07692308em 0 0 0;overflow:hidden}.vector-menu-tabs .mw-watchlink.icon a:before{background-repeat:no-repeat;background-position:50% 50%;content:'';display:block;position:absolute;top:1.07692308em;left:0.38461538em;width:1.23076923em;height:1.23076923em}.vector-menu-tabs #ca-unwatch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon.svg%3Fc5368)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon.svg%3F195f5)}.vector-menu-tabs #ca-watch.icon a:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon.svg%3F6ab6f)}.vector-menu-tabs #ca-unwatch.icon a:hover:before,.vector-menu-tabs #ca-unwatch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-icon-hl.svg%3F5e652)}.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:hover:before,.vector-menu-tabs #ca-unwatch.mw-watchlink-temp.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg%3Ff3db6)}.vector-menu-tabs #ca-watch.icon a:hover:before,.vector-menu-tabs #ca-watch.icon a:focus:before{background-image:linear-gradient(transparent,transparent),url(skins/Vector/resources/common/images/watch-icon-hl.svg%3F9bf90)}.vector-menu-tabs #ca-unwatch.icon .loading:before,.vector-menu-tabs #ca-watch.icon .loading:before{-webkit-animation:rotate 700ms infinite linear;animation:rotate 700ms infinite linear;outline:0;cursor:default;pointer-events:none;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}.vector-menu-dropdown{direction:ltr;float:left;cursor:pointer;position:relative;line-height:1.125em}.vector-menu-dropdown h3{color:#54595d;position:relative;display:block;-moz-box-sizing:border-box;box-sizing:border-box}.vector-menu-dropdown h3:after{content:'';background-image:url(skins/Vector/resources/common/images/arrow-down.svg%3F9426f);background-position:100% 50%;background-repeat:no-repeat;position:absolute;top:0.76923077em;right:8px;bottom:0;width:1.23076923em;opacity:0.84}.vector-menu-dropdown h3:hover,.vector-menu-dropdown h3:focus{color:#202122}.vector-menu-dropdown h3:hover:after,.vector-menu-dropdown h3:focus:after{opacity:1}.vector-menu-dropdown .vector-menu-content{background-color:#ffffff;list-style:none none;min-width:100%;position:absolute;top:2.5em;left:-1px;margin:0;border:1px solid #a2a9b1;border-top-width:0;padding:0;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:left;opacity:0;visibility:hidden;-webkit-transition:opacity 100ms;transition:opacity 100ms;z-index:3}.vector-menu-dropdown .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox-collapsed{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;display:none}.vector-menu-dropdown .vector-menu-checkbox:checked + .vector-menu-heading .vector-menu-checkbox-expanded,.vector-menu-dropdown .vector-menu-checkbox:not(:checked) + .vector-menu-heading .vector-menu-checkbox-collapsed{display:inline}.vector-menu-dropdown .vector-menu-checkbox:checked ~ .vector-menu-content{opacity:1;visibility:visible}.vector-menu-dropdown ul{list-style:none}.vector-menu-dropdown li{padding:0;margin:0;text-align:left;line-height:1em}.vector-menu-dropdown li a{padding:0.625em;color:#0645ad;display:block;white-space:nowrap;cursor:pointer}.vector-menu-dropdown li a span{font-size:0.8125em}.vector-menu-dropdown .selected a,.vector-menu-dropdown .selected a:visited{color:#202122;text-decoration:none}#mw-head .vector-menu-dropdown h3{background-position:right bottom;float:left;height:3.07692308em;margin:0 -1px 0 0;padding-right:1.84615385em}.vector-menu-tabs,.vector-menu-tabs a,#mw-head .vector-menu-dropdown h3{background-image:url(skins/Vector/resources/common/images/tab-separator.png%3F09d4b);background-image:linear-gradient(to bottom,rgba(167,215,249,0) 0,#a7d7f9 100%);background-repeat:no-repeat;background-size:1px 100%}.vector-menu-checkbox{cursor:pointer;position:absolute;top:0;left:0;z-index:1;opacity:0;width:100%;height:100%;margin:0;padding:0;display:none}:not(:checked) > .vector-menu-checkbox{display:block}.mw-portlet-variants h3,.mw-portlet-cactions h3,.vector-menu-dropdown-noicon h3{padding-top:1.25em;padding-left:8px;padding-right:1.84615385em;font-size:0.8125em;font-weight:normal}.mw-portlet-variants .vector-menu-checkbox:focus + h3,.mw-portlet-cactions .vector-menu-checkbox:focus + h3,.vector-menu-dropdown-noicon .vector-menu-checkbox:focus + h3{outline:dotted 1px;outline:auto -webkit-focus-ring-color}.vector-menu-portal{margin:0 0.6em 0 0.7em;padding:0.25em 0;direction:ltr}.vector-menu-portal h3{display:block;background-image:url(skins/Vector/resources/common/images/portal-separator.png%3F4ab04);background-image:linear-gradient(to right,rgba(200,204,209,0) 0,#c8ccd1 33%,#c8ccd1 66%,rgba(200,204,209,0) 100%);background-position:center bottom;background-repeat:no-repeat;background-size:100% 1px;color:#54595d;margin:0.5em 0 0 0.66666667em;border:0;padding:0.25em 0;font-size:0.75em;font-weight:normal;cursor:default}.vector-menu-portal .vector-menu-content{margin-left:0.5em;padding-top:0}.vector-menu-portal .vector-menu-content ul{list-style:none none;margin:0;padding-top:0.3em}.vector-menu-portal .vector-menu-content li{margin:0;padding:0.25em 0;font-size:0.75em;line-height:1.125em;word-wrap:break-word}.vector-menu-portal .vector-menu-content li a{color:#0645ad}.vector-menu-portal .vector-menu-content li a:visited{color:#0b0080}#p-search h3{display:block;position:absolute !important;clip:rect(1px,1px,1px,1px);width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden}#simpleSearch{position:relative;height:100%}#searchInput{background-color:rgba(255,255,255,0.5);color:#000000;width:100%;height:2.15384615em;-moz-box-sizing:border-box;box-sizing:border-box;border:1px solid #a2a9b1;border-radius:2px;padding:5px 2.15384615em 5px 0.4em;box-shadow:inset 0 0 0 1px transparent;font-family:inherit;font-size:0.8125em;direction:ltr;-webkit-transition:border-color 250ms,box-shadow 250ms;transition:border-color 250ms,box-shadow 250ms;-webkit-appearance:none;-moz-appearance:textfield}#simpleSearch:hover #searchInput{border-color:#72777d}#searchInput:focus,#simpleSearch:hover #searchInput:focus{outline:0;border-color:#3366cc;box-shadow:inset 0 0 0 1px #3366cc}#searchInput::-webkit-input-placeholder{color:#72777d;opacity:1}#searchInput:-ms-input-placeholder{color:#72777d;opacity:1}#searchInput::-moz-placeholder{color:#72777d;opacity:1}#searchInput::placeholder{color:#72777d;opacity:1}#searchInput::-webkit-search-decoration,#searchInput::-webkit-search-cancel-button,#searchInput::-webkit-search-results-button,#searchInput::-webkit-search-results-decoration{display:none}#searchButton,#mw-searchButton{background-color:transparent;position:absolute;top:1px;bottom:1px;right:1px;min-width:28px;width:2.15384615em;border:0;padding:0;cursor:pointer;font-size:0.8125em;direction:ltr;text-indent:-99999px;white-space:nowrap;overflow:hidden;z-index:1}#searchButton{background:no-repeat center / 1.23076923em url(skins/Vector/resources/common/images/search.svg%3Fbbf78);opacity:0.67}.search-toggle{display:block;float:right}.vector-search-box-collapses > div{display:none}#p-logo{width:10em;height:160px;margin-bottom:1em}#p-logo a{background-position:center center;background-repeat:no-repeat;display:block;width:10em;height:160px;text-decoration:none}.mw-footer{direction:ltr}.mw-footer ul{list-style:none none;margin:0;padding:0}.mw-footer li{color:#202122;margin:0;padding:0.5em 0;font-size:0.75em}#footer-icons{float:right}#footer-icons li{float:left;margin-left:0.5em;line-height:2;text-align:right}#footer-info li{line-height:1.4}#footer-places li{float:left;margin-right:1em;line-height:2}}@media screen and (min-width:1000px){.search-toggle{display:none}}@media screen and (min-width:1000px){.vector-search-box-collapses > div{display:block}}@media print{.toc,body{padding:10px;font-family:'Linux Libertine','Georgia','Times',serif}.printfooter,.mw-footer,.thumb,table,ol,dl,ul,h3,h4,h5,h6{font-family:sans-serif}img{font-family:'Linux Libertine','Georgia','Times',serif}.mw-body a:not(.image){border-bottom:1px solid #aaa}.firstHeading{font-size:25pt;line-height:28pt;margin-bottom:20px;padding-bottom:5px}.firstHeading,h2{overflow:hidden;border-bottom:2px solid #000000}h3,h4,h5,h6{margin:30px 0 0}h2,h3,h4,h5,h6{padding:0;position:relative}h2{font-size:18pt;line-height:24pt;margin-bottom:0.25em}h3{font-size:14pt;line-height:20pt}h4,h5,h6{font-size:12pt;line-height:16pt}p{font-size:12pt;line-height:16pt;margin-top:5px;text-align:justify}p:before{content:'';display:block;width:120pt;overflow:hidden}blockquote{border-left:2px solid #000000;padding-left:20px}ol,ul{margin:10px 0 0 1.6em;padding:0}ol li,ul li{padding:2px 0;font-size:12pt}table ol li,table ul li{font-size:inherit}.toc{page-break-before:avoid;page-break-after:avoid;background:none;border:0;display:table}.toc a{border:0;font-weight:normal}.toc > ul > li{margin-bottom:4px;font-weight:bold}.toc ul{margin:0;list-style:none}.toc ul ul{padding-left:30px}.toc li.toclevel-1 > a{font-size:12pt;font-weight:bold}#mw-navigation,.noprint,.mw-jump-link,.mw-portlet-lang,.toc .tocnumber{display:none}.printfooter{margin-top:10px;border-top:3px solid #000000;padding-top:10px;font-size:10pt;clear:both}.mw-footer{margin-top:12px;border-top:1px solid #eeeeee;padding-top:5px}#footer-info{margin:0;padding:0}#footer-info li{color:#999;list-style:none;display:block;padding-bottom:10px;font-size:10pt}#footer-info li a{color:#999 !important}#footer-info-lastmod{color:#000000;font-size:12pt;font-weight:bold}}@media screen{body{background-color:#f6f6f6;overflow-y:scroll}.mw-body,.parsoid-body{background-color:#ffffff;color:#202122;direction:ltr;padding:1em}#p-personal{position:absolute;top:6px;right:0.75em;z-index:100}#p-personal ul{padding-left:10em}#p-personal li{float:left;margin-left:0.75em;padding-top:0.5em;line-height:1.16666667}.mw-body,#mw-data-after-content{margin-left:10em}.mw-body{margin-top:-1px;border:1px solid #a7d7f9;border-right-width:0}.mw-body .firstHeading{overflow:visible}.mw-indicators{z-index:1}.vector-body{position:relative;z-index:0}#mw-page-base{background-color:#fbfbfb;background-image:linear-gradient(to bottom,#ffffff 50%,#f6f6f6 100%);background-position:bottom left;height:5em}#mw-head-base{margin-top:-5em;margin-left:10em;height:5em}#mw-navigation h2{position:absolute;top:-9999px}#mw-head{position:absolute;top:0;right:0;width:100%}#left-navigation{float:left;margin-left:10em;margin-top:2.5em;margin-bottom:-2.5em}#right-navigation{float:right;margin-top:2.5em}#p-search{float:left;margin-right:0.5em;margin-left:0.5em}#p-search form{margin:0.5em 0 0}#simpleSearch{min-width:5em;width:13.2em;width:20vw;max-width:20em}#mw-panel{position:absolute;top:0;width:10em;left:0}#p-logo + .mw-portlet h3{display:none}.mw-footer{margin-left:10em;margin-top:0;padding:0.75em}.mw-content-ltr{direction:ltr}.mw-content-rtl{direction:rtl}.vector-menu-dropdown:not(.vector-user-menu) li{font-size:0.8125em}.vector-menu-dropdown:not(.vector-user-menu):hover .vector-menu-content{opacity:1;visibility:visible}.vector-menu-checkbox:checked + h3:after{transform:scaleY(-1)}#mw-panel{font-size:inherit}#mw-panel nav:first-child{background-image:none}#mw-panel nav:first-child h3{display:none}#mw-panel nav:first-child .vector-menu-content{margin-left:0.5em}.vector-user-menu-legacy{}.vector-user-menu-legacy li{font-size:0.75em}.vector-user-menu-legacy #pt-anonuserpage,.vector-user-menu-legacy #pt-userpage a{background-position:left 0.33333333em;background-image:url(skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg%3Fb7f58);background-repeat:no-repeat;background-size:1.16666667em 1.16666667em;padding-top:0.5em;padding-left:1.5em}.vector-user-menu-legacy #pt-userpage{padding-top:0}.vector-user-menu-legacy #pt-userpage a{display:inline-block}.vector-user-menu-legacy #pt-anonuserpage{color:#54595d}.vector-user-menu-legacy .vector-menu-content-list{display:flex;flex-wrap:wrap;flex-grow:1;justify-content:flex-end;align-items:baseline}}@media screen and (min-width:982px){.mw-body,#mw-head-base,#left-navigation,#mw-data-after-content,.mw-footer{margin-left:11em}.mw-body{padding:1.25em 1.5em 1.5em 1.5em}.mw-footer{padding:1.25em}#mw-panel{padding-left:0.5em}#p-search{margin-right:1em}#p-personal{right:1em}}@media print{.noprint,.mw-cite-backlink,.mw-redirectedfrom,.patrollink,#column-one,#footer-places,#mw-navigation,#f-poweredbyico,#f-copyrightico,li#about,li#disclaimer,li#mobileview,li#privacy{display:none}#footer{background:#fff;color:#000;margin-top:1em;border-top:1pt solid #aaa;padding-top:5px;direction:ltr}}.mw-wiki-logo{background-image:url(images/open-iov.png%3Fd7807)}@media print{table.floatright,div.floatright,div.tright{float:right;clear:right}table.floatleft,div.floatleft,div.tleft{float:left;clear:left}div.tleft{margin:0.5em 1.4em 1.3em 0}div.tright{margin:0.5em 0 1.3em 1.4em}table.floatright,div.floatright{margin:0 0 0.5em 0.5em;border:0}table.floatleft,div.floatleft{margin:0 0.5em 0.5em 0;border:0}div.thumb{background-color:transparent;width:auto}div.thumb a{border-bottom:0}div.thumbinner{background-color:#fff;border:0;border-radius:2px;padding:5px;font-size:10pt;color:#666;text-align:center;overflow:hidden;min-width:100px}.thumbcaption{text-align:left;line-height:1.4;padding:3px}.thumbborder{border:1pt solid #ddd}.thumb{page-break-inside:avoid}.magnify{display:none}.mw-parser-output a.external{}.mw-parser-output a.external.text:after,.mw-parser-output a.external.autonumber:after{content:' (' attr(href) ')';word-break:break-all;word-wrap:break-word}.mw-parser-output a.external.text[href^='//']:after,.mw-parser-output a.external.autonumber[href^='//']:after{content:' (https:' attr(href) ')'}.wikitable{background:#fff;margin:1em 0;border:1pt solid #aaa;border-collapse:collapse;font-size:10pt;page-break-inside:avoid}.wikitable > caption{padding:5px;font-size:10pt}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{background:#fff !important;color:#000 !important;border:1pt solid #aaa;padding:0.4em 0.6em}.wikitable > tr > th,.wikitable > * > tr > th{text-align:center}table.listing,table.listing td{border:1pt solid #000;border-collapse:collapse}.mw-editsection,.mw-editsection-like,.mw-indicators,#siteNotice,.usermessage{display:none}.printfooter{padding:1em 0}.catlinks ul{display:inline;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.15;margin:0.1em 0;border-left:1pt solid #aaa;padding:0 0.4em}.catlinks li:first-child{border-left:0;padding-left:0.2em}.mw-hidden-catlinks,.catlinks{display:none}.center{text-align:center}a{background:none !important;padding:0 !important}a,a.external,a.new,a.stub{color:inherit !important;text-decoration:inherit !important}dt{font-weight:bold}h1,h2,h3,h4,h5,h6{font-weight:bold;page-break-after:avoid;page-break-before:avoid}p{margin:1em 0;line-height:1.2;orphans:3;widows:3}img,figure{page-break-inside:avoid}img{border:0;vertical-align:middle}pre,.mw-code{background:#fff;color:#000;border:1pt dashed #000;padding:1em;font-size:8pt;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}ul{list-style-type:square}.toctogglecheckbox:checked + .toctitle{display:none}.toc{background-color:#f9f9f9;border:1pt solid #aaa;padding:5px;display:table}.tocnumber,.toctext{display:table-cell}.tocnumber{padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}}@media screen{div.tright,div.floatright,table.floatright{clear:right;float:right}div.tleft,div.floatleft,table.floatleft{float:left;clear:left}.mw-content-ltr .thumbcaption{text-align:left}.mw-content-ltr .magnify{float:right}.mw-content-rtl .thumbcaption{text-align:right}.mw-content-rtl .magnify{float:left}div.floatright,table.floatright{margin:0 0 0.5em 0.5em}div.floatleft,table.floatleft{margin:0 0.5em 0.5em 0}div.thumb{margin-bottom:0.5em;width:auto;background-color:transparent}div.thumbinner{border:1px solid #c8ccd1;padding:3px;background-color:#f8f9fa;font-size:94%;text-align:center;overflow:hidden}.thumbimage{background-color:#ffffff;border:1px solid #c8ccd1}.thumbcaption{border:0;line-height:1.4em;padding:3px;font-size:94%;text-align:left}.magnify{float:right;margin-left:3px}.magnify a{display:block;text-indent:15px;white-space:nowrap;overflow:hidden;width:15px;height:11px;background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.thumbborder{border:1px solid #eaecf0}.mw-content-ltr .magnify{margin-left:3px;margin-right:0}.mw-content-ltr .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg%3F8330e)}.mw-content-rtl .magnify{margin-left:0;margin-right:3px}.mw-content-rtl .magnify a{background-image:url(resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg%3F38fd5)}div.tright{margin:0.5em 0 1.3em 1.4em}div.tleft{margin:0.5em 1.4em 1.3em 0}a.stub{color:#772233}a.new{color:#dd3333}a.mw-selflink{color:inherit;font-weight:bold;text-decoration:inherit}a.mw-selflink:hover{cursor:inherit;text-decoration:inherit}a.mw-selflink:active,a.mw-selflink:visited{color:inherit}a.new:visited{color:#a55858}.mw-parser-output a.extiw,.mw-parser-output a.external{color:#3366bb}.mw-parser-output a.extiw:visited,.mw-parser-output a.external:visited{color:#663366}.mw-parser-output a.extiw:active,.mw-parser-output a.external:active{color:#bb6633}.mw-underline-always a{text-decoration:underline}.mw-underline-never a{text-decoration:none}.plainlinks a.external{background:none !important;padding:0 !important}.mw-parser-output a.external,.link-https{background-image:url(resources/src/mediawiki.skinning/images/external-ltr.svg%3F59558);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='mailto:'],.link-mailto{background-image:url(resources/src/mediawiki.skinning/images/mail.svg%3F8a79c);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='ftp://'],.link-ftp{background-image:url(resources/src/mediawiki.skinning/images/ftp-ltr.svg%3Fc5643);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href^='irc://'],.mw-parser-output a.external[href^='ircs://'],.link-irc{background-image:url(resources/src/mediawiki.skinning/images/chat-ltr.svg%3Fe0649);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogg'],.mw-parser-output a.external[href$='.OGG'],.mw-parser-output a.external[href$='.mid'],.mw-parser-output a.external[href$='.MID'],.mw-parser-output a.external[href$='.midi'],.mw-parser-output a.external[href$='.MIDI'],.mw-parser-output a.external[href$='.mp3'],.mw-parser-output a.external[href$='.MP3'],.mw-parser-output a.external[href$='.wav'],.mw-parser-output a.external[href$='.WAV'],.mw-parser-output a.external[href$='.wma'],.mw-parser-output a.external[href$='.WMA'],.link-audio{background-image:url(resources/src/mediawiki.skinning/images/audio-ltr.svg%3F74d04);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.ogm'],.mw-parser-output a.external[href$='.OGM'],.mw-parser-output a.external[href$='.avi'],.mw-parser-output a.external[href$='.AVI'],.mw-parser-output a.external[href$='.mpeg'],.mw-parser-output a.external[href$='.MPEG'],.mw-parser-output a.external[href$='.mpg'],.mw-parser-output a.external[href$='.MPG'],.link-video{background-image:url(resources/src/mediawiki.skinning/images/video.svg%3Fa3758);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.external[href$='.pdf'],.mw-parser-output a.external[href$='.PDF'],.mw-parser-output a.external[href*='.pdf#'],.mw-parser-output a.external[href*='.PDF#'],.mw-parser-output a.external[href*='.pdf?'],.mw-parser-output a.external[href*='.PDF?'],.link-document{background-image:url(resources/src/mediawiki.skinning/images/document-ltr.svg%3F0bf90);background-position:center right;background-repeat:no-repeat;padding-right:13px}.mw-parser-output a.extiw,.mw-parser-output a.extiw:active{color:#36b}.mw-parser-output a.external{color:#36b}.mw-body-content:after{clear:both;content:'';display:block}.mw-body-content a.external.free{word-wrap:break-word}.mw-body-content .error{font-size:larger;color:#d33}.rtl .mw-parser-output a.external.free,.rtl .mw-parser-output a.external.autonumber{direction:ltr;unicode-bidi:embed}.mw-hide-empty-elt .mw-parser-output .mw-empty-elt{display:none}.wikitable{background-color:#f8f9fa;color:#202122;margin:1em 0;border:1px solid #a2a9b1;border-collapse:collapse}.wikitable > tr > th,.wikitable > tr > td,.wikitable > * > tr > th,.wikitable > * > tr > td{border:1px solid #a2a9b1;padding:0.2em 0.4em}.wikitable > tr > th,.wikitable > * > tr > th{background-color:#eaecf0;text-align:center}.wikitable > caption{font-weight:bold}.usermessage{background-color:#fef6e7;border:1px solid #fc3;color:#000;font-weight:bold;margin:2em 0 1em;padding:0.5em 1em;vertical-align:middle}#siteNotice{position:relative;text-align:center;margin:0}#localNotice{margin-bottom:0.9em}#siteSub{display:none}#contentSub,#contentSub2{font-size:84%;line-height:1.2em;margin:0 0 1.4em 1em;color:#54595d;width:auto}span.subpages{display:block}.emptyPortlet{display:none}.printfooter,.client-nojs #t-print{display:none}.mw-indicators{float:right}.mw-editsection{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mw-editsection,.mw-editsection-like{font-size:small;font-weight:normal;margin-left:1em;vertical-align:baseline;line-height:1em}.mw-content-ltr .mw-editsection,.mw-content-rtl .mw-content-ltr .mw-editsection,.mw-content-ltr .mw-editsection-like,.mw-content-rtl .mw-content-ltr .mw-editsection-like{margin-left:1em;margin-right:0}.mw-content-rtl .mw-editsection,.mw-content-ltr .mw-content-rtl .mw-editsection,.mw-content-rtl .mw-editsection-like,.mw-content-ltr .mw-content-rtl .mw-editsection-like{margin-right:1em;margin-left:0}#catlinks{text-align:left}.catlinks{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;margin-top:1em;clear:both}.catlinks ul{display:inline;margin:0;padding:0;list-style:none}.catlinks li{display:inline-block;line-height:1.25em;border-left:1px solid #a2a9b1;margin:0.125em 0;padding:0 0.5em}.catlinks li:first-child{padding-left:0.25em;border-left:0}.catlinks li a.mw-redirect{font-style:italic}.mw-hidden-cats-hidden,.catlinks-allhidden{display:none}a{text-decoration:none;color:#0645ad;background:none}a:not([href]){cursor:pointer}a:visited{color:#0b0080}a:active{color:#faa700}a:hover,a:focus{text-decoration:underline}a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}img{border:0;vertical-align:middle}hr{height:1px;background-color:#a2a9b1;border:0;margin:0.2em 0}h1,h2,h3,h4,h5,h6{color:#000;margin:0;padding-top:0.5em;padding-bottom:0.17em;overflow:hidden}h1,h2{margin-bottom:0.6em;border-bottom:1px solid #a2a9b1}h3,h4,h5{margin-bottom:0.3em}h1{font-size:188%;font-weight:normal}h2{font-size:150%;font-weight:normal}h3{font-size:128%}h4{font-size:116%}h5{font-size:108%}h6{font-size:100%}p{margin:0.4em 0 0.5em 0}p img{margin:0}ul{margin:0.3em 0 0 1.6em;padding:0}ol{margin:0.3em 0 0 3.2em;padding:0;list-style-image:none}li{margin-bottom:0.1em}dt{font-weight:bold;margin-bottom:0.1em}dl{margin-top:0.2em;margin-bottom:0.5em}dd{margin-left:1.6em;margin-bottom:0.1em}pre,code,tt,kbd,samp,.mw-code{font-family:monospace,monospace}pre,code,.mw-code{background-color:#f8f9fa;color:#000;border:1px solid #eaecf0}code{border-radius:2px;padding:1px 4px}pre,.mw-code{padding:1em;white-space:pre-wrap;overflow-x:hidden;word-wrap:break-word}table{font-size:100%}fieldset{border:1px solid #2a4b8d;margin:1em 0 1em 0;padding:0 1em 1em}legend{padding:0.5em;font-size:95%}form{border:0;margin:0}textarea{display:block;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;border:1px solid #c8ccd1;padding:0.1em}.center{width:100%;text-align:center}*.center *{margin-left:auto;margin-right:auto}.small{font-size:94%}table.small{font-size:100%}@counter-style meetei{system:numeric;symbols:'\ABF0' '\ABF1' '\ABF2' '\ABF3' '\ABF4' '\ABF5' '\ABF6' '\ABF7' '\ABF8' '\ABF9';suffix:') '}@counter-style santali{system:numeric;symbols:'\1C50' '\1C51' '\1C52' '\1C53' '\1C54' '\1C55' '\1C56' '\1C57' '\1C58' '\1C59'}ol:lang(azb) li,ol:lang(bcc) li,ol:lang(bgn) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(lrc) li,ol:lang(luz) li,ol:lang(mzn) li{list-style-type:persian}ol:lang(ckb) li,ol:lang(sdh) li{list-style-type:arabic-indic}ol:lang(hi) li,ol:lang(mai) li,ol:lang(mr) li,ol:lang(ne) li{list-style-type:devanagari}ol:lang(as) li,ol:lang(bn) li{list-style-type:bengali}ol:lang(mni) li{list-style-type:meetei}ol:lang(or) li{list-style-type:oriya}ol:lang(sat) li{list-style-type:santali}.mw-content-ltr ul,.mw-content-rtl .mw-content-ltr ul{margin:0.3em 0 0 1.6em;padding:0}.mw-content-rtl ul,.mw-content-ltr .mw-content-rtl ul{margin:0.3em 1.6em 0 0;padding:0}.mw-content-ltr ol,.mw-content-rtl .mw-content-ltr ol{margin:0.3em 0 0 3.2em;padding:0}.mw-content-rtl ol,.mw-content-ltr .mw-content-rtl ol{margin:0.3em 3.2em 0 0;padding:0}.mw-content-ltr dd,.mw-content-rtl .mw-content-ltr dd{margin-left:1.6em;margin-right:0}.mw-content-rtl dd,.mw-content-ltr .mw-content-rtl dd{margin-right:1.6em;margin-left:0}h1:lang(anp),h1:lang(as),h1:lang(bh),h1:lang(bho),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ks),h1:lang(ml),h1:lang(mr),h1:lang(my),h1:lang(mai),h1:lang(ne),h1:lang(new),h1:lang(or),h1:lang(pa),h1:lang(pi),h1:lang(sa),h1:lang(ta),h1:lang(te){line-height:1.6em !important}h2:lang(anp),h3:lang(anp),h4:lang(anp),h5:lang(anp),h6:lang(anp),h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bho),h3:lang(bho),h4:lang(bho),h5:lang(bho),h6:lang(bho),h2:lang(bh),h3:lang(bh),h4:lang(bh),h5:lang(bh),h6:lang(bh),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ks),h3:lang(ks),h4:lang(ks),h5:lang(ks),h6:lang(ks),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(my),h3:lang(my),h4:lang(my),h5:lang(my),h6:lang(my),h2:lang(mai),h3:lang(mai),h4:lang(mai),h5:lang(mai),h6:lang(mai),h2:lang(ne),h3:lang(ne),h4:lang(ne),h5:lang(ne),h6:lang(ne),h2:lang(new),h3:lang(new),h4:lang(new),h5:lang(new),h6:lang(new),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(pi),h3:lang(pi),h4:lang(pi),h5:lang(pi),h6:lang(pi),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te){line-height:1.4em}h2:lang(th){line-height:1.6}.toc,.toccolours{border:1px solid #a2a9b1;background-color:#f8f9fa;padding:5px;font-size:95%}.toc{display:table;padding:7px}.toc h2{display:inline;border:0;padding:0;font-size:100%;font-weight:bold}.toc .toctitle{text-align:center}.toc ul{list-style:none;margin:0.3em 0;padding:0;text-align:left}.toc ul ul{margin:0 0 0 2em}table.toc{border-collapse:collapse}table.toc td{padding:0}.tocnumber,.toctext{display:table-cell;text-decoration:inherit}.tocnumber{color:#202122;padding-left:0;padding-right:0.5em}.mw-content-ltr .tocnumber{padding-left:0;padding-right:0.5em}.mw-content-rtl .tocnumber{padding-left:0.5em;padding-right:0}.toctogglecheckbox{display:inline !important;position:absolute;opacity:0;z-index:-1}.toctogglespan{font-size:94%}.toctogglespan:before{content:' ['}.toctogglespan:after{content:']'}.toctogglelabel{cursor:pointer;color:#0645ad}.toctogglelabel:hover{text-decoration:underline}.toctogglecheckbox:focus + .toctitle .toctogglelabel{text-decoration:underline;outline:dotted 1px;outline:auto -webkit-focus-ring-color}.toctogglecheckbox:checked + .toctitle .toctogglelabel:after{content:'show'}.toctogglecheckbox:not(:checked) + .toctitle .toctogglelabel:after{content:'hide'}.toc .toctitle{direction:ltr}.mw-content-ltr .toc ul,.mw-content-rtl .mw-content-ltr .toc ul{text-align:left}.mw-content-rtl .toc ul,.mw-content-ltr .mw-content-rtl .toc ul{text-align:right}.mw-content-ltr .toc ul ul,.mw-content-rtl .mw-content-ltr .toc ul ul{margin:0 0 0 2em}.mw-content-rtl .toc ul ul,.mw-content-ltr .mw-content-rtl .toc ul ul{margin:0 2em 0 0}} \ No newline at end of file diff --git a/wiki/open-iov.org/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector b/wiki/open-iov.org/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector new file mode 100644 index 0000000..c66167e --- /dev/null +++ b/wiki/open-iov.org/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector @@ -0,0 +1,37 @@ +function isCompatible(ua){return!!((function(){'use strict';return!this&&Function.prototype.bind&&window.JSON;}())&&'querySelector'in document&&'localStorage'in window&&'addEventListener'in window&&!ua.match(/MSIE 10|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$|googleweblight|PLAYSTATION|PlayStation/));}if(!isCompatible(navigator.userAgent)){document.documentElement.className=document.documentElement.className.replace(/(^|\s)client-js(\s|$)/,'$1client-nojs$2');while(window.NORLQ&&NORLQ[0]){NORLQ.shift()();}NORLQ={push:function(fn){fn();}};RLQ={push:function(){}};}else{if(window.performance&&performance.mark){performance.mark('mwStartup');}(function(){'use strict';var mw,log,con=window.console;function logError(topic,data){var msg,e=data.exception;if(con.log){msg=(e?'Exception':'Error')+' in '+data.source+(data.module?' in module '+data.module:'')+(e?':':'.');con.log(msg);if(e&&con.warn){con.warn(e);}}}function Map(){this.values=Object.create(null);} +Map.prototype={constructor:Map,get:function(selection,fallback){var results,i;fallback=arguments.length>1?fallback:null;if(Array.isArray(selection)){results={};for(i=0;i1){if(typeof selection==='string'){this.values[selection]=value;return!0;}}else if(typeof selection==='object'){for(var s in selection){this.values[s]=selection[s];}return!0;}return!1;},exists:function(selection){return typeof selection==='string'&&selection in this.values;}};log=function(){};log.warn=con.warn?Function.prototype.bind.call(con.warn,con):function(){};mw={now:function(){var perf= +window.performance,navStart=perf&&perf.timing&&perf.timing.navigationStart;mw.now=navStart&&perf.now?function(){return navStart+perf.now();}:Date.now;return mw.now();},trackQueue:[],track:function(topic,data){mw.trackQueue.push({topic:topic,data:data});},trackError:function(topic,data){mw.track(topic,data);logError(topic,data);},Map:Map,config:new Map(),messages:new Map(),templates:new Map(),log:log};window.mw=window.mediaWiki=mw;}());(function(){'use strict';var StringSet,store,loader,hasOwn=Object.hasOwnProperty;function defineFallbacks(){StringSet=window.Set||function(){var set=Object.create(null);return{add:function(value){set[value]=!0;},has:function(value){return value in set;}};};}defineFallbacks();function fnv132(str){var hash=0x811C9DC5,i=0;for(;i>>0).toString(36).slice(0,5);while(hash.length<5){hash='0'+hash;}return hash;}var isES6Supported=typeof Promise=== +'function'&&Promise.prototype.finally&&/./g.flags==='g'&&(function(){try{new Function('var \ud800\udec0;');return!0;}catch(e){return!1;}}());var registry=Object.create(null),sources=Object.create(null),handlingPendingRequests=!1,pendingRequests=[],queue=[],jobs=[],willPropagate=!1,errorModules=[],baseModules=["jquery","mediawiki.base"],marker=document.querySelector('meta[name="ResourceLoaderDynamicStyles"]'),lastCssBuffer,rAF=window.requestAnimationFrame||setTimeout;function newStyleTag(text,nextNode){var el=document.createElement('style');el.appendChild(document.createTextNode(text));if(nextNode&&nextNode.parentNode){nextNode.parentNode.insertBefore(el,nextNode);}else{document.head.appendChild(el);}return el;}function flushCssBuffer(cssBuffer){if(cssBuffer===lastCssBuffer){lastCssBuffer=null;}newStyleTag(cssBuffer.cssText,marker);for(var i=0;i '+deps[i]);e. +name='DependencyError';throw e;}sortDependencies(deps[i],resolved,unresolved);}}resolved.push(module);}function resolve(modules){var resolved=baseModules.slice(),i=0;for(;i=arr.length){markModuleReady();return;}queueModuleScript(arr[j],module,function(){nestedAddScript(arr,j+1);});};try{if(Array.isArray(script)){nestedAddScript(script,0);}else if(typeof script==='function'){if(module==='jquery'){script();}else{script(window.$,window.$,loader.require,registry[module].module);}markModuleReady();}else if(typeof script==='object'&&script!==null){var mainScript=script.files[script.main];if(typeof mainScript!=='function'){throw new Error('Main file in module '+module+' must be a function');}mainScript(makeRequireFunction(registry[module],script.main),registry[module].module);markModuleReady();}else if(typeof script==='string'){domEval(script);markModuleReady();}else{markModuleReady();}}catch(e){setAndPropagate(module,'error');mw.trackError('resourceloader.exception',{exception:e,module:module,source:'module-execute'});}};if(registry[module].messages){mw.messages.set(registry[module]. +messages);}if(registry[module].templates){mw.templates.set(module,registry[module].templates);}var cssHandle=function(){cssPending++;return function(){cssPending--;if(cssPending===0){var runScriptCopy=runScript;runScript=undefined;runScriptCopy();}};};if(registry[module].style){for(key in registry[module].style){value=registry[module].style[key];media=undefined;if(key!=='url'&&key!=='css'){if(typeof value==='string'){addEmbeddedCSS(value,cssHandle());}else{media=key;key='bc-url';}}if(Array.isArray(value)){for(i=0;iloader.maxQueryLength){doRequest();l=currReqBaseLength;moduleMap=Object.create( +null);currReqModules=[];}if(!moduleMap[prefix]){moduleMap[prefix]=[];}l+=bytesAdded;moduleMap[prefix].push(suffix);currReqModules.push(modules[i]);}if(currReqModules.length){doRequest();}}}}function asyncEval(implementations,cb){if(!implementations.length){return;}mw.requestIdleCallback(function(){try{domEval(implementations.join(';'));}catch(err){cb(err);}});}function getModuleKey(module){return module in registry?(module+'@'+registry[module].version):null;}function splitModuleKey(key){var index=key.indexOf('@');if(index===-1){return{name:key,version:''};}return{name:key.slice(0,index),version:key.slice(index+1)};}function registerOne(module,version,dependencies,group,source,skip){if(module in registry){throw new Error('module already registered: '+module);}version=String(version||'');var requiresES6=version.slice(-1)==='!';if(requiresES6){version=version.slice(0,-1);}registry[module]={module:{exports:{}},packageExports:{},version:version,requiresES6:requiresES6,dependencies: +dependencies||[],group:typeof group==='undefined'?null:group,source:typeof source==='string'?source:'local',state:'registered',skip:typeof skip==='string'?skip:null};}mw.loader=loader={moduleRegistry:registry,maxQueryLength:2000,addStyleTag:newStyleTag,enqueue:enqueue,resolve:resolve,work:function(){store.init();var q=queue.length,storedImplementations=[],storedNames=[],requestNames=[],batch=new StringSet();while(q--){var module=queue[q];if(loader.getState(module)==='registered'&&!batch.has(module)){registry[module].state='loading';batch.add(module);var implementation=store.get(module);if(implementation){storedImplementations.push(implementation);storedNames.push(module);}else{requestNames.push(module);}}}queue=[];asyncEval(storedImplementations,function(err){store.stats.failed++;store.clear();mw.trackError('resourceloader.exception',{exception:err,source:'store-eval'});var failed=storedNames.filter(function(name){return registry[name].state==='loading';});batchRequest(failed);}); +batchRequest(requestNames);},addSource:function(ids){for(var id in ids){if(id in sources){throw new Error('source already registered: '+id);}sources[id]=ids[id];}},register:function(modules){if(typeof modules!=='object'){registerOne.apply(null,arguments);return;}function resolveIndex(dep){return typeof dep==='number'?modules[dep][0]:dep;}var i,j,deps;for(i=0;i1e5){return;}this.items[key]=src;},prune:function(){for(var key in this.items){if(getModuleKey(key.slice(0,key.indexOf('@')))!==key){this.stats.expired++;delete this.items[key];}}},clear:function(){this.items={};try{localStorage.removeItem(this.key);}catch(e){}},requestUpdate:function(){if(!hasPendingWrites){hasPendingWrites=!0;setTimeout(function(){mw.requestIdleCallback(flushWrites);},2000);}}};}());mw.requestIdleCallbackInternal=function(callback){setTimeout(function(){var start=mw.now();callback({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(mw.now()-start));}});},1);};mw.requestIdleCallback=window.requestIdleCallback?window.requestIdleCallback.bind(window):mw.requestIdleCallbackInternal;(function(){var +queue;mw.loader.addSource({"local":"/load.php"});mw.loader.register([["site","1iwgg",[1]],["site.styles","mc0ao",[],2],["noscript","r22l1",[],3],["filepage","1yjvh"],["user","k1cuu",[],0],["user.styles","8fimp",[],0],["user.defaults","10yqz"],["user.options","1hzgi",[6],1],["mediawiki.skinning.elements","3uifr"],["mediawiki.skinning.content","jhcq6"],["mediawiki.skinning.interface","17ags"],["jquery.makeCollapsible.styles","dm1ye"],["mediawiki.skinning.content.parsoid","x8i9i"],["mediawiki.skinning.content.externallinks","1hwh0"],["jquery","4dvbv"],["es6-polyfills","150sy",[],null,null,"return Array.prototype.find\u0026\u0026Array.prototype.findIndex\u0026\u0026Array.prototype.includes\u0026\u0026typeof Promise==='function'\u0026\u0026Promise.prototype.finally;"],["fetch-polyfill","5vxes",[15],null,null,"return typeof fetch==='function';"],["mediawiki.base","4z81x",[14]],["jquery.chosen","1l80o"],["jquery.client","fn93f"],["jquery.color","dcjsx"],["jquery.confirmable","11aay",[115]],[ +"jquery.cookie","1smd3"],["jquery.form","1wtf2"],["jquery.fullscreen","1xq4o"],["jquery.highlightText","1tsxs",[88]],["jquery.hoverIntent","1aklr"],["jquery.i18n","29w1w",[114]],["jquery.lengthLimit","1llrz",[71]],["jquery.makeCollapsible","astbu",[11]],["jquery.mw-jump","r425l"],["jquery.spinner","16kkr",[32]],["jquery.spinner.styles","o62ui"],["jquery.jStorage","1ccp7"],["jquery.suggestions","9e98z",[25]],["jquery.tablesorter","qji78",[36,116,88]],["jquery.tablesorter.styles","nu5sg"],["jquery.textSelection","152er",[19]],["jquery.throttle-debounce","xl0tk"],["jquery.tipsy","4mf5h"],["jquery.ui","o21b4"],["moment","d6rz2",[112,88]],["vue","1y3pm"],["vuex","c4upc",[15,42]],["wvui","bm4ga",[42]],["wvui-search","1n0td",[42]],["mediawiki.template","xae8l"],["mediawiki.template.mustache","nyt38",[46]],["mediawiki.apipretty","o6hd1"],["mediawiki.api","1gaiy",[76,115]],["mediawiki.content.json","1f0f4"],["mediawiki.confirmCloseWindow","86m8t"],["mediawiki.debug","zii9r",[204]],[ +"mediawiki.diff","136q8"],["mediawiki.diff.styles","1yb3i"],["mediawiki.feedback","1mkju",[307,212]],["mediawiki.feedlink","szobh"],["mediawiki.filewarning","1oumg",[204,216]],["mediawiki.ForeignApi","191mv",[59]],["mediawiki.ForeignApi.core","bd8b3",[85,49,200]],["mediawiki.helplink","1xyfo"],["mediawiki.hlist","7nynt"],["mediawiki.htmlform","1xh7h",[28,88]],["mediawiki.htmlform.ooui","14rir",[204]],["mediawiki.htmlform.styles","n60o9"],["mediawiki.htmlform.ooui.styles","kkxv5"],["mediawiki.icon","j5ayk"],["mediawiki.inspect","obqgk",[71,88]],["mediawiki.notification","18mju",[88,95]],["mediawiki.notification.convertmessagebox","3la3s",[68]],["mediawiki.notification.convertmessagebox.styles","wj24b"],["mediawiki.String","1rrm1"],["mediawiki.pager.tablePager","1qsqm"],["mediawiki.pulsatingdot","qol8q"],["mediawiki.searchSuggest","1lq7b",[34,49]],["mediawiki.storage","187em"],["mediawiki.Title","f4bbu",[71,88]],["mediawiki.Upload","1sdt0",[49]],["mediawiki.ForeignUpload","u99il",[58,77] +],["mediawiki.ForeignStructuredUpload","mi56z",[78]],["mediawiki.Upload.Dialog","issxg",[81]],["mediawiki.Upload.BookletLayout","p8fwi",[77,86,197,41,207,212,217,218]],["mediawiki.ForeignStructuredUpload.BookletLayout","cpmmk",[79,81,119,182,176]],["mediawiki.toc","ckf9m",[92]],["mediawiki.toc.styles","1d0u5"],["mediawiki.Uri","sqmr8",[88]],["mediawiki.user","burcp",[49,92]],["mediawiki.userSuggest","18k7y",[34,49]],["mediawiki.util","1g8n3",[19]],["mediawiki.viewport","1vq57"],["mediawiki.checkboxtoggle","2yuhf"],["mediawiki.checkboxtoggle.styles","15kl9"],["mediawiki.cookie","1iril",[22]],["mediawiki.experiments","1ogti"],["mediawiki.editfont.styles","1cz1l"],["mediawiki.visibleTimeout","aconv"],["mediawiki.action.delete","1dgz0",[28,204]],["mediawiki.action.edit","1nmzj",[37,98,49,94,178]],["mediawiki.action.edit.styles","1o85j"],["mediawiki.action.edit.collapsibleFooter","mu8ur",[29,66,75]],["mediawiki.action.edit.preview","1bt15",[29,31,37,54,86,204]],["mediawiki.action.history", +"vgbiv",[29]],["mediawiki.action.history.styles","1ji9u"],["mediawiki.action.protect","l4iij",[28,204]],["mediawiki.action.view.metadata","1h3zt",[110]],["mediawiki.action.view.categoryPage.styles","1054m"],["mediawiki.action.view.postEdit","10be4",[115,68]],["mediawiki.action.view.redirect","19xk3",[19]],["mediawiki.action.view.redirectPage","sqol7"],["mediawiki.action.edit.editWarning","1gdkg",[37,51,115]],["mediawiki.action.view.filepage","1f23z"],["mediawiki.action.styles","64lwx"],["mediawiki.language","1l08f",[113]],["mediawiki.cldr","erqtv",[114]],["mediawiki.libs.pluralruleparser","pvwvv"],["mediawiki.jqueryMsg","1d99y",[71,112,88,7]],["mediawiki.language.months","1mcng",[112]],["mediawiki.language.names","1bhbd",[112]],["mediawiki.language.specialCharacters","tqbmd",[112]],["mediawiki.libs.jpegmeta","c4xwo"],["mediawiki.page.gallery","18lwp",[38,121]],["mediawiki.page.gallery.styles","13e1k"],["mediawiki.page.gallery.slideshow","164d3",[49,207,226,228]],["mediawiki.page.ready" +,"12ezf",[49]],["mediawiki.page.watch.ajax","6qhk0",[49]],["mediawiki.page.image.pagination","1hhs1",[31,88]],["mediawiki.rcfilters.filters.base.styles","uslqu"],["mediawiki.rcfilters.highlightCircles.seenunseen.styles","etog4"],["mediawiki.rcfilters.filters.dm","18c4y",[85,86,200]],["mediawiki.rcfilters.filters.ui","ds4qy",[29,128,173,213,220,222,223,224,226,227]],["mediawiki.interface.helpers.styles","1m6am"],["mediawiki.special","v70qz"],["mediawiki.special.apisandbox","jvv5z",[29,85,193,179,203,218,223]],["mediawiki.special.block","pg3o5",[62,176,192,183,193,190,218,220]],["mediawiki.misc-authed-ooui","hbxyk",[63,173,178]],["mediawiki.misc-authed-pref","r18bc",[7]],["mediawiki.misc-authed-curate","18ydi",[21,31,49]],["mediawiki.special.changeslist","195oo"],["mediawiki.special.changeslist.watchlistexpiry","1jn93",[131]],["mediawiki.special.changeslist.enhanced","19caq"],["mediawiki.special.changeslist.legend","5o2l3"],["mediawiki.special.changeslist.legend.js","ntrpi",[29,92]],[ +"mediawiki.special.contributions","wcllz",[29,115,176,203]],["mediawiki.special.edittags","1x1ih",[18,28]],["mediawiki.special.import","k6r2i",[173]],["mediawiki.special.import.styles.ooui","q5fmb"],["mediawiki.special.preferences.ooui","178ed",[51,94,69,75,183,178]],["mediawiki.special.preferences.styles.ooui","otadd"],["mediawiki.special.recentchanges","13ytr",[173]],["mediawiki.special.revisionDelete","1a7mj",[28]],["mediawiki.special.search","1cmha",[195]],["mediawiki.special.search.commonsInterwikiWidget","1s9x8",[85,49]],["mediawiki.special.search.interwikiwidget.styles","14p79"],["mediawiki.special.search.styles","1vcge"],["mediawiki.special.unwatchedPages","urar8",[49]],["mediawiki.special.upload","eziaa",[31,49,51,119,131,46]],["mediawiki.special.userlogin.common.styles","no33f"],["mediawiki.special.userlogin.login.styles","12gb8"],["mediawiki.special.createaccount","l1b8g",[49]],["mediawiki.special.userlogin.signup.styles","1lcwk"],["mediawiki.special.userrights","15936",[28, +69]],["mediawiki.special.watchlist","qba1s",[49,204,223]],["mediawiki.special.version","1qu9b"],["mediawiki.legacy.config","1vyf0"],["mediawiki.legacy.commonPrint","132iv"],["mediawiki.legacy.shared","188f6"],["mediawiki.ui","ex344"],["mediawiki.ui.checkbox","1rjmw"],["mediawiki.ui.radio","13bcd"],["mediawiki.ui.anchor","w5in5"],["mediawiki.ui.button","ks7r4"],["mediawiki.ui.input","cj4cj"],["mediawiki.ui.icon","12nv3"],["mediawiki.widgets","1s7ga",[49,174,207,217]],["mediawiki.widgets.styles","rqacs"],["mediawiki.widgets.AbandonEditDialog","1abjz",[212]],["mediawiki.widgets.DateInputWidget","19nc2",[177,41,207,228]],["mediawiki.widgets.DateInputWidget.styles","17emz"],["mediawiki.widgets.visibleLengthLimit","1wyjs",[28,204]],["mediawiki.widgets.datetime","14e24",[88,204,227,228]],["mediawiki.widgets.expiry","19dtp",[179,41,207]],["mediawiki.widgets.CheckMatrixWidget","ohle3",[204]],["mediawiki.widgets.CategoryMultiselectWidget","slkpi",[58,207]],[ +"mediawiki.widgets.SelectWithInputWidget","oe83m",[184,207]],["mediawiki.widgets.SelectWithInputWidget.styles","1fufa"],["mediawiki.widgets.SizeFilterWidget","sawvf",[186,207]],["mediawiki.widgets.SizeFilterWidget.styles","15b9u"],["mediawiki.widgets.MediaSearch","serev",[58,207]],["mediawiki.widgets.Table","yxx6f",[207]],["mediawiki.widgets.TagMultiselectWidget","syz4w",[207]],["mediawiki.widgets.UserInputWidget","1oqp3",[49,207]],["mediawiki.widgets.UsersMultiselectWidget","1iec8",[49,207]],["mediawiki.widgets.NamespacesMultiselectWidget","1nuht",[207]],["mediawiki.widgets.TitlesMultiselectWidget","2tq85",[173]],["mediawiki.widgets.TagMultiselectWidget.styles","1vzh9"],["mediawiki.widgets.SearchInputWidget","1ri9j",[74,173,223]],["mediawiki.widgets.SearchInputWidget.styles","68its"],["mediawiki.widgets.StashedFileWidget","r177c",[49,204]],["mediawiki.watchstar.widgets","xg53g",[203]],["mediawiki.deflate","gu4pi"],["oojs","1ws4u"],["mediawiki.router","1f8qs",[202]],["oojs-router", +"1lb9j",[200]],["oojs-ui","yfxca",[210,207,212]],["oojs-ui-core","12tlw",[112,200,206,205,214]],["oojs-ui-core.styles","nxfa9"],["oojs-ui-core.icons","6a9cl"],["oojs-ui-widgets","1yd29",[204,209]],["oojs-ui-widgets.styles","mxy1b"],["oojs-ui-widgets.icons","29g2j"],["oojs-ui-toolbars","17pnb",[204,211]],["oojs-ui-toolbars.icons","1jzwl"],["oojs-ui-windows","l1bv1",[204,213]],["oojs-ui-windows.icons","sx5ov"],["oojs-ui.styles.indicators","1ctw9"],["oojs-ui.styles.icons-accessibility","1tybe"],["oojs-ui.styles.icons-alerts","4zo11"],["oojs-ui.styles.icons-content","oiwkz"],["oojs-ui.styles.icons-editing-advanced","1t57w"],["oojs-ui.styles.icons-editing-citation","1lbvz"],["oojs-ui.styles.icons-editing-core","1ef89"],["oojs-ui.styles.icons-editing-list","1guo9"],["oojs-ui.styles.icons-editing-styling","1cegm"],["oojs-ui.styles.icons-interactions","1nb1t"],["oojs-ui.styles.icons-layout","1whyv"],["oojs-ui.styles.icons-location","2gupd"],["oojs-ui.styles.icons-media","1997w"],[ +"oojs-ui.styles.icons-moderation","cbcp7"],["oojs-ui.styles.icons-movement","1x4b8"],["oojs-ui.styles.icons-user","1lh7w"],["oojs-ui.styles.icons-wikimedia","17yna"],["skins.monobook.styles","itq32"],["skins.monobook.scripts","1ntj3",[88,216]],["skins.timeless","1a9g1"],["skins.timeless.js","tvvtt"],["skins.vector.search","1l4sq",[85,45]],["skins.vector.styles.legacy","dnpn7"],["skins.vector.styles","pldcl"],["skins.vector.icons","1c7vs"],["skins.vector.js","1vz96",[123]],["skins.vector.legacy.js","1ynhz",[123]],["socket.io","is39l"],["dompurify","1q6qs"],["color-picker","1qvmf"],["unicodejs","v19tp"],["papaparse","17t4y"],["rangefix","f32vh"],["spark-md5","11tzz"],["ext.visualEditor.supportCheck","13m8w",[],4],["ext.visualEditor.sanitize","13ex9",[242,265],4],["ext.visualEditor.progressBarWidget","1kvty",[],4],["ext.visualEditor.tempWikitextEditorWidget","1dpuw",[94,86],4],["ext.visualEditor.desktopArticleTarget.init","b34dy",[250,248,251,262,37,85,123,75],4],[ +"ext.visualEditor.desktopArticleTarget.noscript","11b6q"],["ext.visualEditor.targetLoader","1hgg8",[264,262,37,85,75,86],4],["ext.visualEditor.desktopTarget","1stbc",[],4],["ext.visualEditor.desktopArticleTarget","j1mvc",[268,273,255,278],4],["ext.visualEditor.collabTarget","kvj48",[266,272,94,173,223,224],4],["ext.visualEditor.collabTarget.desktop","1xz3z",[257,273,255,278],4],["ext.visualEditor.collabTarget.init","1z06m",[248,173,203],4],["ext.visualEditor.collabTarget.init.styles","xc7ez"],["ext.visualEditor.ve","dkzcj",[],4],["ext.visualEditor.track","1gi8o",[261],4],["ext.visualEditor.core.utils","dp9wo",[262,203],4],["ext.visualEditor.core.utils.parsing","l3da8",[261],4],["ext.visualEditor.base","2eo05",[263,264,244],4],["ext.visualEditor.mediawiki","757jd",[265,254,35,306],4],["ext.visualEditor.mwsave","9uzbv",[276,28,31,54,223],4],["ext.visualEditor.articleTarget","1g8o6",[277,267,175],4],["ext.visualEditor.data","1qrh4",[266]],["ext.visualEditor.core","1a53b",[249,248,19,245, +246,247],4],["ext.visualEditor.commentAnnotation","158gv",[270],4],["ext.visualEditor.rebase","2c1dk",[243,287,271,229,241],4],["ext.visualEditor.core.desktop","17atj",[270],4],["ext.visualEditor.welcome","dkuyg",[203],4],["ext.visualEditor.switching","96zyx",[49,203,215,218,220],4],["ext.visualEditor.mwcore","1a2tj",[288,266,275,274,130,73,12,173],4],["ext.visualEditor.mwextensions","yfxca",[269,299,292,294,279,296,281,293,282,284],4],["ext.visualEditor.mwextensions.desktop","yfxca",[277,283,82],4],["ext.visualEditor.mwformatting","pqk1y",[276],4],["ext.visualEditor.mwimage.core","tlvwo",[276],4],["ext.visualEditor.mwimage","i8od2",[280,187,41,226,230],4],["ext.visualEditor.mwlink","tybh7",[276],4],["ext.visualEditor.mwmeta","qbzjo",[282,108],4],["ext.visualEditor.mwtransclusion","1abvs",[276,190],4],["treeDiffer","1c337"],["diffMatchPatch","clg0b"],["ext.visualEditor.checkList","1d0dh",[270],4],["ext.visualEditor.diffing","18p3j",[286,270,285],4],[ +"ext.visualEditor.diffPage.init.styles","z3r1s"],["ext.visualEditor.diffLoader","1w40j",[254],4],["ext.visualEditor.diffPage.init","x0f9t",[290,203,215,218],4],["ext.visualEditor.language","1dmyu",[270,306,117],4],["ext.visualEditor.mwlanguage","1g87s",[270],4],["ext.visualEditor.mwalienextension","1e5q0",[276],4],["ext.visualEditor.mwwikitext","jlmde",[282,94],4],["ext.visualEditor.mwgallery","1iqd2",[276,121,187,226],4],["ext.visualEditor.mwsignature","jam5r",[284],4],["ext.visualEditor.experimental","yfxca",[],4],["ext.visualEditor.icons","yfxca",[300,301,216,217,218,220,221,222,223,224,227,228,229,214],4],["ext.visualEditor.moduleIcons","3rrg2"],["ext.visualEditor.moduleIndicators","1fdxy"],["ext.wikiEditor","ldxi3",[34,37,38,40,118,86,207,217,218,219,220,221,222,226,46],5],["ext.wikiEditor.styles","14wda",[],5],["ext.nuke.confirm","qvw09",[115]],["ext.spamBlacklist.visualEditor","v2zpq"],["jquery.uls.data","14rdf"],["mediawiki.messagePoster","1wtgm",[58]]]);mw.config.set(window. +RLCONF||{});mw.loader.state(window.RLSTATE||{});mw.loader.load(window.RLPAGEMODULES||[]);queue=window.RLQ||[];RLQ=[];RLQ.push=function(fn){if(typeof fn==='function'){fn();}else{RLQ[RLQ.length]=fn;}};while(queue[0]){RLQ.push(queue.shift());}NORLQ={push:function(){}};}());} diff --git a/wiki/open-iov.org/opensearch_desc.php b/wiki/open-iov.org/opensearch_desc.php new file mode 100644 index 0000000..1047b68 --- /dev/null +++ b/wiki/open-iov.org/opensearch_desc.php @@ -0,0 +1 @@ +Open-IOV (en)Open-IOV (en)https://open-iov.org/favicon.icohttps://open-iov.org/index.php/Special:Search \ No newline at end of file diff --git a/wiki/open-iov.org/resources/assets/poweredby_mediawiki_132x47.png b/wiki/open-iov.org/resources/assets/poweredby_mediawiki_132x47.png new file mode 100644 index 0000000..6fdd238 Binary files /dev/null and b/wiki/open-iov.org/resources/assets/poweredby_mediawiki_132x47.png differ diff --git a/wiki/open-iov.org/resources/assets/poweredby_mediawiki_176x62.png b/wiki/open-iov.org/resources/assets/poweredby_mediawiki_176x62.png new file mode 100644 index 0000000..0a80838 Binary files /dev/null and b/wiki/open-iov.org/resources/assets/poweredby_mediawiki_176x62.png differ diff --git a/wiki/open-iov.org/resources/assets/poweredby_mediawiki_88x31.png b/wiki/open-iov.org/resources/assets/poweredby_mediawiki_88x31.png new file mode 100644 index 0000000..e927299 Binary files /dev/null and b/wiki/open-iov.org/resources/assets/poweredby_mediawiki_88x31.png differ diff --git a/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_both.svg?0e440 b/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_both.svg?0e440 new file mode 100644 index 0000000..29297cb --- /dev/null +++ b/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_both.svg?0e440 @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_down.svg?4b69e b/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_down.svg?4b69e new file mode 100644 index 0000000..38b22bc --- /dev/null +++ b/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_down.svg?4b69e @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_up.svg?2ff5c b/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_up.svg?2ff5c new file mode 100644 index 0000000..9278829 --- /dev/null +++ b/wiki/open-iov.org/resources/src/jquery.tablesorter.styles/images/sort_up.svg?2ff5c @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/checker.svg?ff513 b/wiki/open-iov.org/resources/src/mediawiki.action/images/checker.svg?ff513 new file mode 100644 index 0000000..86e0ab0 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.action/images/checker.svg?ff513 @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.png?778f7 b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.png?778f7 new file mode 100644 index 0000000..d99ba3c Binary files /dev/null and b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.png?778f7 differ diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.svg?3ffd5 b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.svg?3ffd5 new file mode 100644 index 0000000..34d7035 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-ltr.svg?3ffd5 @@ -0,0 +1,5 @@ + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.png?3fa7a b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.png?3fa7a new file mode 100644 index 0000000..a25d78a Binary files /dev/null and b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.png?3fa7a differ diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.svg?67397 b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.svg?67397 new file mode 100644 index 0000000..4259cb8 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.action/images/nextredirect-rtl.svg?67397 @@ -0,0 +1,5 @@ + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.png?926f7 b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.png?926f7 new file mode 100644 index 0000000..ef4a110 Binary files /dev/null and b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.png?926f7 differ diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.svg?ff441 b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.svg?ff441 new file mode 100644 index 0000000..f13a26b --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-ltr.svg?ff441 @@ -0,0 +1,5 @@ + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.png?adb14 b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.png?adb14 new file mode 100644 index 0000000..c883795 Binary files /dev/null and b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.png?adb14 differ diff --git a/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.svg?db62f b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.svg?db62f new file mode 100644 index 0000000..e9dfe51 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.action/images/redirect-rtl.svg?db62f @@ -0,0 +1,5 @@ + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/audio-ltr.svg?74d04 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/audio-ltr.svg?74d04 new file mode 100644 index 0000000..cbcd07a --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/audio-ltr.svg?74d04 @@ -0,0 +1,6 @@ + + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/chat-ltr.svg?e0649 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/chat-ltr.svg?e0649 new file mode 100644 index 0000000..1424c5a --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/chat-ltr.svg?e0649 @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/document-ltr.svg?0bf90 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/document-ltr.svg?0bf90 new file mode 100644 index 0000000..ee318c6 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/document-ltr.svg?0bf90 @@ -0,0 +1,5 @@ + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/external-ltr.svg?59558 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/external-ltr.svg?59558 new file mode 100644 index 0000000..ae47a02 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/external-ltr.svg?59558 @@ -0,0 +1,6 @@ + + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/ftp-ltr.svg?c5643 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/ftp-ltr.svg?c5643 new file mode 100644 index 0000000..d8845aa --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/ftp-ltr.svg?c5643 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg?8330e b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg?8330e new file mode 100644 index 0000000..574635a --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg?8330e @@ -0,0 +1,7 @@ + + + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg?38fd5 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg?38fd5 new file mode 100644 index 0000000..31176d2 --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg?38fd5 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/mail.svg?8a79c b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/mail.svg?8a79c new file mode 100644 index 0000000..9a33dce --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/mail.svg?8a79c @@ -0,0 +1,5 @@ + + + + + diff --git a/wiki/open-iov.org/resources/src/mediawiki.skinning/images/video.svg?a3758 b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/video.svg?a3758 new file mode 100644 index 0000000..d683adc --- /dev/null +++ b/wiki/open-iov.org/resources/src/mediawiki.skinning/images/video.svg?a3758 @@ -0,0 +1,6 @@ + + + + + + diff --git a/wiki/open-iov.org/robots.txt.html b/wiki/open-iov.org/robots.txt.html new file mode 100644 index 0000000..8d6073d --- /dev/null +++ b/wiki/open-iov.org/robots.txt.html @@ -0,0 +1,245 @@ + + + + +Open-IOV + + + + + + + + + + + +
+
+
+ +
+
+
+

Main Page

+
+
From Open-IOV
+
+
+ +
+ Jump to navigation + Jump to search +

Welcome to the Open-IOV Project wiki. +

+ + +

Articles

+

Visit the Articles page for an overview of this wiki's contents. +

New and existing projects related to the following topics are welcome: +

+
  • GPU & IO Virtualization (VFIO / SR-IOV / SIOV / Mdev)
  • +
  • GPU & IO Device Drivers
  • +
  • Hypervisor Development
  • +
  • Virtualization Tools
+

Signups are open to the public and anyone can contribute. +

+

Community

+

Discord: https://discord.gg/Rb9K9DYxKK +

IRC: +

+

Contributing to Open-IOV.org

+

Due to spam account creation is temporarily disabled through the Open-IOV website. +

Contact Open-IOV moderators in the community #Documentation channel to have your account allowlisted until unmoderated signups re-open. +

+

Creating an Article

+

If you'd like to start a new article or contribute to an existing one simply create an account then visit a URL containing the article title you'd like to create or edit and click the "Edit" button. +

Example: +

https://open-iov.org/index.php/your-article-title-here +

New articles should be linked on the Articles page so people can find them. +

+ + + + +
+
+ +
+
+ +
+

Navigation menu

+
+ + +
+ + + + +
+
+ + + + + + +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/arrow-down.svg?9426f b/wiki/open-iov.org/skins/Vector/resources/common/images/arrow-down.svg?9426f new file mode 100644 index 0000000..7bf356a --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/arrow-down.svg?9426f @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/bullet-icon.svg?d4515 b/wiki/open-iov.org/skins/Vector/resources/common/images/bullet-icon.svg?d4515 new file mode 100644 index 0000000..d047217 --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/bullet-icon.svg?d4515 @@ -0,0 +1,4 @@ + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/external-link-ltr-icon.svg?48e54 b/wiki/open-iov.org/skins/Vector/resources/common/images/external-link-ltr-icon.svg?48e54 new file mode 100644 index 0000000..526f999 --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/external-link-ltr-icon.svg?48e54 @@ -0,0 +1,6 @@ + + + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/portal-separator.png?4ab04 b/wiki/open-iov.org/skins/Vector/resources/common/images/portal-separator.png?4ab04 new file mode 100644 index 0000000..942674b Binary files /dev/null and b/wiki/open-iov.org/skins/Vector/resources/common/images/portal-separator.png?4ab04 differ diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/search.svg?bbf78 b/wiki/open-iov.org/skins/Vector/resources/common/images/search.svg?bbf78 new file mode 100644 index 0000000..9868bac --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/search.svg?bbf78 @@ -0,0 +1,7 @@ + + + + search + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/tab-normal-fade.png?1cc52 b/wiki/open-iov.org/skins/Vector/resources/common/images/tab-normal-fade.png?1cc52 new file mode 100644 index 0000000..daac499 Binary files /dev/null and b/wiki/open-iov.org/skins/Vector/resources/common/images/tab-normal-fade.png?1cc52 differ diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/tab-separator.png?09d4b b/wiki/open-iov.org/skins/Vector/resources/common/images/tab-separator.png?09d4b new file mode 100644 index 0000000..860be48 Binary files /dev/null and b/wiki/open-iov.org/skins/Vector/resources/common/images/tab-separator.png?09d4b differ diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon-hl.svg?5e652 b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon-hl.svg?5e652 new file mode 100644 index 0000000..f9c3555 --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon-hl.svg?5e652 @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon.svg?c5368 b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon.svg?c5368 new file mode 100644 index 0000000..fe3f94a --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-icon.svg?c5368 @@ -0,0 +1,15 @@ + + + + unwatch + + + + + + + + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg?f3db6 b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg?f3db6 new file mode 100644 index 0000000..c5c8cc7 --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon-hl.svg?f3db6 @@ -0,0 +1,18 @@ + + + + unwatch temporary highlighted + + + + + + + + + + + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon.svg?195f5 b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon.svg?195f5 new file mode 100644 index 0000000..1a472cd --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/unwatch-temp-icon.svg?195f5 @@ -0,0 +1,18 @@ + + + + unwatch temporary + + + + + + + + + + + + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon-hl.svg?9bf90 b/wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon-hl.svg?9bf90 new file mode 100644 index 0000000..c26b54e --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon-hl.svg?9bf90 @@ -0,0 +1,7 @@ + + + + watch highlighted + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon.svg?6ab6f b/wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon.svg?6ab6f new file mode 100644 index 0000000..9cb8506 --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/common/images/watch-icon.svg?6ab6f @@ -0,0 +1,7 @@ + + + + watch + + + diff --git a/wiki/open-iov.org/skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg?b7f58 b/wiki/open-iov.org/skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg?b7f58 new file mode 100644 index 0000000..aa4ef95 --- /dev/null +++ b/wiki/open-iov.org/skins/Vector/resources/skins.vector.styles.legacy/images/user-avatar.svg?b7f58 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/wiki/vGPU-IO-Integration-Guide.md b/wiki/vGPU-IO-Integration-Guide.md new file mode 100644 index 0000000..6e248c9 --- /dev/null +++ b/wiki/vGPU-IO-Integration-Guide.md @@ -0,0 +1,480 @@ +# vGPU-IO Integration Guide + +## Overview +This guide covers implementing a Linux kernel driver for vGPU-IO using the GSP 570.144W firmware RPC interface. + +## Architecture + +``` +┌─────────────────────────────────────────────────────────────┐ +│ vGPU-IO Kernel Driver │ +├─────────────────────────────────────────────────────────────┤ +│ gsp_core.c │ gsp_rpc.c │ gsp_vf.c │ +│ - Device probe │ - RPC client │ - VF lifecycle │ +│ - BAR mapping │ - Doorbell │ - Migration │ +│ - IRQ/MSI-X │ - Completion │ - WPR/BAR integration │ +├─────────────────────────────────────────────────────────────┤ +│ GSP Firmware (570.144W) │ +│ Primary Dispatcher (0x057A1AC0) │ Secondary (0x04ED39DC) │ +│ BAR Handler (0x04CB8188) │ WPR Handlers │ +│ Migration (0x04179ED8/0x04179FBC)│ SCHED/ALLOC/PIN │ +└─────────────────────────────────────────────────────────────┘ +``` + +## Module Structure + +``` +drivers/gpu/nvidia/gsp/ +├── gsp.h # Core definitions +├── gsp_rpc.h # RPC message formats +├── gsp_vf.h # VF definitions +├── gsp_bar.h # BAR emulation +├── gsp_wpr.h # WPR management +├── gsp_migration.h # Migration protocol +├── gsp_core.c # Probe/remove, BAR/IRQ +├── gsp_rpc.c # RPC client implementation +├── gsp_vf.c # VF create/destroy +├── gsp_bar.c # BAR trap handler +├── gsp_wpr.c # WPR protect/unprotect +├── gsp_migration.c # Live migration +└── gsp_debugfs.c # Debug interface +``` + +## Core Data Structures + +### GSP Device +```c +struct gsp_device { + struct pci_dev *pdev; + void __iomem *bar0; // PCIe BAR0 mapping + void __iomem *bar1; // PCIe BAR1 (GSP FW) + struct gsp_firmware *fw; // Firmware image + struct gsp_rpc_client *rpc; // RPC client + struct mutex vf_lock; + struct idr vf_idr; // VF ID allocator + struct list_head vf_list; + struct gsp_debugfs *debugfs; + spinlock_t doorbell_lock; + uint32_t doorbell_seq; +}; +``` + +### VF (Virtual Function) +```c +struct gsp_vf { + struct gsp_device *gsp; + uint32_t id; // VF ID (1-7) + struct kref ref; + struct mutex lock; + mig_state_t mig_state; + struct gsp_migration *migration; + uint64_t bar1_offset; // BAR1 aperture offset + uint64_t bar1_size; // BAR1 aperture size + uint64_t pt_base; // Page table base + uint64_t pt_size; // Page table size + uint64_t cmd_base; // Command buffer base + uint64_t cmd_size; // Command buffer size + struct gsp_wpr_region *wpr_regions; + struct list_head wpr_list; + struct gsp_bar_state bar_state; + atomic_t refcount; + bool active; +}; +``` + +## Initialization Sequence + +### 1. PCI Probe +```c +static int gsp_probe(struct pci_dev *pdev, const struct pci_device_id *id) { + struct gsp_device *gsp; + int ret; + + gsp = devm_kzalloc(&pdev->dev, sizeof(*gsp), GFP_KERNEL); + gsp->pdev = pdev; + pci_set_drvdata(pdev, gsp); + + // Enable PCI device + ret = pcim_enable_device(pdev); + if (ret) return ret; + + // Map BARs + gsp->bar0 = pcim_iomap(pdev, 0, 0); + gsp->bar1 = pcim_iomap(pdev, 1, 0); + if (!gsp->bar0 || !gsp->bar1) return -ENOMEM; + + // Load firmware + ret = gsp_firmware_load(gsp, "gsp-570.144.fwimage.bin"); + if (ret) return ret; + + // Initialize RPC client + gsp->rpc = gsp_rpc_client_init(gsp); + if (IS_ERR(gsp->rpc)) return PTR_ERR(gsp->rpc); + + // Setup IRQ/MSI-X + ret = gsp_setup_irq(gsp); + if (ret) return ret; + + // Initialize debugfs + gsp_debugfs_init(gsp); + + return 0; +} +``` + +### 2. Firmware Loading +```c +int gsp_firmware_load(struct gsp_device *gsp, const char *name) { + const struct firmware *fw; + int ret; + + ret = request_firmware(&fw, name, &gsp->pdev->dev); + if (ret) return ret; + + // Verify MD5: 13ce12a392a31eeb79a2e6ebd3a4a93a + if (!gsp_firmware_verify(fw->data, fw->size)) { + release_firmware(fw); + return -EINVAL; + } + + // Load to GSP memory (via BAR1) + ret = gsp_firmware_upload(gsp, fw->data, fw->size); + release_firmware(fw); + + return ret; +} +``` + +### 3. GSP Boot +```c +int gsp_boot(struct gsp_device *gsp) { + // 1. Reset GSP + writel(1, gsp->bar0 + GSP_RESET_REG); + msleep(10); + writel(0, gsp->bar0 + GSP_RESET_REG); + + // 2. Wait for entry point (0x04009000) to signal ready + ret = gsp_wait_for_ready(gsp, 5000); // 5s timeout + if (ret) return ret; + + // 3. Initialize RPC dispatchers + ret = gsp_rpc_init_dispatchers(gsp); + if (ret) return ret; + + return 0; +} +``` + +## RPC Client Implementation + +### Doorbell Mechanism +```c +#define GSP_DOORBELL_OFFSET 0x1000 +#define GSP_MSG_RING_SIZE 256 +#define GSP_MSG_MAX_SIZE 256 + +struct gsp_rpc_client { + struct gsp_device *gsp; + struct mutex lock; + uint32_t seq; + wait_queue_head_t wq; + struct gsp_msg_ring *ring; + struct completion *pending[GSP_MAX_PENDING]; +}; + +static int gsp_rpc_send_sync(struct gsp_rpc_client *rpc, + uint32_t rpc_type, + void *payload, size_t payload_size, + void *response, size_t *response_size) { + struct gsp_msg msg = { + .hdr = { + .magic = 0x47535052, + .version = 1, + .rpc_type = rpc_type, + .sequence = atomic_inc_return(&rpc->seq), + .timestamp_ns = ktime_get_ns(), + .payload_size = payload_size, + .flags = MSG_SYNC, + } + }; + + struct completion done; + init_completion(&done); + + mutex_lock(&rpc->lock); + rpc->pending[msg.hdr.sequence % GSP_MAX_PENDING] = &done; + + // Copy message to ring buffer + memcpy(msg.hdr.payload, payload, payload_size); + gsp_ring_write(rpc->ring, &msg, GSP_MSG_MAX_SIZE); + + // Ring doorbell + writel(1, rpc->gsp->bar0 + GSP_DOORBELL_OFFSET); + + mutex_unlock(&rpc->lock); + + // Wait for completion + if (!wait_for_completion_timeout(&done, msecs_to_jiffies(5000))) + return -ETIMEDOUT; + + // Copy response + if (response && response_size) { + *response_size = min(*response_size, done.payload_size); + memcpy(response, done.payload, *response_size); + } + + return done.status; +} +``` + +### Completion Handler (ISR) +```c +static irqreturn_t gsp_isr(int irq, void *data) { + struct gsp_device *gsp = data; + struct gsp_msg msg; + + while (gsp_ring_read(gsp->rpc->ring, &msg)) { + if (msg.hdr.flags & MSG_SYNC) { + struct completion *done = + gsp->rpc->pending[msg.hdr.sequence % GSP_MAX_PENDING]; + if (done) { + done->status = msg.payload.status; + done->payload_size = msg.hdr.payload_size; + memcpy(done->payload, msg.payload.data, msg.hdr.payload_size); + complete(done); + } + } else { + // Async notification + gsp_handle_notification(gsp, &msg); + } + } + + return IRQ_HANDLED; +} +``` + +## VF Lifecycle + +### Create VF +```c +int gsp_vf_create(struct gsp_device *gsp, uint32_t vf_id, + const struct gsp_vf_config *config) { + struct gsp_vf *vf; + int ret; + + mutex_lock(&gsp->vf_lock); + + if (idr_alloc(&gsp->vf_idr, NULL, vf_id, vf_id + 1, GFP_KERNEL) < 0) { + ret = -EBUSY; + goto unlock; + } + + vf = kzalloc(sizeof(*vf), GFP_KERNEL); + vf->gsp = gsp; + vf->id = vf_id; + kref_init(&vf->ref); + mutex_init(&vf->lock); + INIT_LIST_HEAD(&vf->wpr_list); + + // Configure VF resources + vf->bar1_offset = config->bar1_offset; + vf->bar1_size = config->bar1_size; + vf->pt_base = config->pt_base; + vf->pt_size = config->pt_size; + vf->cmd_base = config->cmd_base; + vf->cmd_size = config->cmd_size; + + // Initialize WPR for VF + ret = gsp_vf_wpr_init(vf); + if (ret) goto err_wpr; + + // Initialize BAR for VF + ret = gsp_vf_bar_init(vf); + if (ret) goto err_bar; + + list_add(&vf->list, &gsp->vf_list); + vf->active = true; + + mutex_unlock(&gsp->vf_lock); + return 0; + +err_bar: + gsp_vf_wpr_fini(vf); +err_wpr: + idr_remove(&gsp->vf_idr, vf_id); + kfree(vf); +unlock: + mutex_unlock(&gsp->vf_lock); + return ret; +} +``` + +### Destroy VF +```c +void gsp_vf_destroy(struct gsp_vf *vf) { + struct gsp_device *gsp = vf->gsp; + uint32_t id = vf->id; + + mutex_lock(&gsp->vf_lock); + vf->active = false; + list_del(&vf->list); + mutex_unlock(&gsp->vf_lock); + + gsp_vf_bar_fini(vf); + gsp_vf_wpr_fini(vf); + + if (vf->migration) + gsp_migration_cancel(vf->migration); + + kref_put(&vf->ref, gsp_vf_release); +} + +static void gsp_vf_release(struct kref *ref) { + struct gsp_vf *vf = container_of(ref, struct gsp_vf, ref); + kfree(vf); +} +``` + +## Memory Management (ALLOC/PIN) + +### Allocate VF Memory +```c +int gsp_vf_mem_alloc(struct gsp_vf *vf, + uint64_t size, uint32_t flags, + uint64_t *handle, uint64_t *va) { + struct alloc_payload payload = { + .size = size, + .type = MEM_TYPE_VRAM, + .alignment = 0x1000, + .va_hint = 0, + .flags = flags, + .pid = current->pid, + .vf_id = vf->id, + }; + + struct alloc_response resp; + size_t resp_size = sizeof(resp); + + return gsp_rpc_send_sync(vf->gsp->rpc, RPC_ALLOC, + &payload, sizeof(payload), + &resp, &resp_size); +} +``` + +### Pin Memory for DMA +```c +int gsp_vf_mem_pin(struct gsp_vf *vf, uint64_t handle, + uint64_t offset, uint64_t size, + uint64_t *dma_addr) { + struct pin_payload payload = { + .handle = handle, + .offset = offset, + .size = size, + .vf_id = vf->id, + .flags = PIN_WRITE | PIN_READ, + }; + + struct pin_response resp; + size_t resp_size = sizeof(resp); + + return gsp_rpc_send_sync(vf->gsp->rpc, RPC_PIN, + &payload, sizeof(payload), + &resp, &resp_size); +} +``` + +## Debugging & Testing + +### Debugfs Interface +```bash +# List VFs +cat /sys/kernel/debug/gsp/vfs + +# VF details +cat /sys/kernel/debug/gsp/vf/1/status + +# RPC statistics +cat /sys/kernel/debug/gsp/rpc/stats + +# BAR state +cat /sys/kernel/debug/gsp/vf/1/bar + +# WPR regions +cat /sys/kernel/debug/gsp/vf/1/wpr + +# Migration status +cat /sys/kernel/debug/gsp/vf/1/migration +``` + +### Trace Events +```bash +# Enable tracing +echo 1 > /sys/kernel/debug/tracing/events/gsp/enable + +# Trace migration +trace-cmd record -e gsp_mig_phase -e gsp_mig_transfer + +# Trace WPR +trace-cmd record -e gsp_wpr_event +``` + +### Unit Tests +```c +// kselftest for gsp-rpc +static void test_rpc_alloc(void) { + struct gsp_vf *vf = create_test_vf(); + uint64_t handle, va; + + ASSERT_EQ(gsp_vf_mem_alloc(vf, 4096, 0, &handle, &va), 0); + ASSERT_NE(handle, 0); + ASSERT_NE(va, 0); + + gsp_vf_mem_free(vf, handle); + destroy_test_vf(vf); +} +``` + +## Error Handling Checklist + +| Scenario | Detection | Recovery | +|----------|-----------|----------| +| GSP firmware crash | Watchdog timeout | Reset GSP, reload FW | +| RPC timeout | Doorbell no response | Retry, then VF reset | +| BAR trap storm | Rate limit exceeded | Throttle VF | +| WPR violation | Callback storm | Quarantine VF | +| Migration fail | Commit verify fail | Rollback to source | + +## Performance Tuning + +### RPC Batching +```c +// Batch multiple ALLOCs in single RPC +struct batch_alloc_payload { + uint32_t count; + struct alloc_payload allocs[MAX_BATCH]; +}; +``` + +### Async Completion +```c +// Use async RPC for non-critical paths +gsp_rpc_send_async(rpc, RPC_NOTIFY, payload, size, callback, ctx); +``` + +### Memory Pool +```c +// Pre-allocate bounce buffers +struct gsp_bounce_pool { + struct page **pages; + int count; + spinlock_t lock; +}; +``` + +--- + +## Reference +- GSP Firmware: gsp-570.144.fwimage.bin +- Base Address: 0x04000000 +- Primary Dispatcher: 0x057A1AC0 +- Secondary Dispatcher: 0x04ED39DC \ No newline at end of file -- cgit v1.2.3