svn commit: r255469 - in head/sys/amd64/vmm: . io

Neel Natu neel at FreeBSD.org
Wed Sep 11 07:11:15 UTC 2013


Author: neel
Date: Wed Sep 11 07:11:14 2013
New Revision: 255469
URL: http://svnweb.freebsd.org/changeset/base/255469

Log:
  Fix a limitation in bhyve that would limit the number of virtual machines to
  the maximum number of VT-d domains (256 on a Sandybridge). We now allocate a
  VT-d domain for a guest only if the administrator has explicitly configured
  one or more PCI passthru device(s).
  
  If there are no PCI passthru devices configured (the common case) then the
  number of virtual machines is no longer limited by the maximum number of
  VT-d domains.
  
  Reviewed by: grehan@
  Approved by: re@

Modified:
  head/sys/amd64/vmm/io/ppt.c
  head/sys/amd64/vmm/io/ppt.h
  head/sys/amd64/vmm/vmm.c

Modified: head/sys/amd64/vmm/io/ppt.c
==============================================================================
--- head/sys/amd64/vmm/io/ppt.c	Wed Sep 11 06:42:55 2013	(r255468)
+++ head/sys/amd64/vmm/io/ppt.c	Wed Sep 11 07:11:14 2013	(r255469)
@@ -592,3 +592,9 @@ ppt_setup_msix(struct vm *vm, int vcpu, 
 	return (0);
 }
 
+int
+ppt_num_devices(void)
+{
+
+	return (num_pptdevs);
+}

Modified: head/sys/amd64/vmm/io/ppt.h
==============================================================================
--- head/sys/amd64/vmm/io/ppt.h	Wed Sep 11 06:42:55 2013	(r255468)
+++ head/sys/amd64/vmm/io/ppt.h	Wed Sep 11 07:11:14 2013	(r255469)
@@ -38,4 +38,5 @@ int	ppt_setup_msi(struct vm *vm, int vcp
 		      int destcpu, int vector, int numvec);
 int	ppt_setup_msix(struct vm *vm, int vcpu, int bus, int slot, int func,
 		       int idx, uint32_t msg, uint32_t vector_control, uint64_t addr);
+int	ppt_num_devices(void);
 #endif

Modified: head/sys/amd64/vmm/vmm.c
==============================================================================
--- head/sys/amd64/vmm/vmm.c	Wed Sep 11 06:42:55 2013	(r255468)
+++ head/sys/amd64/vmm/vmm.c	Wed Sep 11 07:11:14 2013	(r255469)
@@ -213,7 +213,8 @@ vmm_handler(module_t mod, int what, void
 	switch (what) {
 	case MOD_LOAD:
 		vmmdev_init();
-		iommu_init();
+		if (ppt_num_devices() > 0)
+			iommu_init();
 		error = vmm_init();
 		if (error == 0)
 			vmm_initialized = 1;


More information about the svn-src-all mailing list