svn commit: r326538 - head/sys/amd64/vmm/amd
Andriy Gapon
avg at FreeBSD.org
Mon Dec 4 17:08:05 UTC 2017
Author: avg
Date: Mon Dec 4 17:08:03 2017
New Revision: 326538
URL: https://svnweb.freebsd.org/changeset/base/326538
Log:
vmm/amd: add ivhd device with a higher order
ivhd should attach after the root PCI bus and, thus, after the ACPI
Host-PCI bridge off which the bus hangs. This is because ivhd changes
PCI configuration of a PCI IOMMU device that is located on the root bus.
If the bus attaches after ivhd it clears the MSI portion of the
configuration. As a result IOMMU event interrupts would never be
delivered.
For regular ACPI devices the order is calculated as
ACPI_DEV_BASE_ORDER + level * 10
where level is a depth of the device in the ACPI namespace.
I expect the depth of the Host-PCI bridge to be two or three,
so ACPI_DEV_BASE_ORDER + 10 * 10 should be a sufficiently safe order
for ivhd.
This should fix the setup of the AMD-Vi event interrupt when vmm is
preloaded (as opposed to kldload-ed).
Modified:
head/sys/amd64/vmm/amd/ivrs_drv.c
Modified: head/sys/amd64/vmm/amd/ivrs_drv.c
==============================================================================
--- head/sys/amd64/vmm/amd/ivrs_drv.c Mon Dec 4 17:02:53 2017 (r326537)
+++ head/sys/amd64/vmm/amd/ivrs_drv.c Mon Dec 4 17:08:03 2017 (r326538)
@@ -324,7 +324,13 @@ ivhd_identify(driver_t *driver, device_t parent)
continue;
}
- ivhd_devs[i] = BUS_ADD_CHILD(parent, 1, "ivhd", i);
+ /*
+ * Use a high order to ensure that this driver is probed after
+ * the Host-PCI bridge and the root PCI bus.
+ */
+ ivhd_devs[i] = BUS_ADD_CHILD(parent,
+ ACPI_DEV_BASE_ORDER + 10 * 10, "ivhd", i);
+
/*
* XXX: In case device was not destroyed before, add will fail.
* locate the old device instance.
More information about the svn-src-head
mailing list