Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 4 Dec 2017 17:08:03 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r326538 - head/sys/amd64/vmm/amd
Message-ID:  <201712041708.vB4H83vk000635@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201712041708.vB4H83vk000635>