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@
This commit is contained in:
Neel Natu 2013-09-11 07:11:14 +00:00
parent ad59bd68ad
commit 0f1ef0ec80
3 changed files with 9 additions and 1 deletions

View File

@ -592,3 +592,9 @@ ppt_setup_msix(struct vm *vm, int vcpu, int bus, int slot, int func,
return (0);
}
int
ppt_num_devices(void)
{
return (num_pptdevs);
}

View File

@ -38,4 +38,5 @@ int ppt_setup_msi(struct vm *vm, int vcpu, int bus, int slot, int func,
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

View File

@ -213,7 +213,8 @@ vmm_handler(module_t mod, int what, void *arg)
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;