===== notes =====
### 1
# Run an intel system with "intel_iommu=on iommu=pt".
# The latter option is optional on older RHEL versions (i.e. 6),
# disables checks for better performance.
$ cat /proc/cmdline
[..] intel_iommu=on iommu=pt
### 2
# verify that cgroups are created (only applicable to RHEL7)
$ find /sys/kernel/iommu_groups/ -type l
### 3
# inspect the systems pci devices
$ lspci -nvv | less
# For example, I want to export 03:00.1
03:00.1 0200: 14e4:165f
Subsystem: 1028:0639
[..]
Kernel driver in use: tg3
Kernel modules: tg3
# => we want to pass through here device 03:00.1
### 4
# find out the devices in the same cgroup
$ ll /sys/bus/pci/devices/0000\:03\:00.1/iommu_group/devices/
total 0
[..] 0000:03:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:03:00.0
[..] 0000:03:00.1 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:03:00.1
# or via virsh:
$ virsh nodedev-list --tree
computer
|
[..]
+- pci_0000_00_1c_3
| |
| +- pci_0000_03_00_0
| | |
| | +- net_em3_18_66_da_5a_ee_95
| |
| +- pci_0000_03_00_1
# => So we will need to detach these 2 devices,
pci_0000_03_00_0 and pci_0000_03_00_1, from the host
### 5
# get the virsh name for the device
$ virsh nodedev-list --cap pci
[..]
pci_0000_03_00_1
[..]
### 6
# detach the devices seen in 4)
$ virsh nodedev-dettach pci_0000_03_00_0
Device pci_0000_03_00_0 detached
$ virsh nodedev-dettach pci_0000_03_00_1
Device pci_0000_03_00_1 detached
### 5
# start the VM with the device passthrough
$ virt-install --name=guest1-rhel6-64 \
--disk path=/var/lib/libvirt/images/guest1-rhel6-64.img,size=8
--vcpus=2 --ram=2048 \
--location=http://ip/6.8/Server/x86_64/os/
--network bridge=virbr0,model=virtio \
--os-type=linux --os-variant=rhel6 \
--host-device=pci_0000_03_00_1
===== errors and hints =====
== error ==
$ virt-install [..] --host-device=pci_0000_03_00_1
Starting install...
Retrieving file vmlinuz... | 4.1 MB 00:00:10
Retrieving file initrd.img... | 39 MB 00:00:12
Allocating 'guest1-rhel6-64.img' | 8.0 GB 00:00:00
ERROR internal error: qemu unexpectedly closed the monitor: 2017-05-11T08:25:06.847580Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: vfio: error, group 18 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.
2017-05-11T08:25:06.847605Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: vfio: failed to get group 18
2017-05-11T08:25:06.847629Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: Device initialization failed.
2017-05-11T08:25:06.847641Z qemu-kvm: -device vfio-pci,host=03:00.1,id=hostdev0,bus=pci.0,addr=0x8: Device 'vfio-pci' could not be initialized
Removing disk 'guest1-rhel6-64.img' | 0 B 00:00:00
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
virsh --connect qemu:///system start guest1-rhel6-64
otherwise, please restart your installation.
== hint ==
Although just this device is intended to be reached through, all devices in the group have to be in the cgroup, and to be detached from the host. Perform steps 4 and 6 from above.