mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
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
1 changed files with 7 additions and 1 deletions
|
|
@ -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 a new issue