Once you ensured that your hardware supports passthrough, you will need to do
some configuration to enable PCI(e) passthrough.
-
.IOMMU
-The IOMMU has to be activated on the
-xref:sysboot_edit_kernel_cmdline[kernel commandline].
+First, you have to enable IOMMU support in your BIOS/UEFI. Usually the
+corresponding setting is called `IOMMU` or `VT-d`,but you should find the exact
+option name in the manual of your motherboard.
-The command line parameters are:
+For Intel CPUs, you may also need to enable the IOMMU on the
+xref:sysboot_edit_kernel_cmdline[kernel command line] for older (pre-5.15)
+kernels by adding:
-* for Intel CPUs:
-+
----
intel_iommu=on
----
-* for AMD CPUs:
-+
+
+For AMD CPUs it should be enabled automatically.
+
+.IOMMU Passthrough Mode
+
+If your hardware supports IOMMU passthrough mode, enabling this mode might
+increase performance.
+This is because VMs then bypass the (default) DMA translation normally
+performed by the hyper-visor and instead pass DMA requests directly to the
+hardware IOMMU. To enable these options, add:
+
----
- amd_iommu=on
+ iommu=pt
----
+to the xref:sysboot_edit_kernel_cmdline[kernel commandline].
.Kernel Modules
----
If your device has multiple functions (e.g., ``00:02.0`' and ``00:02.1`' ),
-you can pass them through all together with the shortened syntax ``00:02`'
+you can pass them through all together with the shortened syntax ``00:02`'.
+This is equivalent with checking the ``All Functions`' checkbox in the
+web-interface.
There are some options to which may be necessary, depending on the device
and guest OS:
# qm set VMID -hostpci0 02:00,pcie=on,x-vga=on
----
+.PCI ID overrides
+
+You can override the PCI vendor ID, device ID, and subsystem IDs that will be
+seen by the guest. This is useful if your device is a variant with an ID that
+your guest's drivers don't recognize, but you want to force those drivers to be
+loaded anyway (e.g. if you know your device shares the same chipset as a
+supported variant).
+
+The available options are `vendor-id`, `device-id`, `sub-vendor-id`, and
+`sub-device-id`. You can set any or all of these to override your device's
+default IDs.
+
+For example:
+
+----
+# qm set VMID -hostpci0 02:00,device-id=0x10f6,sub-vendor-id=0x0000
+----
+
Other considerations
^^^^^^^^^^^^^^^^^^^^
With this set, {pve} automatically creates such a device on VM start, and
cleans it up again when the VM stops.
+Use in Clusters
+~~~~~~~~~~~~~~~
+
+It is also possible to map devices on a cluster level, so that they can be
+properly used with HA and hardware changes are detected and non root users
+can configure them. See xref:resource_mapping[Resource Mapping]
+for details on that.
+
ifdef::wiki[]
See Also