Xen PCI Passthrough

From Alpine Linux

This guide is to show how to configure PCI Passthrough on Alpine.

First, use lspci to find the the PCI-Address of the Device you want to Passthrough:

node03:~# lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 Processor Family DRAM Controller (rev 09)
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 05)
00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05)
00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5)
00:1c.4 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 5 (rev b5)
00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev a5)
00:1f.0 ISA bridge: Intel Corporation C204 Chipset Family LPC Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 6 Series/C200 Series Chipset Family SATA AHCI Controller (rev 05)
00:1f.3 SMBus: Intel Corporation 6 Series/C200 Series Chipset Family SMBus Controller (rev 05)
01:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
02:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
03:03.0 VGA compatible controller: Matrox Electronics Systems Ltd. MGA G200eW WPCM450 (rev 0a)

In this example, I want to passthrough the SAS Controller. So the Address is 01:00.0 Currently there is a bug #3609in Alpine that prevents using default Kernelparameters.

Edit /etc/modules and reboot the server:

node03:~# grep pciback /etc/modules 
xen_pciback hide=(01:00.0)

After rebooting, you should be able to verify the pci-device is using the pciback Kernelmodule and that it's visible to passthrough via xl:

node03:~# lspci -k | grep -A2 '01:00.0'
01:00.0 Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)
        Subsystem: LSI Logic / Symbios Logic Device 3020
        Kernel driver in use: pciback
node03:~# xl pci-assignable-list
0000:01:00.0

Add the following line to your DomU's Config:

pci = [ '01:00.0' ]

Known Issue with LSI Controllers

As the Kernelmodule for LSI Controllers is built into the Alpine Initramfs, the real Module is loaded before the pciback Module can be assigned.
You'll need to blacklist the mpt2sas module in /etc/modprobe.d/blacklist.conf and rebuild your initramfs.

node03:~# grep sas /etc/modprobe.d/blacklist.conf 
blacklist mpt2sas
node03:~# mkinitfs 
==> initramfs: creating /boot/initramfs-grsec
11538 blocks
33641 blocks