Stephen Oberholtzer
2018-Oct-13 20:08 UTC
[Pkg-xen-devel] Bug#910961: xen-hypervisor-4.11-amd64: HVM domU fails to start when using PCI passthrough
Package: xen-hypervisor-4.11-amd64 Version: 4.11.1~pre.20180911.5acdd26fdc+dfsg-3 Severity: normal Dear Maintainer, HVM domUs that specify PCI passthrough will not start. The same configuration file started under Xen 4.8. The output I am receiving is as follows: libxl: error: libxl_pci.c:1146:libxl__device_pci_reset: Domain 0:The kernel doesn't support reset from sysfs for PCI device 0000:00:14.0 libxl: error: libxl_qmp.c:292:qmp_handle_error_response: Domain 31:received an error message from QMP server: Binding of interrupt 0 failed: Permission denied libxl: error: libxl_pci.c:1300:libxl__add_pcidevs: Domain 31:libxl_device_pci_add failed: -3 libxl: error: libxl_create.c:1519:domcreate_attach_devices: Domain 31:unable to add pci devices libxl: error: libxl_domain.c:1034:libxl__destroy_domid: Domain 31:Non-existant domain libxl: error: libxl_domain.c:993:domain_destroy_callback: Domain 31:Unable to destroy guest libxl: error: libxl_domain.c:920:domain_destroy_cb: Domain 31:Destruction of domain failed (There are three PCI devices I'm trying to pass through: 00:14.0, 01:00.[01], and 03:00.0. I tried each set individually, and got equivalent results each time.) With 'log_lvl=all guest_loglvl=all', all I get in xl dmesg is a bunch of lines saying "HVM<domid> save:" for CPU, PIC, IOAPIC, etc. Google gives me nothing. I can find a small number of (unanswered) "Binding of interrupt 0 failed" messages, but none about 'Permission denied'. However, it looks like the message may be incorrect, due to an mismatch between qemu and libxen. Reading through the source code: qemu: hw/xen/xen_pt.c line 874 logs the message. 874 error_setg_errno(errp, errno, "Binding of interrupt %u failed", 875 e_intx); That's using 'errno'. However, the failed call was to xc_domain_bind_pt_pci_irq. libxen: tools/libxc/xc_domain.c:1899, xc_domain_bind_pt_pci_irq forwards to xc_domain_bind_pt_irq libxen: tools/libxc/xc_domain.c:1827, xc_domain_bind_pt_irq forwards to xc_domain_bind_pt_irq_int libxen: tools/libxc/xc_domain.c:1783, xc_domain_bind_pt_irq_int If an invalid argument is passed, this function returns -1 and sets errno to EINVAL, matching what qemu is expecting. If pre-validation passes, the request is forwarded to do_domctl. lixben: xen/common/domctl.c:380, do_domctl This function doesn't seem to set errno. Instead, it returns (-ETHING). This means that, if the request is handled by do_domctl, errno is unchanged, and so the "Permission denied" message may be from an EPERM left in errno from an earlier operation. -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (900, 'testing'), (400, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 4.18.6 (SMP w/12 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled xen-hypervisor-4.11-amd64 depends on no packages. Versions of packages xen-hypervisor-4.11-amd64 recommends: ii xen-hypervisor-common 4.11.1~pre.20180911.5acdd26fdc+dfsg-1~exp1 ii xen-utils-4.11 4.11.1~pre.20180911.5acdd26fdc+dfsg-3 xen-hypervisor-4.11-amd64 suggests no packages. -- no debconf information -- System Information: Debian Release: buster/sid APT prefers testing APT policy: (900, 'testing'), (400, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 4.18.6 (SMP w/12 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled xen-hypervisor-4.11-amd64 depends on no packages. Versions of packages xen-hypervisor-4.11-amd64 recommends: ii xen-hypervisor-common 4.11.1~pre.20180911.5acdd26fdc+dfsg-1~exp1 ii xen-utils-4.11 4.11.1~pre.20180911.5acdd26fdc+dfsg-3 xen-hypervisor-4.11-amd64 suggests no packages. -- no debconf information