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-all mailing list