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).
This commit is contained in:
parent
8f09494d1e
commit
df92c28d6a
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user